df 报告错误的文件系统可用空间 (ext4)

Tom*_*ime 6 ubuntu ext4 lvm df

我正面临 .s 报告的 fs 空间错误的问题df

我们谈论的是裸机 Ubuntu 14.04 服务器,/分区由 LVM 管理。

报告df的大小与 fs 超级块报告的大小不同。还从du -skh(在与/分区相关的目录上)计算大小证明df显示的结果不正确。

这是报道的内容df

Filesystem                  Size  Used Avail Use% Mounted on
/dev/mapper/rootvg-lv_root   20G   16G  2.8G  86% /
Run Code Online (Sandbox Code Playgroud)

这是超级块报告的内容(3616906*4096/1024**2=14128 MB free)

Last mounted on:          /
Filesystem magic number:  0xEF53
Filesystem state:         clean
Filesystem OS type:       Linux
Inode count:              1290240
Block count:              5242880 << exactly 20 GB
Reserved block count:     227170
Free blocks:              3616906 << around 14 GB free
Free inodes:              1201391
First block:              0
Block size:               4096
Fragment size:            4096
Run Code Online (Sandbox Code Playgroud)

我做了一个 strace fordf并发现它使用statfs系统调用来获取有关特定 fs 的信息(962132*4096/1024**2=3758 MB free)

statfs("/", {f_type="EXT2_SUPER_MAGIC", f_bsize=4096, f_blocks=5129119, f_bfree=**962132**, f_bavail=730866, f_files=1290240, f_ffree=1091851, f_fsid={-456623966, 1549023591}, f_namelen=255, f_frsize=4096}) = 0
Run Code Online (Sandbox Code Playgroud)

可能是statfs它获取 fs 信息的方式或方式的问题。

为了解决它,我尝试重新挂载/分区 ( mount / -orw,remount),但没有帮助。

我的问题 - 如何在df不重新启动或干扰此服务器正常运行的情况下修复信息?

聚苯乙烯

  • 没有通过过程FD上保持(lsof +L1 | grep deleted
  • 我知道 883 MB 是为 UID 0 的用户保留的
  • 这不是挂载点屏蔽问题(在挂载点目录中挂载 fs '隐藏' 文件时)

Tom*_*ime 1

为了那些遇到同样问题的人:

我通过发布解决了这个问题unmount /dev/mapper/rootvg-lv_root。它给了我一个错误,但df报告正确后。

看起来umount刷新了一些内部结构。

希望它可以帮助某人。