df 和 du 命令显示不一致?

常见原因

1、有程序打开了文件,此文件被删除,但是程序没关闭,此文件所占用空间未释放。通过lsof命令可确认此情况

1
lsof  | grep -i delete

2、挂载点下有子目录被再次挂在到别处,这种情况下会隐藏原目录内容。

  • 什么是有嵌套挂载?

系统盘目录是挂在到根目录/的,但是数据盘是挂在到根目录下的/data目录,这时就是嵌套挂载。

  • 举例说明

例如/data目录原来有5G数据,但是此时将 数据盘vdb挂在到/data目录,此时du统计不到原/data目录的5G数据。

这时我们想要在不卸载数据盘的情况下确认根目录下的data目录原本是否有数据,则需要bind挂载它的上层目录/:

1
mkdir -p /new; mount -o bind / /new ; du -sh /new ; umount /new

3、对于共享文件系统,可能会被其他服务器挂载了,请检查另外的服务器是否存在以上1和2 的场景

4、xfs文件系统异常

如果是xfs文件系统,已排除上诉3种情况,重启机器后,空间还未释放,可以检测下/var/log/messages日志文件是否有文件系统相关报错,在确保数据已备份的情况下,使用 xfs_repair 命令修复。


df 和 du 命令显示不一致?
https://92cloud.cn/posts/2312.html
作者
Guoxh
发布于
2021年12月11日
许可协议