Diskrepanz zwischen „du“ und „df“

Diskrepanz zwischen „du“ und „df“

Ich habe eine merkwürdige Diskrepanz. Mit „df“ sehe ich, dass meine Root-Disk fast 229 G verwendet.

# df -h
Filesystem                  Size  Used Avail Use% Mounted on
/dev/dm-2                   241G  229G   13G  96% /

aber „du“ sagt mir, dass ich nur ca. 12GB (aufgerundet) im Einsatz habe.

# du -sh /* | grep G
3.2G    /run
2.1G    /usr
6.0G    /var

Beide Befehle wurden als Root ausgeführt. Ich könnte mir vorstellen, dass sich in einem Verzeichnis, in dem jetzt eine NFS-Freigabe gemountet ist, „versteckte“ Daten befinden. Wenn das der Fall ist. Wie kann ich herausfinden, welche Dateien dort „versteckt“ sind? Oder haben Sie andere Ideen, warum diese Zahlen so völlig unterschiedlich sind?

Antwort1

Sie haben wahrscheinlich eine App/einen Prozess, der diese Datei geöffnet hat. Wenn Sie eine Datei löschen, die von einer App geöffnet gehalten wird, sieht das Betriebssystem die Dateigröße immer noch in df, da die Datei im Speicher noch geöffnet ist.

Hier ist eine Dokumentation, die ich für einen Kollegen geschrieben habe und die Ihnen das liefern sollte, was Sie brauchen.

Große offene Dateien kürzen

Sie haben Dateien gelöscht, um Speicherplatz freizugeben, aber danach ist der Speicherplatz nicht mehr frei. Jetzt zeigen df -lah und du -lah unterschiedliche Größen an

Verwenden Sie LSOF, um gelöschte, aber zurückgehaltene Dateien abzurufen

lsof |grep deleted

Dadurch werden alle gelöschten, aber von einer App geöffneten Dateien angezeigt.

java       2943  gateway  410w      REG              253,3  50482102     139274 /opt/span/app/node/default/var/attachments/att180368_0.part (deleted)
java       2943  gateway  411w      REG              253,3  46217973     139284 /opt/span/app/node/default/var/attachments/att182230_0.part (deleted)
java       2943  gateway  412w      REG              253,3  50483894     139280 /opt/span/app/node/default/var/attachments/att181920_0.part (deleted)

Sie können die App entweder neu starten, um die Dateien zu entsperren, oder die Dateien kürzen.

Um die Dateien zu kürzen, müssen Sie sich die Ausgabe oben ansehen, um die PID und fd (Dateideskriptornummer) zu erhalten.

kürzen Sie die Datei mit

echo > /proc/PID/fd/fd_number

Beispiel: Um die Dateigröße der drei oben aufgeführten Dateien auf Null zu setzen, geben Sie Folgendes ein

echo > /proc/2943/fd/410 
echo > /proc/2943/fd/411
echo > /proc/2943/fd/412

wenn Sie viele zu kürzen haben, kommt Bash zur Rettung.

for n in {410..412}; do 'echo  > /proc/2943/fd/$n'; done;

df -lah sollte jetzt freien Speicherplatz anzeigen, ABER Dateien werden unter lsof |grep gelöscht angezeigt, haben aber die Größe 1

java       2943  gateway  410w      REG              253,3         1     139274 /opt/span/app/node/default/var/attachments/att180368_0.part (deleted)
java       2943  gateway  411w      REG              253,3         1     139284 /opt/span/app/node/default/var/attachments/att182230_0.part (deleted)
java       2943  gateway  412w      REG              253,3         1     139280 /opt/span/app/node/default/var/attachments/att181920_0.part (deleted)

Die Dateideskriptoren werden beim nächsten Neustart oder Neustart/Neuladen der App, die die Dateien geöffnet hat, freigegeben.

Natürlich müssen Sie Ihre Befehle anpassen, damit sie mit der Ausgabe Ihrer gesperrten Dateien übereinstimmen.

Antwort2

In meinem Fall (und Sie haben mir in einer PM geholfen, indem Sie mir dasselbe gesagt haben) war es ein Overmount-Problem. Ich hatte einige Daten in einem Verzeichnis auf der Partition, die ich dunicht sehen konnte, weil ein Mount sie versteckt hatte.

Versuchen Sie alsoalle Mounts umountenund suchen Sie in den verbleibenden Verzeichnissen nach Daten.

Viel Spaß und vielen Dank!

verwandte Informationen