我知道,當我創建空目錄時,它有自己的大小:
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
來源: