Linux: Große Verzeichnisse für 'No space left on device' identifizieren

English Deutsch

TL;DR

cd / und führen Sie aus

find_largest_dirs.sh
sudo du -sh * --exclude proc --exclude sys --exclude dev

und dann wiederholen Sie dies für das größte angezeigte Verzeichnis (indem Sie in dieses Verzeichnis wechseln und den obigen Befehl ausführen)

Ausführliche Antwort

Wenn Sie No space left on device-Fehler auf Linux erhalten, bedeutet dies, dass einer Ihrer eingebundenen Datenträger (virtuell) keinen Schreibplatz mehr hat.

Prüfen Sie zuerst, welches Gerät keins mehr Platz hat:

df_h_output.sh
$ sudo df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            2.4G     0  2.4G   0% /dev
tmpfs           494M   51M  444M  11% /run
/dev/xvda1       46G   17G   11M 100% /
tmpfs           2.5G     0  2.5G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           2.5G     0  2.5G   0% /sys/fs/cgroup
tmpfs           494M     0  494M   0% /run/user/1003

Prüfen Sie die Use %-Spalte - Sie können sehen, dass das auf / eingebundene Gerät (Ihr Root-Dateisystem, d.h. das, auf dem Ihr System eingebunden ist) voll ist. In 95 % aller Fälle ist das Root-Dateisystem voll.

Dieser Beitrag behandelt nur den Fall, in dem Ihr Root-Dateisystem voll ist. In den meisten anderen Fällen ist es entweder /dev/shm (in diesem Fall hilft typischerweise ein Neustart des Systems) oder ein externes Laufwerk (in diesem Fall müssen Sie selbst herausfinden, welche Verzeichnisse gelöscht werden können).

Probabilistische Methode:

Dieser schnelle Check versucht, die wahrscheinlichsten Kandidaten zuerst zu identifizieren (basierend auf Admin-Erfahrung). Führen Sie dies in Ihrer Shell aus:

du_check_common_dirs.sh
sudo du -sh /var/lib/docker /var/lib/mysql /var/lib/postgresql /home/

Dies kann einige Zeit dauern.

Prüfen Sie, ob eines dieser Verzeichnisse so groß ist, dass es einen erheblichen Teil Ihres Festplattenplatzes verbraucht. Falls nicht, empfehle ich mit der Einfachen Methode fortzufahren:

Einfache Methode:

Kopieren & fügen Sie dies in Ihre Shell ein:

findLargestSubdir_function.sh
function findLargestSubdir { cd "$1" && sudo du -sb * --exclude proc --exclude sys --exclude dev | sort -n ; }

dann führen Sie aus

findLargestSubdir_root.sh
findLargestSubdir /

Dies sagt Ihnen, welches Verzeichnis das größte ist. Es kann lange dauern, die Größe aller Verzeichnisse zu berechnen. Dieser Befehl gibt erst etwas aus, wenn er fertig ist! Die Zahlen sind in Bytes.

Das letzte Element in der Liste ist das größte!

Führen Sie nun denselben Befehl im größten Verzeichnis aus, um das größte Unterverzeichnis zu finden. Wenn z.B. /var das größte Verzeichnis ist, führen Sie aus

findLargestSubdir_var.sh
findLargestSubdir /var

was Ihnen das größte Verzeichnis in /var anzeigt. Fahren Sie fort, die größten Unterverzeichnisse mit findLargestSubdir zu prüfen, bis Sie herausgefunden haben, was den gesamten Platz auf Ihrer Festplatte verbraucht hat.

Erweiterte Methode: Viel schneller, aber komplexer

Wenn es mehr als 2 Minuten dauert, die Größe aller Verzeichnisse zu berechnen, empfehle ich dieses interaktive Verfahren als root (sudo):

  1. ls -1 um alle Dateien und Verzeichnisse in / anzuzeigen. Beispielausgabe:
ls_root_output.sh
# ls -1 /
bin
boot
dev
etc
home
initrd.img
initrd.img.old
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
snap
srv
sys
tmp
usr
var
vmlinuz
vmlinuz.old
  1. Führen Sie nun du -sh * aus. Dies versucht, die Größe jeder dieser Dateien und Verzeichnisse zu berechnen. Typischerweise bleibt dieser Befehl lange hängen, wenn er versucht, die Größe eines Verzeichnisses zu berechnen (wenn dieses Verzeichnis eine große Anzahl von Dateien enthält). Wenn Sie z.B. die Ausgabe
du_sh_output.sh
# du -sh *
17M     bin
157M    boot
0       dev
7.7M    etc

sehen und dann mehr als 30 Sekunden nichts passiert, suchen Sie den nächsten Eintrag nach dem letzten Eintrag in der Liste (etc in diesem Beispiel) in der Ausgabe von ls -1 oben. In diesem Beispiel wäre das /home. Da du -sh so lange brauchte, um die Größe von /home zu berechnen, ist es sehr wahrscheinlich (aber nicht garantiert), dass /home das Verzeichnis ist, das so viel Platz verbraucht. Prüfen Sie auch die Zahl 3. Führen Sie in dem Verzeichnis, das Sie als Kandidat für das größte Verzeichnis identifiziert haben, ls -1 <Verzeichnis> erneut aus und prüfen Sie

Beachten Sie, dass diese Methode manchmal dazu neigt, Verzeichnisse zu identifizieren, die rekursiv viele Dateien enthalten, im Gegensatz zu Verzeichnissen, deren Gesamtgröße groß ist. Daher müssen Sie möglicherweise zurückgehen, falls Sie keine Verzeichnisse identifizieren können, die einen großen Teil Ihres Festplattenplatzes verbrauchen.


Check out similar posts by category: Linux