Kein Speicherplatz mehr auf der Festplatte

Kein Speicherplatz mehr auf der Festplatte

Ich verwende Ubuntu 14.04. Seit einiger Zeit kann ich nicht mehr mehrere Programme gleichzeitig ausführen. Das ist das df -hProblem:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        29G   25G  3.4G  88% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev             16G  4.0K   16G   1% /dev
tmpfs           3.2G  724K  3.2G   1% /run
none            5.0M     0  5.0M   0% /run/lock
none             16G   59M   16G   1% /run/shm
none            100M   40K  100M   1% /run/user
/dev/sda2       438G  138M  416G   1% /scratch
AFS             8.6G     0  8.6G   0% /afs

und von df -i:

Filesystem       Inodes   IUsed    IFree IUse% Mounted on
/dev/sda1       1875968 1875968        0  100% /
none            4106915      11  4106904    1% /sys/fs/cgroup
udev            4103190     499  4102691    1% /dev
tmpfs           4106915     524  4106391    1% /run
none            4106915       3  4106912    1% /run/lock
none            4106915     122  4106793    1% /run/shm
none            4106915      27  4106888    1% /run/user
/dev/sda2      29138944     709 29138235    1% /scratch
AFS             9000000       0  9000000    0% /afs

Ich habe auch den Vorschlag hier ausprobiert:bash: echo: Schreibfehler: Kein Speicherplatz mehr auf dem Gerät, hilft nicht, es macht es sogar noch schlimmer. Wenn ich jetzt das Terminal betrete und den Namen eines Ordners teilweise eingebe, drücke ich Tab und erhalte:

cd Pybash: cannot create temp file for here-document: No space left on device

wo ich nur schreiben wollte

cd Python

Bearbeiten: Die Ausgabe sudo du -hxd1 /ist:

1.5G    /var
22G /usr
18M /etc
16K /lost+found
36K /home
349M    /opt
68K /tmp
9.7M    /bin
4.2M    /libx32
12K /.config
2.5M    /root
4.0K    /mnt
4.0K    /lib64
13M /sbin
81M /boot
505M    /lib
3.5M    /lib32
12K /media
4.0K    /srv
25G /

Antwort1

Der Platz ist hier nicht das Problem. Sie haben ein Verzeichnis mit sehr vielen leeren (oder fast leeren) Dateien. Jede davon belegt einen Inode, und Sie haben sie alle verwendet. Suchen Sie dieses Verzeichnis:

for i in /* ; do echo "$i" ; find "$i" | wc -l ; done

(Sie sollten dies als Root tun). Dadurch wird wahrscheinlich ein Verzeichnis mit einer großen Anzahl von Dateien aufgelistet. Durchsuchen Sie das Verzeichnis, bis Sie die Dateien finden, die Ihre Inodes erschöpft haben. Löschen Sie alle diese Dateien. Dann ist für den Moment alles in Ordnung. Woher diese Dateien kommen, ist natürlich eine andere Geschichte.

Antwort2

Wie Sie sehen können df -h, ist auf Ihrer Root-Partition noch Platz frei. Allerdings df -izeigt Ihnen , dass Sie keine Inodes mehr haben. Auf meinem Computer sind auf meiner Root-Partition 7,3 G belegt, aber nur 320.000 Inodes, sodass Sie wahrscheinlich viele sehr kleine Dateien haben, die irgendwo alles verstopfen.

Eine Diskussion darüber, wo, finden Sie beispielsweiseStack Exchange - Finden Sie heraus, wo Inodes verwendet werden. Ich würde Folgendes von dieser Seite versuchen:

sudo find / -xdev -printf '%h\0' | sort -z | uniq -cz | sort -nrzk 1 | tr '\0' '\n' | head -n 50

Wenn Sie eine neuere Version von Ubuntu verwenden (z. B. 15.10), ist dieser kürzere Befehl möglicherweise auch schneller:

sudo du / --inodes -xS | sort -rh | head -n 50

Beide geben Ihnen eine Liste von Verzeichnissen, sortiert nach der Anzahl der verwendeten Inodes. Sie werden wahrscheinlich eines mit einer sehr hohen Zahl finden (wahrscheinlich irgendwo /var). Dies sollte Ihnen eine Vorstellung davon geben, welche Dateien Sie löschen können, aber wenn Sie Fragen haben, fragen Sie zuerst hier.

Als Anhaltspunkt dafür, was normal sein könnte: Auf meinem Computer (auf dem Ubuntu 15.10 läuft) erhalte ich von diesem Befehl die folgende Ausgabe:

3297    /usr/share/app-install/desktop
3022    /usr/share/man/man3
2325    /usr/bin
2149    /usr/share/man/man1
2104    /usr/share/app-install/icons
1816    /usr/lib/x86_64-linux-gnu
1089    /usr/src/linux-headers-4.2.0-19/include/linux
1089    /usr/src/linux-headers-4.2.0-18/include/linux
1089    /usr/src/linux-headers-4.2.0-16/include/linux
...

Hier ist eine Erklärung des einfacheren Befehls. sudoist erforderlich, um den Befehl du als Root auszuführen, damit wir Dateien in Ordnern finden können, die Ihr normaler Benutzer möglicherweise nicht lesen kann. du /gibt die Datenträgerbelegung des Stammverzeichnisses an /; --inodesweist es an, die Inode-Belegung aufzulisten, -Snur Dateien im Verzeichnis selbst und nicht in Unterverzeichnissen aufzulisten und -xDateisystemgrenzen nicht zu überschreiten (da Ihr Problem definitiv auf /und nicht auf liegt, z. B. /scratch). Dann leiten wir die Ausgabe dieses Befehls weiter an , um sortdie schlimmsten Übeltäter zu finden; -rkehrt die Sortierung um, sodass die größten oben stehen, und -hsortiert numerisch und nicht alphabetisch. Schließlich head -n 50gibt nur die ersten 50 Zeilen aus (also die 50 schlimmsten Übeltäter).


Hier ist eine Erklärung des komplizierteren Befehls. sudowird benötigt, um den Find-Befehl als Root auszuführen, damit wir Dateien in Ordnern finden können, die Ihr normaler Benutzer möglicherweise nicht lesen kann. find /gibt eine Liste aller Dateien im Stammverzeichnis aus /; -xdevweist darauf hin find, Dateisystemgrenzen nicht zu überschreiten (da Ihr Problem definitiv auf /und nicht auf liegt, z. B. /scratch); -printf '%h\0'druckt den Verzeichnisnamen, der mit einem Null-Byte endet. Dann leiten wir die Ausgabe dieses Befehls an sort -zund weiter, uniq -czum zu zählen, wie oft jedes Verzeichnis gedruckt wurde (d. h. wie viele Dateien in jedem Verzeichnis sind); sortwird hier benötigt, da uniqeine sortierte Liste benötigt wird. Dann sortieren wir, um die schlimmsten Übeltäter zu finden; -rkehrt die Sortierung um, sodass die größten oben stehen, und -nsortiert numerisch und nicht alphabetisch. tr '\0' '\n'ersetzt Null-Bytes durch neue Zeilen. Schließlich head -n 50gibt nur die ersten 50 Zeilen aus (d. h. die 50 schlimmsten Übeltäter).

verwandte Informationen