我似乎在 ext4 根文件系统中丢失了几 GB(如果有的话,在 Centos 7.1 上的 llvm 下,在 VMWare ESX 虚拟机中)。
[someone@somewhere ~]$ sudo du -xsm /
4561 /
然而:
[someone@somewhere ~]$ sudo df -m /
Filesystem 1M-blocks Used Available Use% Mounted on
/dev/mapper/vg_sys-lv_root 8944 7562 956 89% /
我想也许挂载点下有什么东西,所以我尝试了这个:
[someone@somewhere ~]$ sudo mount --bind / /vp
[someone@somewhere ~]$ sudo du -xsm /vp
4561 /vp
也许已删除的文件仍在被进程使用:
sudo lsof | grep deleted
没有显示出任何重要的东西。
使用以下命令作为 root 查找稀疏文件也不会(命令发现这里):
find / -type f ! -size 0 -exec perl -le 'for(@ARGV){open(A,"<",$_)or next;seek A,0,4;$p=tell A;seek A,0,2;print if$p!=tell A;close A}' {} +
那么,我的数据还能在哪里,在这种情况下 df 知道而 du 不知道的是什么?我还检查了 df -i ,只有不到一半的 inode 正在使用。
答案1
其他可能的解释:
- 您位于
chroot
或 mount 命名空间中,并且无权访问整个文件系统。如果您不在/mount 命名空间中,您可以通过运行ls -id /
which来判断。2
chroot
- 文件系统已损坏。
- 该空间正由其中一位使用特殊索引节点。您可以使用
debugfs
并发出一些stat <3>
,stat <4>
... 来验证。 - 该空间正被已删除的文件使用,该已删除的文件由另一个 pid 命名空间中的进程打开(并且您不在根 pid 命名空间中)。
- 该空间正在被已删除的文件使用,该已删除的文件未被任何文件打开,但例如连接到循环设备(
losetup -a
以进行检查)。
请注意,稀疏文件没有理由导致du
和之间的差异df
。
答案2
文件系统可能会花费磁盘空间用于多种与文件内容无关的事情。
df
直接从文件系统获取已用和可用块的数量,而du
只是将分配给每个文件的块的大小相加,因此不考虑任何不相关的 FS 数据结构。
du
显示的已用空间比实际少是完全可以的df
。奇怪的是,差异如此之大,尤其是对于很少修改的根分区。你有调整过你的FS吗?您是否也尝试过du --inodes
与 进行比较df -i
?