我将一个大文件从远程 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
以确保它不会被“文本”转换破坏?