เหตุใด SD การ์ดที่ซ้ำกันเหล่านี้จึงมี sha1sums แตกต่างกันสำหรับเนื้อหา


17

ฉันมีการ์ด SDHC Class 10 UHS-1 SD จากผู้ผลิตหลายราย มีการแบ่งพาร์ติชันทั้งหมดดังนี้

 $ sudo fdisk -l /dev/sdj
Disk /dev/sdj: 14.9 GiB, 15931539456 bytes, 31116288 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x0000de21

Device     Boot   Start      End  Sectors  Size Id Type
/dev/sdj1          2048  1050623  1048576  512M  c W95 FAT32 (LBA)
/dev/sdj2       1050624  2099199  1048576  512M 83 Linux
/dev/sdj3       2099200  3147775  1048576  512M 83 Linux
/dev/sdj4       3147776 31116287 27968512 13.3G 83 Linux

ฉันใช้ตัวทำสำเนาการ์ดหน่วยความจำเพื่อคัดลอกรูปภาพ การ์ดทั้งหมดมีเนื้อหาเหมือนกัน

เมื่อฉันติดตั้งพาร์ติชั่นที่สองของการ์ด SD สองการ์ดใด ๆ และเปรียบเทียบเนื้อหาพวกเขาจะเหมือนกันทุกประการ

 $ sudo mount -o ro /dev/sdg2 /mnt/system-a/
 $ sudo mount -o ro /dev/sdj2 /mnt/system-b/
 $ diff -r --no-derefence /mnt/system-a /mnt/system-b/
 $ # prints nothing^

อย่างไรก็ตามถ้าฉันเปรียบเทียบ sha1sum ของพาร์ติชันบางครั้งพวกเขาก็แตกต่างกัน

 $ sudo dd if=/dev/sdg2 | sha1sum
1048576+0 records in
1048576+0 records out
536870912 bytes (537 MB) copied, 12.3448 s, 43.5 MB/s
ee7a16a8d7262ccc6a2e6974e8026f78df445e72  -

 $ sudo dd if=/dev/sdj2 | sha1sum
1048576+0 records in
1048576+0 records out
536870912 bytes (537 MB) copied, 12.6412 s, 42.5 MB/s
4bb6e3e5f3e47dc6cedc6cf8ed327ca2ca7cd7c4  -

คนแปลกหน้าถ้าฉันเปรียบเทียบทั้งสองไดรฟ์โดยใช้เครื่องมือการกระจายแบบไบนารีradiff2ฉันเห็นสิ่งต่อไปนี้

 $ sudo dd if=/dev/sdg2 of=sdg2.img
1048576+0 records in
1048576+0 records out
536870912 bytes (537 MB) copied, 12.2378 s, 43.9 MB/s

 $ sudo dd if=/dev/sdj2 of=sdj2.img
1048576+0 records in
1048576+0 records out
536870912 bytes (537 MB) copied, 12.2315 s, 43.9 MB/s

 $ radiff2 -c sdg2.img sdj2.img
767368

การเปลี่ยนแปลง 767368 แม้ว่าจะdiffไม่เห็นความแตกต่างในเนื้อหา!

และเพื่อสติถ้าฉันเปรียบเทียบสองพาร์ติชันที่มี sha1sum เดียวกันฉันจะเห็นสิ่งต่อไปนี้

 $ radiff2 -c sdj2.img sdf2.img
0

0 การเปลี่ยนแปลง!

นี่คือรายละเอียดของ sha1sums ที่แตกต่างกันที่ฉันเห็นจากการ์ดที่แตกต่างกัน ดูเหมือนว่าผู้ผลิตการ์ดจะมีผลกระทบอย่างมากต่อสิ่งที่ฉันได้รับเมื่อฉันใช้ dd เพื่ออ่านไดรฟ์

ป้อนคำอธิบายรูปภาพที่นี่

แม้จะมีความแตกต่างใน sha1sums แต่การ์ดเหล่านี้ใช้ได้สำหรับวัตถุประสงค์ของฉัน อย่างไรก็ตามมันทำให้การตรวจสอบจำนวนเต็มเป็นเรื่องยากเพราะฉันไม่สามารถเปรียบเทียบ sha1sums ได้

เป็นไปได้อย่างไรที่พาร์ทิชันการ์ด SD สองพาร์ติชันอาจมี sha1sums แตกต่างกัน แต่มีเนื้อหาเหมือนกันทุกประการเมื่อทำการเมาท์?


