`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命令中有快取嗎?或者在處理了這麼多文件之後,這些文件之後還有剩餘嗎?我unlink在perl5腳本中刪除了filed by。

更新 - 回答評論中的問題

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

來源:

相關內容