空のカタログを作成すると、独自のサイズになることがわかっています。
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
コマンドにキャッシュがありますか? または、多数のファイルを処理した後、これらのファイルの後に残りがありますか? unlink
perl5 スクリプトでファイルを削除しました。
更新 - コメントからの質問への回答
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
ソース: