linux - 磁盘空间丢失

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 输出中搜索“已删除”,它应该有助于查明问题过程。


Der*_*rfK 6

由于您正在使用该-x选项,我假设您安装了其他文件系统?可能是您在一个非空目录的顶部安装了另一个分区。


Mar*_*l G 5

确保挂载点“后面”的所有文件夹都是空的。根据经验,我想说很可能你在挂载点后面隐藏了一些数据。

您可以检查挂载点后面的文件夹中的内容,而无需卸载磁盘/分区(例如,如果您必须卸载 /usr,这可能会很好)。做一个

# mount --bind / /mnt
# du -shx /mnt
Run Code Online (Sandbox Code Playgroud)

也作为旁注:

# du -shx /
Run Code Online (Sandbox Code Playgroud)

和你的 du 一样......但要短一些(-s 代表总结)


mdp*_*dpc 4

可能存在几个问题:(1) 进程打开了一个大文件或打开了多个已被删除的文件,或者 (2) 您可能遇到了某种类型的文件系统问题,可以通过驱动器的 fsck 来修复。但是,这只能在未安装驱动器时完成。一些 Linux 提供了在启动时对根文件进行 FULL fsck 的方法:

 touch /forcefsck
Run Code Online (Sandbox Code Playgroud)

然后重新启动。我知道 SuSE 和 RedHat 变体中存在这种情况。