
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 du
nicht 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!