Bagaimana cara memeriksa apakah ISO ditulis ke USB stick saya tanpa kesalahan?


11

Saya mengikuti ini DebianEeePC HowTo InstallUsingStandardInstaller petunjuk di Debian Wiki, untuk menulis Debian ISO ke USB saya.

dd if=debian-*-netinst.iso of=/dev/sdX

Dengan menggunakan sha1sum, saya dapat memeriksa checksum dari file ISO yang saya unduh. Bagaimana saya dapat memeriksa checksum dari perangkat USB stick, untuk memastikan bahwa USB stick tidak memiliki masalah dan ISO disalin dengan sempurna?


USB adalah universal serial bus. Tentunya yang Anda maksud adalah semacam perangkat yang terpasang pada bus itu (seperti flashdrive, ethernet atau kartu suara)?
Stéphane Chazelas

@StephaneChazelas, edit pertanyaannya.
maxschlepzig

Jawaban:


18

Anda dapat menggunakan cmpuntuk memeriksa apakah semuanya disalin dengan baik:

$ cmp -n `stat -c '%s' debian-X-netinst.iso` debian-X-netinst.iso /dev/sdX

Solusi ini tidak secara eksplisit menghitung checksum dari Anda /dev/sdX- tetapi Anda tidak perlu melakukan itu karena Anda sudah melakukan ini untuk sumber perbandingan (yaitu debian-X-netinst.iso).

Melakukan hanya dd if=/dev/sdX | sha1sumdapat menghasilkan checksum yang salah hanya karena Anda mendapatkan blok tambahan ( /dev/sdXkemungkinan besar lebih besar dari file-iso).

Melalui cmp -nAnda pastikan tidak ada trailing byte pada Anda /dev/sdXyang dibandingkan.

Jika Anda paranoid tentang kualitas perangkat penyimpanan massal USB yang Anda panggil sync, keluarkan, masukkan kembali, lalu lakukan perbandingan - jika tidak, semua atau beberapa blok mungkin hanya berasal dari kernel VM (cache) - padahal mungkin bit pada perangkat keras kacau.


1
Hai yang disana! Ketika saya melakukan ini, saya menerima ketidakcocokan instan di baris pertama. Apa yang bisa menjadi penyebabnya?
SarpSTA

3

Jawaban Julien berhasil, tetapi ada cara yang lebih sederhana dan lebih cepat untuk melakukan ini:

sudo head -c <image size> /dev/sdX | sha1sum

Jadi, dalam satu baris:head -c $(stat -c '%s' the.iso) /dev/sdc | sha1sum
Julien Palard

3

Hanya menggunakan dddan md5sum/ sha1sumsudah cukup, tetapi seperti yang dikatakan sebelumnya, berhati-hatilah, perangkat Anda tidak memiliki ukuran yang sama dengan file Anda, jadi jumlahnya akan berbeda.

Di sini bagaimana Anda masih bisa melakukannya

Pertama, Anda harus mengetahui ukuran file:

$ stat -c '%s' debian-live-8.2.0-amd64-lxde-desktop.iso
1003487232

Kemudian, untuk menjadi keren dengan syscalls Anda, Anda lebih baik mendapatkan ini sebagai kelipatan dari kekuatan yang bagus dari dua suka 4096, perkalian dari keduanya HARUS menghasilkan persis ukuran file, dengan cara lain, Anda akan memeriksa terlalu sedikit atau terlalu banyak byte, menghasilkan checksum yang salah.

$ bc
bc 1.06.95
scale = 9
1003487232 / 4096
244992.000000000

Saya senang, 4096 × 244992 = 1003487232jadi 4096 baik untuk saya, (dan akan untuk Anda, mungkin) jadi saya bisa menggunakan ukuran blok 4096(tipikal) dan jumlah blok 244992.

Jangan lupa untuk menulis file di tombol USB ...

$ dd if=debian-live-8.2.0-amd64-lxde-desktop.iso of=/dev/sd? && sync

Dan tahu, menggunakan ukuran blok yang diketahui dan jumlah blok, Anda dapat membaca jumlah byte yang tepat dari kunci dan memeriksanya:

$ dd if=/dev/sdb bs=4096 count=244992 | sha1sum
b0dbe4ca8f526d1e43555459c538607d4a987184

(Ya md5sumjauh lebih cepat daripada sha1sumtapi itu jelas bukan hambatan Anda di sini, hambatannya adalah USB thoughput, terima kasih telah memperhatikan).

Atau, singkatnya:

dd if=/dev/sdb bs=4096 count=$(($(stat -c '%s' the.iso) / 4096)) | sha1sum

Terima kasih dengan $ dd if=/dev/sdb1 bs=4096 count=<filesize/4096> | md5sum saya bisa memeriksa md5sum dari gambar Debian ditulis ke usb stick dan membandingkannya dengan Debian md5sums.
Paul Rougieux

0

Berdasarkan jawaban @Kyle Jones

diff <(md5sum debian-XYZ-netinst.iso | awk '{print $1}') <(dd if=/dev/sdX | md5sum | awk '{print $1}')

Anda harus menggunakan md5sumkarena lebih cepat daripada sha1sum(ini akan menghemat waktu ketika Anda memeriksa file besar)


6
Maksud Anda md5sumsetidaknya dua kali lebih cepat? Itu pasti karena OP sudah memiliki sha1sumdari situs unduhan dan tidak harus menghitungnya. Dan membaca dari USB akan menjadi faktor pembatas bukan perhitungan sha1 / md5.
Anthon

1
Saya menjalankan ZFS dengan SHA-256 checksumming pada sistem mid-range yang bijaksana dan bijaksana. Bahkan selama scrub (yang membaca semua data dan memverifikasi semua checksum) pada kolam yang berada pada karat berputar, faktor pembatasnya adalah throughput disk I / O, bukan CPU. Saya ragu banyak memory stick USB akan mempertahankan throughput yang jauh lebih baik dari itu, terutama jika terhubung melalui USB 2.0.
CVn
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.