Mengapa kartu SD duplikat ini memiliki sha1sums berbeda untuk konten mereka?

17

Saya memiliki banyak kartu SDHC SD 10 Kelas UHS-1 dari produsen yang berbeda. Mereka semua dipartisi sebagai berikut

 $ 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

Saya menggunakan duplikator kartu memori untuk menyalin gambar. Semua kartu memiliki konten yang sama.

Ketika saya memasang partisi kedua dari dua kartu SD dan membandingkan kontennya, keduanya persis sama.

 $ 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^

Namun, jika saya membandingkan sha1sum partisi, terkadang berbeda

 $ 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  -

Asing, jika saya membandingkan kedua drive ini menggunakan alat biner diffing seperti radiff2, saya melihat yang berikut ini

 $ 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 perubahan, meskipun difftidak melihat perbedaan dalam konten!

Dan untuk kewarasan, jika saya membandingkan dua partisi yang memiliki sha1sum yang sama, saya melihat yang berikut ini

 $ radiff2 -c sdj2.img sdf2.img
0

0 perubahan!

Berikut adalah rincian sha1sums yang berbeda yang saya lihat dari kartu yang berbeda. Sepertinya produsen kartu memiliki pengaruh besar pada apa sha1sum yang saya dapatkan ketika saya menggunakan dd untuk membaca drive.

masukkan deskripsi gambar di sini

Terlepas dari perbedaan dalam sha1sums, semua kartu ini berfungsi untuk tujuan saya. Namun, ini membuat pemeriksaan integritas menjadi sulit karena saya tidak dapat membandingkan sha1sums.

Bagaimana mungkin dua partisi kartu SD dapat memiliki sha1sums yang berbeda, namun memiliki konten yang sama persis ketika dipasang?


Jawab: Jadi sekarang berfungsi seperti yang diharapkan. Untuk menjernihkan, inkonsistensi disebabkan oleh duplikator SySTOR yang saya gunakan. Pengaturan penyalinan yang saya gunakan menggunakan informasi dan file partisi yang disalin, tetapi itu tidak perlu dilakukan untuk memastikan ada kecocokan satu-ke-satu.

peskal
sumber
3
Tes seperti apa yang Anda lakukan dengan banyak kartu? :)
hjk
Jika Anda membandingkannya setelah Anda memasangnya, itu adalah masalah Anda.
David Hoelzer

Jawaban:

18

Apakah Anda membandingkan konten mereka segera setelah menulis konten yang digandakan? Jika ya, mereka harus keluar sama persis . Sebagai contoh,

# 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

Ini hanya berlaku jika kartu memiliki ukuran yang persis sama. Kadang-kadang, bahkan kumpulan kartu yang berbeda yang merupakan pabrikan dan model yang sama keluar dengan ukuran yang sedikit berbeda. Gunakan blockdev --getsize64untuk mendapatkan ukuran perangkat yang tepat.

Juga, jika kedua kartu memiliki ukuran yang persis sama tetapi Anda menulis gambar ke kedua kartu yang lebih kecil dari kapasitas kartu, maka sampah yang muncul setelah akhir gambar dapat menyebabkan perbedaan untuk dilaporkan.

Setelah Anda memasang sistem file apa pun pada perangkat, Anda akan mulai melihat perbedaan. Implementasi sistem file akan menulis berbagai hal ke sistem file, seperti jurnal kosong, atau bendera / cap waktu untuk menandai sistem file sebagai bersih, dan kemudian Anda tidak akan melihat konten yang sama lagi. Saya percaya ini dapat terjadi dalam beberapa keadaan bahkan jika Anda me-mount sistem file read-only.

Celada
sumber
Apakah OP perlu digunakan blockdev --getsize64? Sepertinya ddmengumumkan jumlah data yang dibacanya.
G-Man Mengatakan 'Reinstate Monica'
3
EIBTI. Meminta ukuran membuatnya sangat jelas. ddakan melaporkan berapa yang disalin . Dalam hal ukuran tidak cocok antara file gambar, ukuran satu perangkat, dan ukuran perangkat lain, dll ... yang mungkin ukuran sumber, desinasi, atau keduanya.
Celada
Kamu benar. Mereka seharusnya dan mereka persis sama. Setelah melihat lebih jauh, saya menemukan ketidakkonsistenan disebabkan oleh pengaturan salinan pada duplikator SySTOR saya. Ketika saya ddkartu SD dari komputer saya (seperti yang saya lakukan dengan gambar utama untuk duplikator), semua shasum cocok. Saya mengubah pengaturan pada SySTOR dari "sistem dan file data hanya" menjadi "seluruh media" dan sekarang semua kartu duplikat memiliki shasums yang cocok
peskal
8

Untuk membangun berdasarkan jawaban Celada: Di satu sisi, Anda melakukan diff(rekursif) antara dua sistem file yang dipasang. Di sisi lain, Anda melakukan perbandingan biner antara perangkat yang memiliki sistem file pada mereka - tampaknya, setelah Anda memasang sistem file. Itu apel dan delima.

Operasi pada tingkat filesystem yang dipasang hanya dapat melihat konten data dari file dalam sistem file. Perbandingan biner antara perangkat melihat data dan metadata . Saya sedikit terkejut dengan perbedaan 767368, tapi saya bisa menebak beberapa:

  • Ketika Anda me-mount sistem file, kernel menulis waktu saat ini ke superblock sistem file sebagai "waktu mount". Jika Anda telah memasang kedua perangkat (dan tidak di tepat waktu yang sama), "mount kali" di superblok akan berbeda.
  • Jika Anda melakukan perbandingan biner tingkat perangkat setelah sistem file rekursif diff, setiap file pada setiap perangkat akan memiliki waktu aksesnya (dalam inode) diperbarui.

NB Apakah Anda perlu menggunakan ddterlalu banyak? Apa yang terjadi jika Anda melakukannya radiff2 -c /dev/sdg2 /dev/sdj2 atau sha1sum /dev/sdg2?

G-Man Mengatakan 'Reinstate Monica'
sumber
Apakah ini berlaku bahkan ketika memasang drive sebagai hanya-baca? Saya telah melakukan perbandingan shasum sebelum pemasangan juga dan mereka masih berbeda. Saya juga tidak pernah melihat perubahan shasum setelah pemasangan sebagai hanya baca. - Juga Anda benar, saya harus memenangkan penggunaan penghargaan dd yang tidak berguna: p
peskal
(1) Tidak, seperti yang Anda duga (yaitu, konsisten dengan pengalaman Anda), pemasangan sistem file sebagai ro(hanya baca) tidak boleh menyebabkan (atau mengizinkan) modifikasi apa pun . (Meskipun saya telah melihat satu atau dua kasus perangkat lunak melakukan sesuatu selain dari apa yang seharusnya dilakukan.) (2) Setelah membaca komentar Anda (satu pada setiap jawaban, pada saat penulisan ini), saya masih tidak begitu mengerti apa terjadi. Bisakah Anda mengedit pertanyaan Anda atau mengirim jawaban yang menjelaskan keadaan di mana Anda mendapatkan kegagalan perbandingan (yaitu, ia menemukan perbedaan) segera setelah menduplikasi (sebelum pemasangan), ... (Lanjutan)
G-Man Mengatakan 'Reinstate Monica'
(Lanjutkan) ... dan apa yang Anda lakukan untuk mengatasinya? (3) Saya suka, tetapi haruskah itu disebut “UUOD”, “UUODD”, atau “UUDD”? Saya memilih "UUDD", tetapi kita mungkin harus mengambil ini di Meta. :-) ⁠
G-Man Mengatakan 'Reinstate Monica'