大きなファイルをリモートcentosからローカルubuntuにrsyncしました
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に関連している可能性がありますか?lvmはそのcentosで使用されます)
編集2:
md5sum -b
をチェックすると、結果も異なります。
centos: 0faa300b7b0b81bfe65199da932eb6e2
ubuntu: 6d799f6981066d82c7f861576b4980e1
Rsyncはどのハッシュアルゴリズムを使用しますか? ウィキペディアによると rsyncはmd5を使用して、チャンクが同じかどうかを確認します。
受信者はファイルのコピーをチャンクに分割し、チャンクごとに2つのチェックサムを計算します。MD5ハッシュと、より弱いが計算が簡単な「ローリングチェックサム」です。これらのチェックサムを送信者に送信します。送信者は、ファイルのバージョン内の各チャンクのローリングチェックサムをすばやく計算します。それらが異なる場合は、送信する必要があります。それらが同じである場合、送信者はより計算コストの高いMD5ハッシュを使用して、チャンクが同じであることを確認します。
ここには間違った仮定があります:
私の知る限り、rsyncは、転送が完了した後、ハッシュチェックで転送がうまくいったことを自動的に確認します。
Rsyncはチェックサムを使用して、同期が必要かどうかを判断します。ただし、Rsyncは作成されたコピーを再読み込みせず、カーネルを信頼してエラーを報告します。したがって、結論は単純です。ファイルは同一ではありません。たった1ビットかもしれませんし、もっと多いかもしれません。不一致がどれだけあるかは、チェックサムではわかりません。
ドット.
は、CentOS上のすべてのファイル(Ubuntuにはファイルがない)と同様に、ファイルにSELinuxコンテキストがあることを意味し、何らかの方法でmd5sum
を混乱させる可能性があります。 b
スイッチを使用してmd5sum
を実行し、「テキストへの」変換によって混乱しないようにしましたか?