なぜこれが起こっているのかわかりませんが、いくつかのファイルをAmazon S3
にアップロードしてから、Amazonとローカルの両方でmd5sum
をチェックして送信されたファイルを削除します。しかし最近、同じコンテンツに関するこの問題が2つの異なるmd5sum
を生成していることがわかりました。
[valter.silva@alog ~]$ ls
renew.log s3
[valter.silva@alog ~]$ ls s3/
renew.log
[valter.silva@alog ~]$ md5sum renew.log
d41d8cd98f00b204e9800998ecf8427e renew.log
[valter.silva@alog ~]$ md5sum s3/renew.log
d41d8cd98f00b204e9800998ecf8427e s3/renew.log
[valter.silva@alog ~]$ gzip renew.log
[valter.silva@alog ~]$ gzip s3/renew.log
[valter.silva@alog ~]$ md5sum renew.log.gz
aa1f0ae9a61aac5bcd32b917fbd9324b renew.log.gz
[valter.silva@alog ~]$ md5sum s3/renew.log.gz
6ae0e48edb68e9ed938fdfc3894f6c94 s3/renew.log.gz
なぜそれが起こっているのか誰かが知っていますか?または、ファイルに一貫性と信頼性があるかどうかをどのように確認する必要がありますか?
更新ティアゴクルーズの回答に答える:
[valter.silva@alog ~]$ sha1sum renew.log
da39a3ee5e6b4b0d3255bfef95601890afd80709 renew.log
[valter.silva@alog ~]$ sha1sum s3/renew.log
da39a3ee5e6b4b0d3255bfef95601890afd80709 s3/renew.log
[valter.silva@alog ~]$ gzip renew.log
[valter.silva@alog ~]$ gzip s3/renew.log
[valter.silva@alog ~]$ sha1sum renew.log.gz
2d9111d9db71da9fe4de57fbc19c89eb0bd46470 renew.log.gz
[valter.silva@alog ~]$ sha1sum s3/renew.log.gz
05014ca24d133f1761f9134e8dab52e6e2111010 s3/renew.log.gz
それはティアゴに同じ問題を与えます。
RFC 1952 によると、gzip
ファイルヘッダーには、元のファイル(フィールドMTIME
)の変更時間が含まれています。ヘッダーをプレーンテキストで表示できます1)gzip -lv renew.log.gz
:
method crc date time compressed uncompressed ratio uncompressed_name
defla 64263ac7 Jun 21 17:59 314 597 52.1% renew.log
したがって、本当にgzipで圧縮されたファイルを比較したい場合は、-n
オプションを使用してそれらを圧縮し、元のファイル名とタイムスタンプを保存しないようにします、
gzip -n renew.log s3/renew.log
そしてそれらのmd5sumは同一でなければなりません。
それ以外の場合は使用できます
md5sum <(zcat renew.log.gz) <(zcat s3/renew.log.gz)
解凍されたファイルのmd5sumを計算します。
1) ただし、表示される日時はヘッダーから取得されるのではなく、現在の値を表します。これはファイル名にも当てはまります。
$ gzip renew.log
$ mv renew.log.gz foo.gz
$ gzip -lv foo.gz -------- uncompressed name is taken from current name ---v
method crc date time compressed uncompressed ratio uncompressed_name
defla 6c721644 Jul 11 22:34 580 1586 65.7% foo
$ hexdump -C foo.gz | head -n 2
00000000 1f 8b 08 08 f0 16 df 51 00 03 72 65 6e 65 77 2e |.......Q..renew.|
00000010 6c 6f 67 00 8d 93 dd 6e 9b 30 18 86 8f 89 94 7b |log....n.0.....{|
^^^-------^^^^^
original filename is stored in the header
同じファイルの圧縮バージョンが同じであると期待するのはなぜですか?圧縮プログラム(gzip)は、ヘッダーにタイムスタンプを含めることも、ランダム化されたアルゴリズムを使用することもできます。
そしてまさに! gzipヘッダー タイムスタンプを含む 。圧縮ファイルを同じにしたい場合は、ファイルのタイムスタンプを同じにする必要があります。
したがって、ファイルをコピーするときは、cp -p file1 file1
だけでなく、常にcp file1 file2
として実行してください。これは実際には悪い習慣です。
'-n'フラグを指定してgzipを使用するだけです。
tiagocruz@stark:~$ gzip -n Yippie-Ki-Yay.mp3 bla/Yippie-Ki-Yay.mp3
tiagocruz@stark:~$ sha1sum Yippie-Ki-Yay.mp3.gz bla/Yippie-Ki-Yay.mp3.gz
b44b21c5f414935f1ced1187bfafd989704474a5 Yippie-Ki-Yay.mp3.gz
b44b21c5f414935f1ced1187bfafd989704474a5 bla/Yippie-Ki-Yay.mp3.gz