Verifica md5sum / sha256sum / sha512sum di una immagine .iso copiata su penna USB

5 risposte [Ultimo contenuto]
Ritratto di 3vis
3vis
(Junior)
Offline
Junior
Iscritto: 23/06/2013
Messaggi: 32

Ciao a tutti!

Vorrei installare Debian sul mio netbook, sul quale sono già installati Win7 e Linux Mint. Sono costretto ad utilizzare una penna USB bootable in quanto il netbook non dispone di lettore CD/DVD.

Prima di procedere con l’installazione, mi piacerebbe verificare se l’immagine .iso è stata copiata correttamente sulla penna USB, ma non ci riesco. Worried

Ho cercato con Google, ma sono riuscito a trovare solo articoli che descrivono la verifica MD5 su CD/DVD.
Ubuntu help: https://help.ubuntu.com/community/HowToMD5SUM
Debian FAQ: http://www.debian.org/CD/faq/#verify

Vi descrivo la procedura che ho seguito in ambiente Mint.

1: ho effettuato il download dell’immagine .iso e ne ho verificato l’integrità con il seguente comando:

~/Downloads $ md5sum debian-7.0.0-amd64-CD-1.iso
5f9aea239b122454dc360d52e85d6bf8 debian-7.0.0-amd64-CD-1.iso

La stringa calcolata corrisponde con quella fornita dal sito ufficiale Debian.

2: con Unetbootin, ho copiato debian-7.0.0-amd64-CD-1.iso sulla penna USB.

3: seguendo la guida dell’ Ubuntu help, ho calcolato la dimensione dell’immagine .iso

~/Downloads $ ls -l debian-7.0.0-amd64-CD-1.iso
-rw-r--r-- 1 eeq eeq 679477248 Jun 15 16:29 debian-7.0.0-amd64-CD-1.iso

4: sempre nella guida dell’ Ubuntu help si dice di utilizzare il seguente comando:
dd if=/dev/cdrom bs=1 count=XXXXXXXX | md5sum

Io ho sostituito cdrom con sdb, ovvero il nome con cui la penna USB è stata montata. Inoltre, per accelerare il processo ho impostato il valore del block size (bs) su 2 e diviso quindi per 2 la dimensione totale dell’iso (679477248 / 2 = 339738624). Mi è stato negato il permesso.

