为什么不同的 du 版本报告的文件大小不同?

为什么不同的 du 版本报告的文件大小不同?

在我们的组织中,我们有一个 Windows 文件服务器,我用它来存储大量文件。此文件服务器使用 smbmount 安装在 2 个集群上。

集群 A 运行 CentOS 4.8,du 版本 5.2.1。集群 B 运行 Ubuntu 8.04.4,du 版本 6.10。

当我在 Cluster A 上运行 du cmd 时,对于特定文件夹,我得到

user@ClusterA:~/particular_dir$ du -h
....
637G  .

但是,当我在 Cluster B 上运行 du 命令时,对于同一个文件夹,我得到了

user@ClusterB:~/particular_dir$ du -h
....
1.1T  .

为什么差别这么大?虽然操作系统和 du 版本不同,但文件大小肯定是文件大小。

答案1

如果您尝试 会怎么样ls -1s?它会以块为单位打印文件大小。或者如果您尝试ls -1ak(报告块大小为 1k 的结果)或只是简单的ls -lah,服务器之间的结果是否看起来相同?

我怀疑 Samba 决定在不同版本中使用不同的块大小,因此 du 报告可能会通过网络共享收到错误报告。代表磁盘使用情况, 不是文件使用情况:-) 一般来说,如果您周围有大量的文件,那么文件系统和文件系统块大小之类的东西就很重要。

答案2

一方面,这样的报告确实看起来令人困惑。这是因为具体文件系统定义的块大小(512、1k、4k 等)不同,也是因为元数据中描述的文件数量不同(文件系统通常将其保存在同一设备上,因此增加了磁盘使用率)。

另一方面,找出有用(实际)数据大小以及它与磁盘空间使用情况= 有用数据大小 + 元数据大小 + 碎片(文件空间使用情况)。

报告磁盘使用情况而不是实际大小:

# du -sh Data/
2.0T    Data/

现在报告有用的文件大小:

# du -sb Data/
1650071895576   Data/

也就是 1.5Tb,这意味着 0.5 Tb 用于元数据(元块,例如 inode)和块中的尾部碎片,这些碎片在文件末尾分配但不使用(对于大小不能被块大小整除的所有文件都是如此)。如果文件大小为 2M,块大小为 4096,平均碎片约为 ~512b,则可以解释 0.5 - 1Tb 的磁盘空间“损失”。因此,连续数据可以节省空间。

另请参阅

-b, --bytes 相当于 `--apparent-size --block-size=1'

相关内容