因为我显然在这里遗漏了一些东西:
$ cp -a CENTOS-chroot 1
$ cp -a CENTOS-chroot 2
$ cp -a CENTOS-chroot 3
$ cp -a CENTOS-chroot 4
$ du --block-size=1 -s 1 2 3 4
6320304128 1
6320304128 2
6320234496 3
6320238592 4
这发生在我拥有的两台 Linux 机器(Manjaro 和 Centos7)上带有 ext4 的 HDD 和 NVME SSD 上。
ext4 文件系统的块和扩展区布局取决于文件系统的填充率和碎片。
这意味着,与空文件系统相比,具有更多文件的文件系统可能会为其他文件占用(略微)不同的空间。在您的情况下,第 4 个副本将比第 1 个副本占用更多空间。
不要忘记
du
在原始底层文件系统级别报告磁盘使用情况,而不是在明显的“文件大小”级别......请参阅--apparent-size
。另请参阅
-b
,这可能是给予--block-size=1
和--apparent-size
一起更好的选择:...那么,会
du -bs ${dir}
产生更好的结果吗?鉴于大多数/所有文件系统都基于固定大小的块,很常见的是明显的“文件大小”(即您可以从文件中读取的字节数)与磁盘上使用的实际空间不同(即:存储此文件及其元数据所消耗的字节数)。
例如:
这完全取决于文件在磁盘上的放置顺序,以及用于寻找连续空闲空间块的算法。
您可以拥有一个非常节省空间的文件系统,它可以连续且仔细地重新排列所有文件,使它们像玩得好的俄罗斯方块板一样完美地镶嵌。文件系统最终会花费大量时间来寻找合适的空间,并且性能会受到严重影响。
同样,您可以拥有一个非常面向碎片的文件系统,它只使用第一个未使用的块,并跳过使用的块。在第一间隙写入数据也会影响你的表现。
相反,我们更喜欢平衡事物,花一些时间(但不要太多)来寻找一个连续的未使用空间块,其中将包含我们正在尝试写入的全部数据。
文件的碎片级别与复制命令的发布顺序没有直接关系——部分原因是上面概述的“尝试,但不太难”的方法。
综上所述,这两个目录中存储的数据应该是相同的,但磁盘使用情况(即使是相同的数据)不太可能完美匹配。
有许多选项可以验证存储的数据是否相同 - 尝试
diff
(没有输出是好的,它会报告更改):更复杂的是,稀疏文件的使用可能比预期的要少得多: