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以確保它不會被“文字”轉換破壞?

相關內容