Wie finde ich heraus, was den gesamten Speicherplatz auf meiner / Partition belegt?

9

Ich bin auf einer großen Instanz auf den EC2-Servern von Amazon. Ich führe den Befehl df aus und erhalte:

root@db:~# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             9.9G  9.1G  284M  98% /
tmpfs                 3.8G     0  3.8G   0% /lib/init/rw
varrun                3.8G  116K  3.8G   1% /var/run
varlock               3.8G     0  3.8G   0% /var/lock
udev                  3.8G   80K  3.8G   1% /dev
tmpfs                 3.8G     0  3.8G   0% /dev/shm
/dev/sdb              414G  957M  392G   1% /mnt
/dev/sdf               50G   12G   35G  26% /byp
/dev/sdk               99G   31G   63G  33% /backups

Ich führe dann den Befehl du aus und erhalte:

root@db:/# du -s -h /*
31G     /backups
5.5M    /bin
136K    /boot
12G     /byp
80K     /dev
5.8M    /etc
12K     /home
70M     /lib
11M     /lib32
0       /lib64
16K     /lost+found
759M    /mnt
4.0K    /opt
du: cannot access `/proc/6917/task/6917/fd/4': No such file or directory
du: cannot access `/proc/6917/fd/4': No such file or directory
0       /proc
31M     /root
7.7M    /sbin
4.0K    /selinux
4.0K    /srv
0       /sys
11M     /tmp
1.1G    /usr
114M    /var

Wenn Sie feststellen, dass Sie beim Addieren aller Größen in der Ausgabe des Befehls du von nicht gemounteten Verzeichnissen nicht annähernd 9,1 G erreichen, wie im Befehl df dargestellt.

Bedeutet das, dass ich eine fehlerhafte Festplatte habe? Wenn ja, wie kann ich das beheben?

sheats
quelle

Antworten:

20

Es ist durchaus möglich, dass Sie eine sehr große gelöschte Datei (oder viele kleine) haben, für die ein Prozess noch ein offenes Dateihandle hat. Der Weg, sie zu finden, ist zu rennen

# lsof | grep "deleted"

Wenn Sie viele Zeilen sehen, die mit "(gelöscht)" enden, können Sie die Prozess-ID finden, die sie geöffnet hat, und sie neu starten. In diesem Fall sollte Ihr Speicherplatz zurückkehren.

Wenn dies das Problem nicht behebt, würde ich ein fsck empfehlen.

David Pashley
quelle
1
Genial! Das war's. Ich hatte ein Postgresql-Protokoll, das immer noch angemeldet wurde.
Sheats
Wenn Sie Speicherplatz freigeben möchten, ohne einen Daemon neu zu starten, anstatt die Datei zu löschen, verwenden Sie stattdessen "echo> file". Dadurch wird die Datei abgeschnitten, aber da das Handle noch geöffnet ist, wird es zu einer Datei mit geringer Dichte. Dies bedeutet, dass es immer noch dieselbe Größe hat, aber viel weniger Speicherplatz beansprucht.
David Pashley
lsof +L1kann manchmal besser funktionieren als das grep ...
derobert
5

Es gibt eine Reihe von Gründen, warum du nicht gleich df ist. Siehe die Antworten auf diese Frage .

Einige sind Overlay-Mounts, viele kleine Dateien und eine größere Blockgröße sowie gelöschte Dateien, die noch verwendet werden. Überlagerungs-Mounts werden erstellt, wenn Sie ein Dateisystem auf einem Mount-Punkt gemountet haben, auf dem sich Dateien befinden, sodass Sie sie nicht sehen.

Der Hauptunterschied zwischen den beiden besteht darin, dass df nur den Superblock überprüft und ihm vertraut, wobei du alle Dateien scannt, die es sehen kann, und sie addiert. Informationen zum Superblock finden Sie unter diesem IBM Link .

Kyle Brandt
quelle
4

Verwenden Sie immer die Option -x mit du, wenn Sie solchen Problemen nachjagen. Es hält dich davon ab, Dateisysteme zu überqueren.

Zimmy-DUB-Zongy-Zong-DUBBY
quelle
Dies hätte keinen Unterschied gemacht, da das OP explizit nach / * gefragt hat und daher nach den anderen Partitionen gefragt hat. Es hätte geholfen, wenn etwas unter "/ mnt / backups" gemountet worden wäre
David Pashley