
Ich verwende Ubuntu 14.04. Seit einiger Zeit kann ich nicht mehr mehrere Programme gleichzeitig ausführen. Das ist das df -h
Problem:
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 -i
zeigt 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. sudo
ist 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 /
; --inodes
weist es an, die Inode-Belegung aufzulisten, -S
nur Dateien im Verzeichnis selbst und nicht in Unterverzeichnissen aufzulisten und -x
Dateisystemgrenzen 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 sort
die schlimmsten Übeltäter zu finden; -r
kehrt die Sortierung um, sodass die größten oben stehen, und -h
sortiert numerisch und nicht alphabetisch. Schließlich head -n 50
gibt nur die ersten 50 Zeilen aus (also die 50 schlimmsten Übeltäter).
Hier ist eine Erklärung des komplizierteren Befehls. sudo
wird 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 /
; -xdev
weist 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 -z
und weiter, uniq -cz
um zu zählen, wie oft jedes Verzeichnis gedruckt wurde (d. h. wie viele Dateien in jedem Verzeichnis sind); sort
wird hier benötigt, da uniq
eine sortierte Liste benötigt wird. Dann sortieren wir, um die schlimmsten Übeltäter zu finden; -r
kehrt die Sortierung um, sodass die größten oben stehen, und -n
sortiert numerisch und nicht alphabetisch. tr '\0' '\n'
ersetzt Null-Bytes durch neue Zeilen. Schließlich head -n 50
gibt nur die ersten 50 Zeilen aus (d. h. die 50 schlimmsten Übeltäter).