Linux
linux中的df在文件刪除後沒有顯示正確的可用空間
我有用於儲存文件的文件伺服器。文件可能會在那裡存放一周或一年。不幸的是,當我從伺服器中刪除文件時,
df
命令不會反映釋放的空間。所以最終,伺服器被填滿(df
顯示 99%),我的腳本不再在那裡發送任何文件,除了那裡可能有幾十 GB 的可用空間。
noatime
如果這有什麼不同,我會在已安裝的分區上得到標誌。
刪除文件名實際上並沒有刪除文件。其他一些程序使文件保持打開狀態,導致它不能被刪除;重新啟動或終止該程序以釋放文件。
採用
lsof +L1
找出哪個程序正在使用已刪除(未連結)的文件。
正如 Ignacio 提到的,刪除文件不會釋放空間,直到您刪除對該文件具有打開句柄的程序。
不過,您可以在不終止程序的情況下回收空間。您需要做的就是刪除文件描述符。
首先執行 lsof | grep 刪除以辨識持有文件的程序
[hudson@opsynxvm0055 log]$ /usr/sbin/lsof |grep deleted java 8859 hudson 1w REG 253,0 3662503356 7578206 /crucible/data/current/var/log/fisheye.out (deleted)
然後執行:
cd /proc/PID/fd
然後
[hudson@opsynxvm0055 fd]$ ls -l |grep deleted total 0 l-wx------ 1 hudson devel 64 Feb 7 11:48 1 -> /crucible/data/current/var/log/fisheye.out (deleted)
“1”將是文件描述符。現在鍵入“> FD”以回收該空間
> 1
如果有其他程序持有該文件,您可能需要重複該操作。