du/df 和 ls 报告不同的磁盘使用情况

du/df 和 ls 报告不同的磁盘使用情况

上周末,我的一位同事注意到我们的一台共享计算服务器上出现了奇怪的情况。

我们有一个目录,ls -l显示包含一个大小为 132G 的文件。

但运行df -h显示磁盘已使用空间总量为128G。此外,du -h --max-depth=1在驱动器根目录上运行还会报告 128G.

最初我想知道这个问题是否可能是由于打开的文件句柄或类似的原因导致这些二进制文件报告不同的信息。但是,我已经厌倦了卸载和重新安装磁盘,并且所有二进制文件都报告与以前相同的结果。

提供有关驱动器配置的更多信息:

  • 该卷使用 LUKS 加密之上的 EXT4 进行格式化。
  • 磁盘不通过 NFS 或类似方式共享。
  • 我已经检查了有问题的文件,它似乎没有链接。
  • 卸载并重新安装该卷时,我通过在该卷上运行来强制执行磁盘检查fsck -f,并且没有返回任何问题。
  • 磁盘所在的服务器不是虚拟化主机,并且运行 Ubuntu 14.04 作为操作系统。

答案1

你的服务器是虚拟化主机吗?

不同的实际文件和磁盘空间大小是动态扩展虚拟磁盘的正常行为。该磁盘具有不同的实际文件大小和头文件大小数据

例子

您可能使用 qemu 虚拟磁盘(qcow2 扩展名或其他),您可以通过以下方式找到它:

find / -regex '.*\.qcow.*$'

/var/lib/vz/images/105/vm-105-disk-1.qcow2
...

让我们检查vm-105-disk-1.qcow2尺寸stat

stat vm-105-disk-1.qcow2

  File: vm-100-disk-1.qcow2
  Size: 68745560064

79728541696 - 大约 64GB

检查wc

wc -c <vm-105-disk-1.qcow2

68745560064

相同的结果...检查du

du -sh vm-105-disk-1.qcow2

15G        vm-105-disk-1.qcow2

仅15GB!让我们用 util 检查一下qemu-img

qemu-img info vm-105-disk-1.qcow2

image: vm-105-disk-1.qcow2
file format: qcow2
virtual size: 64G (68719476736 bytes)
disk size: 14G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false
    refcount bits: 16
    corrupt: false

注意这两行,一切都应该清楚了:

virtual size: 64G (68719476736 bytes)
disk size: 14G

如果您的服务器不是虚拟化主机,请参阅以下主题:

相关内容