`du` は空のカタログのゼロ以外のサイズを表示します

`du` は空のカタログのゼロ以外のサイズを表示します

空のカタログを作成すると、独自のサイズになることがわかっています。

mkdir test && du -h test

与える:

4,0K    test

しかし、このケースは別です。外付けHDD(ext4)に1e6ファイル(74 GB)のカタログがありました。これらのファイルを処理し、別のカタログに保存し、並列スクリプトでこの場所から削除しました。これでこのカタログは空になるはずです。

ls -a raw/all

印刷

.  ..

しかし

du -h raw/all

与える

19M     raw/all

正確に-hは 19288B になります。これも奇妙な結果です。

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 .. 

何が起こっているのでしょうか?duコマンドにキャッシュがありますか? または、多数のファイルを処理した後、これらのファイルの後に残りがありますか? unlinkperl5 スクリプトでファイルを削除しました。

更新 - コメントからの質問への回答

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

lsof +L1 

44 行を出力しますが、このカタログに関連するものは何もありません。ただし、lsofのような数字が表示されます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

ラップトップが再起動されました。外付けドライブは取り外されました。しかし、duまだ表示されます19M

答え1

ext4 ファイルシステムのディレクトリは大きくなりますが、小さくなりません。そのため、ある時点でディレクトリ内のファイルの詳細を保存するために 19M を占有する必要があった場合、それらのファイルが削除されたとしても、その容量が保持されます。空になったディレクトリを縮小したい場合は、ディレクトリを削除して再作成します。

rmdir foo && mkdir foo

または、権限を保持します:

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

ソース:

関連情報