คำตอบ:ดังนั้นตอนนี้มันทำงานได้ตามที่คาดไว้ เพื่อล้างสิ่งต่าง ๆ ขึ้นมาความไม่ลงรอยกันนั้นเกิดจากนักทำสำเนา SySTOR ที่ฉันใช้ การตั้งค่าการคัดลอกที่ฉันมีใช้ข้อมูลพาร์ติชันและไฟล์ที่คัดลอก แต่ไม่จำเป็นต้องใช้บิตเพื่อให้แน่ใจว่ามีการแข่งขันแบบหนึ่งต่อหนึ่ง


3
คุณทำการทดสอบแบบไหนกับการ์ดแบบนี้? :)
hjk

หากคุณกำลังเปรียบเทียบพวกเขาหลังจากที่คุณเมาพวกเขานั่นคือปัญหาของคุณ
David Hoelzer

คำตอบ:


18

คุณเปรียบเทียบเนื้อหาของพวกเขาทันทีหลังจากเขียนเนื้อหาที่ซ้ำกันหรือไม่ ถ้าใช่พวกเขาควรออกมาเหมือนกันทุกประการ ตัวอย่างเช่น,

# Duplicate
dd bs=16M if=/dev/sdg of=/dev/sdk

# Comparing should produce no output
cmp /dev/sdg /dev/sdk
# Compare, listing each byte difference; also no output
cmp -l /dev/sdg /dev/sdk

นี่เป็นเรื่องจริงถ้าการ์ดมีขนาดเท่ากันทุกประการ บางครั้งแม้แต่ชุดของการ์ดที่แตกต่างกันซึ่งเป็นผู้ผลิตเดียวกันและรุ่นออกมาด้วยขนาดที่แตกต่างกันเล็กน้อย ใช้blockdev --getsize64เพื่อให้ได้ขนาดที่แน่นอนของอุปกรณ์

นอกจากนี้หากการ์ดทั้งสองมีขนาดเท่ากันทุกประการ แต่คุณเขียนภาพลงในการ์ดทั้งสองที่มีขนาดเล็กกว่าความจุของการ์ดขยะที่มาหลังจากสิ้นสุดภาพอาจทำให้เกิดความแตกต่างในการรายงาน

เมื่อคุณติดตั้งระบบไฟล์ใด ๆ บนอุปกรณ์คุณจะเริ่มเห็นความแตกต่าง การนำระบบไฟล์ไปใช้จะเขียนสิ่งต่าง ๆ ไปยังระบบไฟล์เช่นเจอร์นัลว่างเปล่าหรือแฟล็ก / การประทับเวลาเพื่อทำเครื่องหมายระบบไฟล์ว่าสะอาดแล้วคุณจะไม่เห็นเนื้อหาที่เหมือนกันอีกต่อไป ฉันเชื่อว่านี่อาจเป็นกรณีในบางสถานการณ์แม้ว่าคุณจะเมานต์ระบบไฟล์เป็นแบบอ่านอย่างเดียว


OP จำเป็นต้องใช้blockdev --getsize64หรือไม่ ดูเหมือนว่าddจะประกาศจำนวนข้อมูลที่อ่าน
G-Man กล่าวว่า 'Reinstate Monica'

3
EIBTI การค้นหาขนาดทำให้ชัดเจนจริงๆ ddจะรายงานเท่าใดก็คัดลอก ในกรณีที่ขนาดไม่ตรงกันระหว่างไฟล์รูปภาพขนาดของอุปกรณ์หนึ่งและขนาดของอุปกรณ์อื่น ฯลฯ ... ที่อาจเป็นขนาดของแหล่งที่มาการตัดหรือทั้งสองอย่าง
Celada

คุณถูก. พวกเขาควรจะเป็นและพวกเขาเหมือนกัน หลังจากตรวจสอบเพิ่มเติมนี้ฉันพบว่ามีความไม่สอดคล้องเกิดขึ้นจากการตั้งค่าการคัดลอกบนเครื่องถ่ายเอกสาร SySTOR ของฉัน เมื่อฉันddSD การ์ดจากคอมพิวเตอร์ของฉัน (อย่างที่ฉันทำกับภาพต้นแบบสำหรับนักลงทุน) shasums ทั้งหมดจะตรงกัน ฉันเปลี่ยนการตั้งค่าบน SySTOR จาก "ระบบและไฟล์ข้อมูลเท่านั้น" เป็น "สื่อทั้งหมด" และตอนนี้การ์ดที่ทำซ้ำทั้งหมดมี shasums ที่ตรงกัน
peskal

