centos和ubuntu上大型rsynced文件的哈希值不同?

centos和ubuntu上大型rsynced文件的哈希值不同?

我将一个大文件从远程 centos 同步到本地 ubuntu

rsync -avzP user@<remote-ip>:/path/to/file .

据报道,转移进展顺利:

sent 30 bytes  received 257,293,476 bytes  1,296,188.95 bytes/sec
total size is 8,217,194,015  speedup is 31.94

据我所知,rsync 在传输完成后会自动通过哈希检查来验证传输是否顺利。

出于好奇,我在 centos 和 ubuntu 上计算了 md5 哈希值,它们是不同的:

centos: 0faa300b7b0b81bfe65199da932eb6e2
ubuntu: f3a0fcc59516d4e68fd207bdbb1fc169

两个哈希值均通过以下方式计算md5sum

centos> md5sum --version
md5sum (GNU coreutils) 8.22

ubuntu> md5sum --version
md5sum (GNU coreutils) 8.25

所以版本有点不同,但这会导致散列值不同吗?

编辑

以下是ls -l输出:

centos: -rw-rw-r--.  1 username username 8217194015
ubuntu: -rw-rw-r--   1 username username 8217194015

Centos 输出包含我从未听说过的神秘点。 (会不会和lvm有关?那个centos上用的是lvm)

编辑2

检查md5sum -b也会导致不同的结果:

centos: 0faa300b7b0b81bfe65199da932eb6e2
ubuntu: 6d799f6981066d82c7f861576b4980e1

rsync使用什么哈希算法?根据维基百科rsync 使用 md5 检查 chunk 是否相同:

接收者将其文件副本分割成块,并为每个块计算两个校验和:MD5 哈希值,以及一个较弱但更容易计算的“滚动校验和”。它将这些校验和发送给发送者。发送方快速计算其文件版本中每个块的滚动校验和;如果它们不同,则必须发送。如果它们相同,发送方将使用计算成本更高的 MD5 哈希来验证块是否相同。

答案1

这里有一个错误的假设:

据我所知,rsync 在传输完成后会自动通过哈希检查来验证传输是否顺利。

Rsync 使用校验和来确定是否需要同步。但是,Rsync 不会重新读取创建的副本,它信任内核报告错误。因此,结论很简单:这些文件不相同。可能只是一点点,也可能更多。校验和无法告诉您有多少不匹配。

答案2

.表示该文件具有 SELinux 上下文,就像 CentOS 上的每个文件一样(Ubuntu 上没有文件),这可能会md5sum在某种程度上造成混淆。您是否尝试md5sum使用switch运行b以确保它不会被“文本”转换破坏?

相关内容