Linux下解决删除了文件但磁盘空闲空间没增长的问题
--发布于 2024-04-10 12:19:22
有时,我们在Linux平台下,明明删除了一些文件(比如非常大的日志文件,程序的输出文件等),但是磁盘的空闲空间还是这么小。出现这种情况,大概率是因为还有运行的进程在持有这个已被删除的文件的句柄。这样,这个文件虽然在文件系统的目录中是不可见的,但它在磁盘分区的超级块中还是存在的,也就是说没有被真正的删除。有些磁盘统计分析工具,比如df
命令,还是会将这个文件统计进去的。这样我看到的结果就是,磁盘空间还没被释放!
如何找出这些未被真正删除的文件
我们可以使用lsof
命令来查询这种文件,这种文件被系统标记为deleted
状态(也就是被删除的状态)。如果系统中有大量deleted
状态的文件,就会造成df
工具统计的信息与我们的认知不一致。
lsof | grep deleted > output.txt
在output.txt文件中,就会输出类似于这种信息
simpletun 15704 root 1w REG 253,1 13202533434 1054815 /root/simpletun-crypt/nohup.out (deleted)
simpletun 15704 root 2w REG 253,1 13202533434 1054815 /root/simpletun-crypt/nohup.out (deleted)
如上所示,/root/simpletun-crypt/nohup.out
这个文件就是删除了,但没被真正释放掉。其中,13202533434
就是占用的空间大小(字节)。第二列那个15704
就是持有那个文件句柄的进程ID。
如何真正释放这些空间
因为造成这种原因的现象是,持有这个文件句柄的进程还在进行。我们就只能重启对应的进程,如上述例子中进程ID为15704
的进程
kill 15704
关掉这个进程后,对应文件的磁盘空间就会释放出来。
更好的解决方案
既然是因为正在运行的进程最好不要删除它打开的输出文件,不然有可能会造成磁盘空间不能真正释放的问题。那我们就将那个文件(以my_file为例)写为空就可以了,命令
cat /dev/null > my_file
或更简短的
>my_file
这样就可以清空对应的文件了。
--更新于 2024-04-10 12:23:31