8

เพื่อสร้างคำตอบของ Celada: ในอีกด้านหนึ่งคุณกำลังทำdiff(เรียกซ้ำ) ระหว่างระบบไฟล์ที่เมาท์ทั้งสอง ในทางกลับกันคุณกำลังทำการเปรียบเทียบแบบไบนารี่ระหว่างอุปกรณ์ที่มีระบบไฟล์อยู่ - หลังจากที่คุณติดตั้งระบบไฟล์ นั่นคือแอปเปิ้ลและทับทิม

การดำเนินการในระดับระบบไฟล์ที่เมาท์สามารถดูเฉพาะเนื้อหาข้อมูลของไฟล์ในระบบไฟล์ ไบนารีเปรียบเทียบระหว่างอุปกรณ์ที่มีลักษณะที่ข้อมูลและเมตาดาต้า ฉันแปลกใจเล็กน้อยกับความแตกต่าง 767368 แต่ฉันเดาได้ไม่กี่:

  • เมื่อคุณเมานต์ระบบไฟล์เคอร์เนลจะเขียนเวลาปัจจุบันลงในซูเปอร์บล็อกของระบบไฟล์เป็น "เวลาเมานท์" ถ้าคุณได้ติดตั้งอุปกรณ์ทั้งสอง (และไม่ได้อยู่ที่แน่นอนในเวลาเดียวกัน) ที่ "ติดครั้ง" ใน superblocks จะแตกต่างกัน
  • หากคุณเปรียบเทียบไบนารีระดับอุปกรณ์หลังจากระบบไฟล์แบบเรียกซ้ำdiffทุกไฟล์ในแต่ละอุปกรณ์จะมีเวลาเข้าถึง (ใน inode) ที่อัปเดต

ป.ล. คุณจำเป็นต้องใช้ddมาก? จะเกิดอะไรขึ้นถ้าคุณทำradiff2 -c /dev/sdg2 /dev/sdj2 หรือsha1sum /dev/sdg2?


สิ่งนี้ใช้ได้กับการติดตั้งไดรฟ์แบบอ่านอย่างเดียวหรือไม่? ฉันได้ทำการเปรียบเทียบ shasum แล้วก่อนการติดตั้งด้วย ฉันยังไม่เคยเห็นการเปลี่ยนแปลงของ shasum หลังจากติดตั้งแบบอ่านอย่างเดียว - นอกจากนี้คุณพูดถูกฉันควรจะได้รับประโยชน์จากการใช้รางวัล dd: p
peskal

(1) ไม่เช่นที่คุณสงสัย (เช่นสอดคล้องกับประสบการณ์ของคุณ) การติดตั้งระบบไฟล์เป็นro(อ่านอย่างเดียว) ไม่ควรทำให้ (หรืออนุญาต) การดัดแปลงใด ๆ (แม้ว่าฉันเคยเห็นซอฟต์แวร์หนึ่งหรือสองกรณีที่ทำสิ่งอื่นนอกเหนือจากที่ควรทำ) (2) หลังจากอ่านความคิดเห็นของคุณ (หนึ่งคำตอบในแต่ละครั้งที่เขียนนี้) ฉันยังไม่เข้าใจว่า ที่เกิดขึ้น คุณจะกรุณาแก้ไขคำถามของคุณหรือโพสต์คำตอบที่อธิบายถึงสถานการณ์ที่คุณมีความล้มเหลวในการเปรียบเทียบ (เช่นพบความแตกต่าง) ทันทีหลังจากทำซ้ำ (ก่อนที่จะติดตั้ง), ... (ต่อ)
G-Man กล่าวว่า

(ต่อ) และสิ่งที่คุณทำเพื่อแก้ไขมัน? (3) ฉันชอบ แต่ควรเรียกว่า "UUOD", "UUODD" หรือ "UUDD" ฉันลงคะแนนให้กับ“ UUDD” แต่เราน่าจะใช้ข้อมูลนี้กับ Meta :-) ⁠
G-Man พูดว่า 'Reinstate Monica'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.