Come verificare se l'ISO è stato scritto sulla mia chiavetta USB senza errori?


11

Ho seguito queste istruzioni DebianEeePC HowTo InstallUsingStandardInstaller sul Debian Wiki, per scrivere un ISO Debian sulla mia USB.

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

Usando sha1sum, posso controllare i checksum del mio file ISO scaricato. Come posso controllare il checksum del dispositivo USB stick, per essere sicuro che la chiave USB non abbia problemi e che l'ISO sia stato copiato perfettamente?


USB è un bus seriale universale. Sicuramente intendi una sorta di dispositivo collegato a quel bus (come una chiavetta USB, una scheda Ethernet o una scheda audio)?
Stéphane Chazelas,

@StephaneChazelas, ha modificato la domanda.
maxschlepzig,

Risposte:


18

È possibile utilizzare cmpper verificare se tutto è stato copiato correttamente:

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

Questa soluzione non calcola esplicitamente il checksum del tuo /dev/sdX- ma non è necessario farlo perché l'hai già fatto per l'origine del confronto (cioè debian-X-netinst.iso).

Fare solo a dd if=/dev/sdX | sha1sumpuò produrre un checksum che non corrisponde correttamente solo perché si ottengono blocchi finali ( /dev/sdXmolto probabilmente più grandi del file ISO).

Tramite cmp -nassicurati che non /dev/sdXvengano confrontati byte finali sul tuo .

Se sei paranoico sulla qualità del tuo dispositivo di archiviazione di massa USB che chiami sync, espellilo, reinseriscilo e poi fai il confronto - altrimenti tutti o alcuni blocchi potrebbero provenire semplicemente dai kernel VM (cache) - quando in realtà forse bit sull'hardware sono rovinati.


1
Ehilà! Quando lo faccio, ricevo una discrepanza istantanea nella prima riga. Quale può essere la causa?
SarpSTA,

3

La risposta di Julien fa il suo lavoro, ma esiste un modo più semplice e veloce per farlo:

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

Quindi, in una sola riga:head -c $(stat -c '%s' the.iso) /dev/sdc | sha1sum
Julien Palard,

3

Basta usare dde md5sum/ sha1sumè sufficiente, ma come detto in precedenza, fai attenzione, il tuo dispositivo non ha le stesse dimensioni del tuo file, quindi le somme differiranno.

Ecco come puoi ancora farlo

Per prima cosa devi conoscere la dimensione del file:

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

Quindi, per essere cool con i tuoi syscalls, è meglio ottenere questo come multiplo di un bel potere di due simili 4096, la moltiplicazione dei due DEVE produrre esattamente la dimensione del file, in altri modi, controllerai troppo pochi o troppi byte, dando un checksum errato.

$ bc
bc 1.06.95
scale = 9
1003487232 / 4096
244992.000000000

Sono felice, 4096 × 244992 = 1003487232quindi 4096 è buono per me (e lo sarà per te, probabilmente), quindi posso usare una dimensione del blocco di 4096(tipica) e un conteggio dei blocchi di 244992.

Non dimenticare di scrivere il file sulla chiave USB ...

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

E sai, usando la dimensione del blocco noto e il conteggio dei blocchi, puoi leggere il numero esatto di byte dalla chiave e controllarli:

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

(Sì, md5sumè molto più veloce di quello, sha1summa chiaramente non è il tuo collo di bottiglia qui, il collo di bottiglia è il throughput USB, grazie per averlo notato).

O, in breve:

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

Grazie a $ dd if=/dev/sdb1 bs=4096 count=<filesize/4096> | md5sum me ho potuto controllare il md5sum di un'immagine Debian scritta su una chiavetta USB e confrontarla con Debian md5sums.
Paul Rougieux,

0

Basato sulla risposta di @Kyle Jones

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

dovresti usare md5sumperché è più veloce di sha1sum(questo farà risparmiare tempo quando controlli file di grandi dimensioni)


6
Vuoi dire che md5sumè almeno il doppio più veloce? Deve essere perché l'OP ha già il sha1sumdal sito di download e non deve calcolarlo. E la lettura da USB sarà un fattore limitante, non il calcolo sha1 / md5.
Anthon,

1
Sto eseguendo ZFS con checksum SHA-256 su un sistema di fascia media in termini di potenza di elaborazione. Anche durante gli scrub (che legge tutti i dati e verifica tutti i checksum) su pool che risiedono sulla ruggine in rotazione, il fattore limitante è il throughput I / O del disco, non la CPU. Dubito che molte chiavette USB supportino un throughput molto migliore di quello, in particolare se è collegato tramite USB 2.0.
un CVn
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.