如何回收“已删除”但仍在 Linux 上使用的文件的存储空间?

4 linux files deleted-files

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 # 
Run Code Online (Sandbox Code Playgroud)

文件在仍在使用时被删除。所以它们仍然占用空间。但是我们不想重新启动“badprocess*”。操作系统是 SLES9,但我们“一般地”问这个。

问题:我们如何删除这些已删除的文件而不重新启动保存它们的进程,从而释放空间?

wur*_*tel 7

您可以使用 in 中的条目/proc来截断此类文件。

# ls -l /proc/4315/fd
Run Code Online (Sandbox Code Playgroud)

这将显示进程 4315 打开的所有文件。您已经使用lsof并表明已删除的文件是文件描述符 135,因此您可以按如下方式释放该已删除文件使用的空间:

# > /proc/4315/fd/135
Run Code Online (Sandbox Code Playgroud)

进程 44654 打开的另一个已删除文件也是如此,文件描述符为 133,因此:

# > /proc/44654/fd/133
Run Code Online (Sandbox Code Playgroud)

您现在应该看到空间已释放。

您还可以使用它来复制已删除但仍由进程打开的文件的内容,只需cp /proc/XXX/fd/YY /some/other/place/filename.