所以,我一直在寻找这个问题的答案,但什么也没找到。有一天,我的根文件系统上神奇地用完了空间。0 字节可用。我删除了一些旧的虚拟机,以便给我空间,这样系统才能真正运行。我运行了磁盘使用情况分析器、k4DirStat 和 df / du。全部作为 SU,但计算结果不合理。它也不是 Ext4 的 5%。
该驱动器是三星 EVO 840。Ext4。Ubuntu 16.04 LTS。
du
以下是和的结果df
:
XXX@YYY:/$ sudo du -chsx /
103G /
103G total
XXX@YYY:/$ sudo df /
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sdf1 231977984 201086936 19084124 92% /
所以: 231G-103G=19G?
很困惑,谢谢你的帮助。
解决方案: @steeldriver 的想法很正确。我连接了两个外部驱动器用于备份 cron 作业。我卸载了它们。断开了它们的连接。Viola,挂载点中仍然有文件。我猜其中一个在某个时候被卸载了,备份作业填满了根文件系统。我想我需要更改脚本以在同步之前检查外部驱动器是否存在。
感谢您的快速回复 - 这个社区太棒了。
答案1
Linux 不会从文件系统中删除仍由应用程序打开的文件。在您的情况下,这可能是一些大型 VM 映像。
例子:
创建一个大文件检查磁盘使用情况。还可用于sync
避免缓存效果:
$ sudo sync; df -h /dev/sda1
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 886G 278G 564G 33% /
$ dd if=/dev/zero of=large count=1024 bs=10M
$ df -h /dev/sda1
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 886G 288G 554G 35% /
现在打开文件其他外壳例如tail
和保持开放:
$ tail -f large
回到第一个shell并删除文件并检查文件系统大小:
$ rm large
$ sudo sync; df -h /dev/sda1
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 886G 288G 554G 35% /
$ lsof /dev/sda1 | grep large
tail 15255 username 3r REG 8,1 10737418240 5520283 /some/path/large (deleted)
lsof
显示文件已被删除,但仍被某些进程使用。现在返回 tail shell 并使用 Ctrl-C 终止它:
$ tail -f large
^C
$ sudo sync; df -h /dev/sda1
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 886G 278G 564G 33% /
恢复正常。因此,您需要找到打开的文件并终止持有文件句柄的进程。