`du` zeigt die Größe eines leeren Katalogs ungleich Null an

`du` zeigt die Größe eines leeren Katalogs ungleich Null an

Ich weiß, dass wenn ich einen leeren Katalog erstelle, dieser seine eigene Größe hat:

mkdir test && du -h test

gibt:

4,0K    test

Aber dieser Fall ist anders. Ich hatte einen Katalog mit 1e6 Dateien (74 GB) auf einer externen Festplatte (ext4). Ich habe diese Dateien verarbeitet, in einem anderen Katalog gespeichert und von diesem Speicherort in einem parallelisierten Skript gelöscht. Jetzt sollte dieser Katalog leer sein. Es ist also ok, dass

ls -a raw/all

drucken

.  ..

Aber

du -h raw/all

gibt

19M     raw/all

Ohne -hhaben wir genau 19288B. Und das ist auch ein seltsames Ergebnis:

ls -la raw/all

total 19292
drwxr-xr-x 2 daniel daniel 19746816 wrz 18 19:23 .
drwxrwxr-x 4 daniel daniel     4096 wrz 17 13:21 .. 

Was ist los? Gibt es im duBefehl einen Cache? Oder gibt es nach der Verarbeitung so vieler Dateien noch Reste nach diesen Dateien? Ich habe die Dateien unlinkim Perl5-Skript gelöscht.

Update - Antworten auf Fragen aus Kommentaren

ls -aiR raw/all
raw/all:
51647758 .  51647760 ..

lsof +L1 

druckt 44 Zeilen, aber nichts, was mit diesem Katalog zusammenhängt. lsofGibt aber etwas mit Zahlen wie aus 19746816.

lsof | grep raw
bash      5355                daniel  cwd       DIR               8,17  19746816   51647758 /media/daniel/f2971ccd-4841-4da3-8ce3-d9f2cc03fc27/daniel/pro/scraper/raw/all
lsof      5677                daniel  cwd       DIR               8,17  19746816   51647758 /media/daniel/f2971ccd-4841-4da3-8ce3-d9f2cc03fc27/daniel/pro/scraper/raw/all
grep      5678                daniel  cwd       DIR               8,17  19746816   51647758 /media/daniel/f2971ccd-4841-4da3-8ce3-d9f2cc03fc27/daniel/pro/scraper/raw/all
lsof      5679                daniel  cwd       DIR               8,17  19746816   51647758 /media/daniel/f2971ccd-4841-4da3-8ce3-d9f2cc03fc27/daniel/pro/scraper/raw/all

Laptop wurde neugestartet. Externes Laufwerk wurde getrennt. duZeigt aber immer noch an 19M.

Antwort1

Verzeichnisse in ext4-Dateisystemen wachsen, werden aber nicht kleiner. Wenn also irgendwann 19 MB für die Speicherung von Dateidetails benötigt wurden, bleibt dieser Speicherplatz erhalten, selbst wenn diese Dateien gelöscht werden. Wenn Sie ein jetzt leeres Verzeichnis verkleinern möchten, löschen Sie es und erstellen Sie es neu:

rmdir foo && mkdir foo

Oder Beibehaltung der Berechtigungen:

mkdir foo2
chown --reference=foo foo2
getfacl foo | setfacl --set-file=- foo2
rmdir foo
mv foo2 foo

Quelle:

verwandte Informationen