Hitung md5sum dari CD / DVD

18

Saya memiliki file ISO, yang saya bakar ke CD. Sekarang bagaimana saya dapat memeriksa apakah CD dibuat dengan benar? Saya ingin perintah yang menghitung jumlah hash yang bisa saya gunakan untuk memeriksa dengan jumlah hash yang saya hitung pada file ISO. Idealnya perintah harus:

  • Bekerja terlepas dari file ISO: yaitu, saya tidak ingin menyimpan daftar jumlah hash untuk setiap file dalam disk, atau mengingat jumlah blok apa pun
  • Menjadi relatif singkat: perintah satu baris bagus, rantai perintah yang panjangnya dua baris OK, skrip yang menjangkau satu halaman tidak
  • Cukup efisien: misalnya, dddisk kembali ke file kemudian jalankan md5sumpada file tidak dapat diterima

Jika tidak ada jawaban yang tidak bisa memuaskan semua saya akan menghargai pertandingan terdekat juga. Bahkan lebih baik jika Anda bisa memberi tahu saya mengapa itu tidak terlalu mudah.

phhehehe
sumber

Jawaban:

18

Masalah mendasarnya adalah bahwa kami ingin mengambil md5sum dari informasi yang sama persis dengan yang ada pada ISO awalnya. Saat Anda menulis ISO ke CD, ada kemungkinan ruang kosong di ujung disk, yang pasti mengubah md5sum. Jadi, cara tersingkat:

md5sum /dev/cdrom

tidak bekerja . Apa yang berfungsi (dan umum dalam dokumentasi online ) hanya membaca jumlah byte yang tepat dari perangkat lalu melakukan md5sum. Jika Anda tahu jumlah byte, Anda dapat melakukan sesuatu seperti:

dd if=/dev/cdrom bs=1 count=xxxxxxxx | md5sum

di mana 'xxxxx' adalah ukuran iso dalam byte.

Jika Anda tidak tahu jumlah byte begitu saja, tetapi masih memiliki iso pada disk Anda, Anda dapat menggunakannya menggunakan ls dengan melakukan sesuatu seperti yang berikut ( diambil dari sini ):

dd if=/dev/cdrom | head -c `stat --format=%s file.iso` | md5sum

Ada banyak konstruksi satu baris lainnya yang harus berfungsi. Perhatikan bahwa dalam setiap kasus kami menggunakandd untuk membaca byte dari disk, tetapi kami tidak mem-pipe-nya ke file, melainkan, kami menyerahkannya ke md5sum langsung.

Peningkatan kecepatan yang dimungkinkan dapat dilakukan dengan melakukan beberapa perhitungan untuk menggunakan ukuran blok yang lebih besar ( bs=dalam ddperintah).

Steven D
sumber
Anda dapat menyederhanakan dd if=/dev/cdrom |untuk </dev/cdrom. Tidak ada yang ajaib tentang dddan memblokir perangkat, itu hanya perintah manipulasi aliran dengan sintaks lucu.
Gilles 'SANGAT berhenti menjadi jahat'
Omong-omong, Anda (phunehehe) harus memiliki ukuran iso bersama dengan MD5 checksum. Ini sangat penting untuk MD5 yang rusak sebagian, tetapi ini adalah ide yang bagus untuk keamanan dan kegunaan apa pun checksum yang Anda gunakan.
Gilles 'SANGAT berhenti menjadi jahat'
@Gilles: sebenarnya, menggunakan dddengan bsukuran cache perangkat dapat mempercepat transfer data sebagai lawan pengalihan input biasa.
Alex
@Gilles: apa yang Anda maksud dengan "MD5 yang rusak sebagian"? Dan mengapa saya harus menjaga ukuran file, ketika jika ada sesuatu yang salah, checksum harus segera memberi tahu saya?
phunehehe
@ phunehehe: Ada kelemahan kriptografi yang diketahui dengan MD5 (tidak (secara publik) diketahui cara membuat tabrakan untuk file yang diberikan, tetapi itu bisa terjadi). Mengetahui ukuran file memberi Anda sedikit lebih percaya diri (meskipun tidak lebih). Ini juga memberi Anda umpan balik segera untuk kesalahan umum yang tidak disengaja seperti unduhan terpotong.
Gilles 'SANGAT berhenti menjadi jahat'
2

Ada program untuk tugas ini. Ini disebut -checkisomd5 . Di Ubuntu dapat diinstal dengan perintah:

sudo apt-get install isomd5sum
Денис Проскурин
sumber
Bagaimana kamu menggunakannya? checkisomd5 /dev/sr0memberi saya: Pemeriksaan media selesai, hasilnya adalah: NA. Tidak ada informasi checksum yang tersedia, tidak dapat memverifikasi media.
Torsten
Checksum harus disematkan dalam gambar iso dengan alat "implantisomd5". Itu harus dilakukan sebelum iso akan menulis di disk. Utilitas termasuk dalam "checkisomd5".
Денис Проскурин
1

Jika ukuran gambar pada disk dapat dibagi pada 2048, jumlah keseluruhan, yang tampaknya sangat umum, maka Anda bisa mendapatkan MD5sum akurat sebagai berikut di mana sr0nama optik -yang dapat ditemukan menggunakan, lshw -C disk- dan di mana 'count' adalah dividen dari ukuran gambar dibagi dengan 2048.

dd if=/dev/sr0 bs=2048 count=356352 |md5sum
wsmart
sumber
Banyak CD mungkin menggunakan trek "Mode 1", yang memiliki 2.048 byte data pengguna per sektor . ("Mode 2" menyimpan 2.336 byte data pengguna per sektor, tetapi tidak memiliki kemampuan deteksi dan koreksi kesalahan yang lebih canggih yang ditawarkan oleh Mode 1, menyebabkan Mode 2 kurang berguna untuk data di mana kesalahan tidak dapat ditoleransi.)
a CVn