ไฟล์ที่มีเนื้อหาเดียวกัน แต่มี md5sums ต่างกันเมื่อ gzip'd


16

ฉันไม่รู้ว่าทำไมสิ่งนี้ถึงเกิดขึ้น แต่ฉันอัปโหลดไฟล์บางไฟล์ไปAmazon S3แล้วลบไฟล์ที่ส่งไปตรวจสอบmd5sumทั้งใน Amazon และในเครื่อง แต่เมื่อเร็ว ๆ นี้ฉันพบปัญหาเกี่ยวกับเนื้อหาเดียวกันกำลังสร้างสองสิ่งที่แตกต่างกัน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

ไม่มีใครรู้ว่าทำไมสิ่งที่เกิดขึ้น? หรือฉันควรตรวจสอบว่าไฟล์ของฉันสอดคล้องเชื่อถือได้หรือไม่

อัปเดต การตอบคำตอบ Tiago ครูซ:

[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

มันให้ปัญหาเดียวกันกับ Tiago

คำตอบ:


54

ตาม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'd ที่บีบอัดพวกเขาด้วย-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

12

ทำไมคุณคาดว่าไฟล์บีบอัดของไฟล์เดียวกันจะเหมือนกัน? โปรแกรมบีบอัด (gzip) สามารถรวมการประทับเวลาบางส่วนในส่วนหัวหรือสามารถใช้อัลกอริทึมแบบสุ่มบางอย่าง

และแน่นอน! ส่วนหัว gzip มีการประทับเวลา หากคุณต้องการให้ไฟล์บีบอัดของคุณเหมือนกันไฟล์ของคุณจะต้องมีการประทับเวลาเหมือนกัน!

ดังนั้นเมื่อคุณคัดลอกไฟล์ให้ทำเช่นcp -p file1 file1นั้นไม่ใช่แค่cp file1 file2- นั่นเป็นนิสัยที่ไม่ดีจริงๆ!


10

เพียงใช้ gzip ด้วยการตั้งค่าสถานะ '-n':

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

ที่มา: /unix/31008/why-does-the-gzip-version-of-files-produce-a-different-md5-checksum


ฉันอัปเดตคำตอบของฉัน Tiago โดยทั่วไปปัญหาจะเหมือนกัน
Valter Silva

2
ใช้กับธง '-n'
Tiago Cruz

2
-1 คำตอบนี้ควรเป็นความคิดเห็น (หรือสาม)
คนบราซิลนั่น

@ ruda.almeida นี่เป็นคำตอบที่ถูกต้องพอที่จะพยายามแสดงวิธีการทดสอบแล้วแก้ไขปัญหา
James Mertz

2
ตกลงทุกอย่างก่อน "ใช้ gzip ด้วย" -n "" ควรแสดงความคิดเห็นเนื่องจากพยายามอธิบายคำถามให้ชัดเจนว่าเป็นความคิดเห็นใด จากนั้นส่วนที่สองนั้นถูกต้องทางเทคนิค แต่เป็นคำตอบที่มีคุณภาพต่ำเพราะมันไม่ได้อธิบายว่าอะไรเป็นสาเหตุของปัญหา
Guy บราซิลนั่น
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.