什么会导致两棵相同的树上存在 3 GB 的差异?

什么会导致两棵相同的树上存在 3 GB 的差异?

我刚刚将目录树复制到另一个带有cp -a.这棵树大约有 70GB 大,有数百万个文件,而 diff 需要很长时间才能完成,所以我正在寻找其他方法来比较目录。

首先,我在两个目录上启动 find,结果是相同的。

在我启动 du -h 后,一个目录给出了 72GB,另一个目录给出了 75GB。假设复制过程顺利的话,什么会导致这种差异?磁盘块大小相同,4096。一个分区是EXT3,另一个分区是EXT4,可能是这样吗?

答案1

  1. 是的,它们将具有不同的磁盘使用情况,具体取决于 EXT4 的调整方式,它可能具有 256 或 128 字节 inode,目录的分配可能不同,并且小文件可能占用不同的空间量。不过 3GB 听起来确实很多。

  2. 我个人首选的比较文件系统的方法是:

    ( cd /src/dir; find . -type f -print0 | xargs =0 cksum ) | sort >/tmp/src.cksum
    ( cd /dst/dir; find . -type f -print0 | xargs -0 cksum ) | sort >/tmp/dst.cksum
    cksum /tmp/*.cksum
    

如果两个文件层次结构的文件名和校验和的校验和相同,我感到很有信心。比这更快,diff因为没有比较,只是对所有内容进行直接哈希处理。

ssh上述方法的优点是它也可以通过不同的机器轻松完成。

答案2

大概cp -a做了一些复制文件时的魔法——或者未能执行该魔法;你没说原件和复制品哪个大?

这就是联机帮助页所说的cp

默认情况下,通过粗略启发式检测稀疏源文件,并且相应的目标文件也变得稀疏。这是 --sparse=auto 选择的行为。

du -S要比较目录并获取哪些文件实际上具有不同的大小,您可以尝试比较两者的输出:

diff <(cd orig; du -S . | sort -n) <(cd copy; du -S . | sort -n)

相关内容