操作系统是Debian。输出df -h /
:
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 99G 97G 0 100% /
lsof
显示/var/log/syslog
文件句柄已打开,但与/var/log/syslog.7.gz
.
所以我删除了它/var/log/syslog.7.gz
以尝试释放几十兆的磁盘空间。
再次输出df -h /
:
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 99G 97G 0 100% /
对 /var/log 中的一些文件尝试了此操作。首先我检查以确保文件句柄没有用 lsof 打开,然后我尝试删除它,立即检查 df,avail 仍然为零。使用一堆不同大小的不同文件来完成此操作。然而,当在没有 -h 的情况下执行 df 时,我可以看到“已用”空间下降,所以至少是这样。
这里究竟发生了什么?如何在不重新启动的情况下增加“可用”金额?
答案1
几个问题:
-h
如果数字是千兆字节,那么“几十兆字节”的节省不会显示在人类可读的输出中。- 您删除的但仍被其他进程打开的文件仍然存在;如果您尝试删除程序仍打开的日志文件,则可能会发生这种情况。
- 在大多数 Linux 文件系统上,都有一个“保留”空间,只有
root
用户(和大多数守护进程)才能填充。就算你解脱了一些空间,普通用户可能仍然无法写入该分区。您可以使用类似的方法tune2fs
来查看预留了多少。
答案2
df-h
在您的情况下,显示的数据以 Gb 为单位。删除几个 Mb 文件不会显示在这里。
正如您提到的,如果没有,-h
您确实会看到已用空间下降。所以你正在回收空间。只是还不够。
您需要查找可能已被删除但仍在使用的大文件(lsof | grep deleted
可以在此处提供帮助)并重新启动进程以打开大文件。
您还需要查找大文件能被删除;例如,find / -xdev -size +500M -ls
将找到根分区上大小超过 500Mb 的所有文件。在 100Gb 文件系统上,这可能需要一些时间,但这是查找大型浪费文件的好方法!
你可以尝试一些捷径;例如,只搜索/tmp
and/var
在 中看到很多东西并不罕见/var
,特别是用 and 下载的包apt
,因此可以删除,所以du -hs /var/* | sort -h
有时很有用。