
我有一個奇怪的差異。使用“df”我看到我的根磁碟使用了幾乎 229G。
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/dm-2 241G 229G 13G 96% /
但「du」告訴我,我只使用了大約 12GB(向上捨入)。
# du -sh /* | grep G
3.2G /run
2.1G /usr
6.0G /var
這兩個指令均以 root 身分執行。我可以想像的是,現在掛載 NFS 共享的目錄中存在「隱藏」資料。如果是這樣的話。我怎麼能找出「隱藏」的文件。或者您對為什麼這些數字如此完全不同有其他想法嗎?
答案1
您可能有一個打開該文件的應用程式/進程。當您刪除由應用程式保持開啟的檔案時,作業系統仍會在 df 中看到檔案大小,因為該檔案仍在記憶體中開啟。
這是我為同事編寫的一些文檔,應該可以滿足您的需求。
截斷大的開啟文件
您已刪除檔案以釋放空間,但之後空間未釋放。現在 df -lah 和 du -lah 顯示不同的大小
使用 LSOF 取得已刪除但保留的文件
lsof |grep deleted
這將顯示所有已刪除但由應用程式保持開啟的檔案。
java 2943 gateway 410w REG 253,3 50482102 139274 /opt/span/app/node/default/var/attachments/att180368_0.part (deleted)
java 2943 gateway 411w REG 253,3 46217973 139284 /opt/span/app/node/default/var/attachments/att182230_0.part (deleted)
java 2943 gateway 412w REG 253,3 50483894 139280 /opt/span/app/node/default/var/attachments/att181920_0.part (deleted)
您可以重新啟動應用程式以解鎖檔案或截斷檔案。
要截斷文件,您必須查看上面的輸出以取得 PID 和 fd(文件描述符編號)。
截斷文件
echo > /proc/PID/fd/fd_number
範例:要將上面列出的三個檔案大小歸零,您將發出以下命令
echo > /proc/2943/fd/410
echo > /proc/2943/fd/411
echo > /proc/2943/fd/412
如果你有很多可以截斷 bash 來救援。
for n in {410..412}; do 'echo > /proc/2943/fd/$n'; done;
df -lah 現在應該顯示可用空間,但檔案將在 lsof |grep 下顯示已刪除,但大小為 1
java 2943 gateway 410w REG 253,3 1 139274 /opt/span/app/node/default/var/attachments/att180368_0.part (deleted)
java 2943 gateway 411w REG 253,3 1 139284 /opt/span/app/node/default/var/attachments/att182230_0.part (deleted)
java 2943 gateway 412w REG 253,3 1 139280 /opt/span/app/node/default/var/attachments/att181920_0.part (deleted)
檔案描述符將在下次重新啟動或重新啟動/重新載入開啟檔案的應用程式時釋放。
當然,您必須調整命令以匹配鎖定檔案的輸出。
答案2
就我而言(你在私訊中也告訴我同樣的事情幫助了我)這是一個過度安裝的問題。我在分區上的目錄中有一些數據,但du
看不到,因為掛載隱藏了它們。
所以嘗試卸載所有掛載並在其餘目錄中尋找數據。
祝您玩得愉快,謝謝!