~ $ dd if=/dev/sdb bs=2 count=339738624 | md5sum
dd: opening `/dev/sdb': Permission denied
d41d8cd98f00b204e9800998ecf8427e -

5: come suggerito nella seguente guida: http://ubuntuforums.org/showthread.php?t=1562704 , ho assegnato tutti i permessi all'utente corrente, al suo gruppo ed anche a tutti gli altri.

~ $ sudo chmod 777 /dev/sdb

6: ho riutilizzato il commando dd

~ $ dd if=/dev/sdb bs=2 count=339738624 | md5sum
339738624+0 records in
339738624+0 records out
679477248 bytes (679 MB) copiedb78fae2a082fa368ba2e8eb51355a6a7 -
, 2673.07 s, 254 kB/s

Come potete vedere, la stringa MD5 non corrisponde a quella corretta.

La procedura che ho utilizzato è giusta? Confused

Nel caso qualcuno si chieda che verifica io abbia fatto prima dell’installazione di Linux Mint, beh, diciamo che all’epoca ignoravo l’importanza di verificare che i file di un sistema operativo siano corretti al 100%.

Grazie in anticipo a che saprà indicarmi come effettuare la verifica MD5 o SHA256 o SHA512 su una chiavetta USB bootable.

Ciao!

Ritratto di badroot
badroot
(Guru)
Offline
Guru
Iscritto: 22/08/2008
Messaggi: 2083

Ciao, prima di tutto perdonami se sottolineo l'eresia di fare chmod su una device, è sufficente e più corretto eseguire il comando dd da root o con sudo, non che sia sbagliato al fine del risultato è solo che ho visto in tanti anni l'uso assurdo di chmod 777 per risolvere qualsiasi genere di problema per cui quando vedo certe cose mi si drizzano i peli sulla schiena.

La somma MD5 sulla device devi controllarla a device non montata altrimenti ottieni un valore diverso, quindi da terminale usa il comando :

sudo umount /dev/sdb1

sostituendo sdb1 con quello che si adatta alla tua situazione, e poi fai l'MD5.

Ultima cosa, quando si masterizza una ISO, o la si scrive con dd, i blocchi sono solitamente di 2048 bytes quindi il comando dd deve avere l'opzione bs=2048.

Citazione:


È possibile usare il programma "isosize" per scoprire il numero corretto di byte da leggere dal supporto ottico. Mostra "sector count" e "sector size" del supporto ottico, dove "" è il file di device del supporto ottico.
$ /sbin/isosize -x
sector count: 25600, sector size: 2048
I valori di "sector count" e "sector size" sono passati a "dd" per leggere il numero corretto di byte dal supporto ottico e lo stream di byte è poi inviato tramite una pipe al programma di calcolo della checksum (md5sum, sha1sum, ecc).
$ dd if= count= bs= | sha1sum
La checksum così calcolata deve essere confrontata con la checksum corrispondente presente nel relativo file delle checksum (MD5SUMS, SHA1SUMS, ecc).

Quindi dovrebbe essere sufficente fare :

dd if=file.iso of=/dev/sdb bs=2048

in quanto il parametro count dovrebbe essere determinato in maniera automatica, oppure lo specifichi come da "citazione" che viene dal link da te riportato.

Ritratto di 3vis
3vis
(Junior)
Offline
Junior
Iscritto: 23/06/2013
Messaggi: 32

Ciao badroot!

Innanzitutto grazie mille per la tua veloce risposta. In questo forum c'è il pulsante “Thanks” per ringraziare chi è d'aiuto? Confused

Hai fatto bene a sottolineare l'errato uso del comando chmod. Ahimè, le mie conoscenze dei vari comandi da terminale sono assai limitate...provo sempre ad informarmi sul web, ma ancora non so comprendere a fondo se quello che suggeriscono sia corretto o meno.

Riassumo brevemente la procedura che ho utilizzato per scaricare, copiare su USB ed infine verificarne la corretta scrittura su USB dell'immagine .iso del sistema operativo Debian...magari risulta utile a qualche altro newbie!

Step 1: effettuare il download dell’immagine .iso del sistema operativo che si preferisce, Debian in questo caso. Smile

Step 2: aprire il terminale e spostarsi nella directory dove è salvata l'immagine, solitamente la cartella Downloads.

 cd /home/nomeutente/Downloads/

Step 3: calcolare la somma MD5 dell'immagine .iso.

~/Downloads $ md5sum debian-7.1.0-amd64-CD-1.iso
6813af64cc9487099210afed14a080e0  debian-7.1.0-amd64-CD-1.iso

La checksum appena calcolata deve essere confrontata con la checksum corrispondente presente nel sito web da cui si effettua il download. Se corrispondono, significa che il file è stato scaricato correttamente, in caso contrario, effettuare nuovamente il download.

Step 4: calcolare la dimensione dell'immagine scaricata.

~/Downloads $ ls -l debian-7.1.0-amd64-CD-1.iso
-rw-r--r-- 1 nomeutente nomeutente 680525824 Jun 27 17:48 debian-7.1.0-amd64-CD-1.iso

Annotarsi il valore numerico fornito, in questo caso 680525824.

Step 5: ora si può chiudere il terminale, formattare in FAT32 la penna USB e, con Unetbootin, effettuare la copia dell'immagine .iso sulla nuova partizione creata.

Step 6: al termine delle operazioni con Unetbootin, aprire un nuovo terminale e smontare la partizione della penna USB con il seguente comando:

 sudo umount /dev/sdb1

Vi ricordo che il /dev/sdb dovrà essere cambiato a seconda del vostro identificatore di device. Per capire come è stata identificata la vostra penna USB, digitate da terminale

sudo fdisk -l

Vi comparirà la lista di tutti i dispositivi di memoria di massa.

Disk /dev/sda: 320.1 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders, total 625142448 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
Disk identifier: 0x11b42f68
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048   209717247   104857600    7  HPFS/NTFS/exFAT
/dev/sda2   *   209717248   241174527    15728640    b  W95 FAT32
/dev/sda3       241183906   625089149   191952622    5  Extended
/dev/sda4       625100800   625142447       20824   ef  EFI (FAT-12/16/32)
/dev/sda5       241183908   266357699    12586896   83  Linux
/dev/sda6       266357763   270663119     2152678+  82  Linux swap / Solaris
/dev/sda7       270663183   291635199    10486008+  83  Linux
/dev/sda8       295856128   327112703    15628288   83  Linux
/dev/sda9       327115593   625089149   148986778+   7  HPFS/NTFS/exFAT
 
Disk /dev/sdb: 4011 MB, 4011491328 bytes
158 heads, 54 sectors/track, 918 cylinders, total 7834944 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
Disk identifier: 0x0000cdca
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     7833599     3915776    b  W95 FAT32

Nel mio caso la penna USB è identificata con sdb. La vostra potrebbe essere sdc, sdf, ecc..

Step 7: calcolare la somma MD5 dell'immagine .iso copiata sulla penna USB con il seguente comando:

sudo dd if=/dev/sdb bs=2048 count=332288 | md5sum
332288+0 records in
332288+0 records out
680525824 bytes (681 MB) copied, 52.6642 s, 12.9 MB/s
6813af64cc9487099210afed14a080e0  -

Vi ricordo che il /dev/sdb dovrà essere cambiato a seconda del vostro identificatore di device ed il valore da inserire dopo count deve essere calcolato dividendo il valore della dimensione dell'immagine .iso calcolato in precedenza con il valore assegnato a bs. In questo caso 680525824 / 2048 = 332288.
La checksum appena calcolata deve essere confrontata con la checksum calcolata in precedenza oppure presente nel sito web da cui si effettua il download. Se corrispondono, significa che il file è stato scritto correttamente sulla penna USB.

E' possibile calcolare la firma anche con gli algoritmi sha256sum oppure sha512sum utilizzando:

sudo dd if=/dev/sdX bs=2048 count=YYYYYY | sha256sum
 
sudo dd if=/dev/sdX bs=2048 count=YYYYYY | sha512sum

Se ci sono errori o imprecisioni, fatelo presente, please! Smile

Ciao!

PS: non riesco a capire perchè la formattazione "CODE" funziona a metà sulle righe cd /home/nomeutente/Downloads/ e sudo umount /dev/sdb. Infatti manca il riquadro.

Ritratto di mcortese
mcortese
(Moderatore)
Offline
Moderatore
Iscritto: 27/02/2009
Messaggi: 2918

Solo una correzione: il passo 6 dovrebbe essere

sudo umount /dev/sdb1
Nota sdb1 invece di sdb. Infatti si monta e smonta una partizione, mentre la iso è un'immagine dell'intero disco.

Per il funzionamento dei tag code, vedi questa guida.

Ritratto di 3vis
3vis
(Junior)
Offline
Junior
Iscritto: 23/06/2013
Messaggi: 32

Ciao mcortese!

Grazie per la correzione. Ho aggiornato lo step6. Spero sia corretto ora, casomai fammi sapere.

Ho una domanda: ha senso eseguire l'unmount di un device con sudo umount /dev/sdX o si esegue sempre e solo l'unmount di partizioni con sudo umount /dev/sdXy, dove y indica il numero della partizione?

Ad esempio in questa guida http://ubuntusemplice.it/2012/05/16/rendere-una-penna-usb-avviabile-con-multisystem/ si dice di smontare la penna USB:

Citazione:


A questo punto smontiamo la nostra pendrive con il comando

umount /dev/sdx

Infine per effettuare la copia vera e propria digitate

sudo dd if=/percorso/verso/file_scaricato.iso of=/dev/sdX

Ricordate di sostituire il valore sdx con il valore uscito dopo fdisk – l.

Pure in questa http://www.chimerarevo.com/linux-come-formattare-una-pendrive-usb-da-terminale/ si parla di device:

Citazione:


Eventualmente smontiamo la chiavetta USB dal sistema, digitando (vi ricordo che il /dev/sdf dovrà essere cambiato a seconda del vostro identificatore di device) a terminale

umount /dev/sdf

In quest' altra http://anl4u-pl.blogspot.sg/2009/05/format-usbflas-drive-from-terminal.html invece si smonta una partizione:

Citazione:


1st plug in your flash device, and open terminal.
NOTE: Flash drive should not be mounted. To unmount:

sudo umount /dev/sdb1

Ho le idee un po' confuse. Confused

Ciao e grazie.

Ritratto di mcortese
mcortese
(Moderatore)
Offline
Moderatore
Iscritto: 27/02/2009
Messaggi: 2918

In realtà mi sembra che le idee confuse ce le abbia chi ha scritto quelle guide! Smile

Sebbene sia teoricamente possibile non partizionare una chiavetta USB e quindi usare l'intero device come un unico volume, questa configurazione non è mai usata, perché temo non sarebbe riconosciuta da Windows.

Comunque l'unica regola valida è: si può smontare solo quello che è montato. La cosa più saggia è usare il comando mount senza argomenti per vedere cosa è montato ed eventualmente smontarlo.