wes*_*wes 7 linux hard-drive disk-space-utilization
# df -h /
Filesystem Size Used Avail Use% Mounted on
rootfs 9.9G 7.2G 2.2G 77% /
# du -hx --max-depth=0 /
3.2G /
Run Code Online (Sandbox Code Playgroud)
如您所见,df说使用了 7.2GB,但du只能找到 3.2GB。自从我注意到这一点以来,服务器已重新启动,因此它不是已删除的文件。此外,lsof没有向我展示任何有趣的东西。还能是什么?
Joh*_*n P 13
我在 ext4 系统上遇到了完全相同的问题,只是想发布我的解决方案以供将来参考。当我的驱动器最初填满时,我从 /var/log 中删除了一堆日志。这清除了几个 GB,但几天后我又用完了空间,并且 du -h 和“mount --bind / /mnt”没有指出罪魁祸首。最终得到的是当我运行 lsof 时。
lsof ... rsyslogd 1766 root 2w REG 9,1 12672375940 264014 /var/log/messages(已删除) ...
当我删除了消息日志文件时,rsyslog 服务仍将其保持打开状态,但处于隐藏状态。运行“touch /var/log/messages;service rsyslog restart”解决了问题,我的磁盘空间被回收。
lsof 的输出可能有点让人不知所措,特别是如果您的系统很忙(我的系统超过 1000 行)。如果您在 lsof 输出中搜索“已删除”,它应该有助于查明问题过程。
确保挂载点“后面”的所有文件夹都是空的。根据经验,我想说很可能你在挂载点后面隐藏了一些数据。
您可以检查挂载点后面的文件夹中的内容,而无需卸载磁盘/分区(例如,如果您必须卸载 /usr,这可能会很好)。做一个
# mount --bind / /mnt
# du -shx /mnt
Run Code Online (Sandbox Code Playgroud)
也作为旁注:
# du -shx /
Run Code Online (Sandbox Code Playgroud)
和你的 du 一样......但要短一些(-s 代表总结)
可能存在几个问题:(1) 进程打开了一个大文件或打开了多个已被删除的文件,或者 (2) 您可能遇到了某种类型的文件系统问题,可以通过驱动器的 fsck 来修复。但是,这只能在未安装驱动器时完成。一些 Linux 提供了在启动时对根文件进行 FULL fsck 的方法:
touch /forcefsck
Run Code Online (Sandbox Code Playgroud)
然后重新启动。我知道 SuSE 和 RedHat 变体中存在这种情况。