Linux

如何回收“已刪除”但仍在 Linux 上使用的文件的儲存?

  • February 8, 2021
SERVER:~ # df -mP /home/
Filesystem         1048576-blocks      Used Available Capacity Mounted on
/dev/mapper/rootvg-home_lv       496       491         0     100% /home
SERVER:~ # 
SERVER:/home # lsof | grep -i deleted | grep -i "home" | grep home
badprocess   4315     root  135u   REG      253,2   133525523      61982 /home/username/tr5J6fRJ (deleted)
badprocess2  44654     root  133u   REG      253,2   144352676      61983 /home/username/rr2sxv4L (deleted)
...
SERVER:/home # 

文件仍在使用時被刪除。所以他們仍然會消耗空間。但是我們不想重新啟動“badprocess*”。作業系統是 SLES9,但我們“一般”地問這個問題。

**問題:**我們如何在不重新啟動保存它們的程序的情況下刪除這些已刪除的文件,從而釋放空間?

您可以使用 中的條目/proc截斷此類文件。

# ls -l /proc/4315/fd

這將顯示由程序 4315 打開的所有文件。您已經使用過lsof,這表明已刪除的文件是文件描述符 135,因此您可以釋放該已刪除文件使用的空間,如下所示:

# > /proc/4315/fd/135

程序 44654 打開的另一個已刪除文件也是如此,它的文件描述符為 133,因此:

# > /proc/44654/fd/133

您現在應該看到空間已釋放。

您還可以使用它來複製已被刪除但仍由程序保持打開的文件的內容,只需cp /proc/XXX/fd/YY /some/other/place/filename.

引用自:https://unix.stackexchange.com/questions/180601