如果我的磁盘空间不是稀疏、删除或被挂载点隐藏的话,它会在哪里

如果我的磁盘空间不是稀疏、删除或被挂载点隐藏的话,它会在哪里

我似乎在 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来判断。2chroot
  • 文件系统已损坏。
  • 该空间正由其中一位使用特殊索引节点。您可以使用debugfs并发出一些stat <3>, stat <4>... 来验证。
  • 该空间正被已删除的文件使用,该已删除的文件由另一个 pid 命名空间中的进程打开(并且您不在根 pid 命名空间中)。
  • 该空间正在被已删除的文件使用,该已删除的文件未被任何文件打开,但例如连接到循环设备(losetup -a以进行检查)。

请注意,稀疏文件没有理由导致du和之间的差异df

答案2

文件系统可能会花费磁盘空间用于多种与文件内容无关的事情。

df直接从文件系统获取已用和可用块的数量,而du只是将分配给每个文件的块的大小相加,因此不考虑任何不相关的 FS 数据结构。

du显示的已用空间比实际少是完全可以的df。奇怪的是,差异如此之大,尤其是对于很少修改的根分区。你有调整过你的FS吗?您是否也尝试过du --inodes与 进行比较df -i

相关内容