Linux

linux中的df在文件刪除後沒有顯示正確的可用空間

  • November 6, 2021

我有用於儲存文件的文件伺服器。文件可能會在那裡存放一周或一年。不幸的是,當我從伺服器中刪除文件時,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

如果有其他程序持有該文件,您可能需要重複該操作。

引用自:https://serverfault.com/questions/232525