
我將一個大檔案從遠端 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
以確保它不會被“文字”轉換破壞?