在我们的组织中,我们有一个 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'