dd è un'utilità dei sistemi unix nata per copiare e convertire file anche speciali (mai sentito dire "su linux tutto è un file"? Ecco, lasciando perdere la correttezza o meno di questa frase, un file, su un sistema unix, può essere anche un intero disco!). Anche se l'origine del nome, probabilmente, risale ad un linguaggio di programmazione della IBM (di cui dd ricalca in parte la sintassi), è scherzosamente interpretato come acronimo di "Destroy Disk" o "Destroy Data" perché, come con ogni programma sufficientemente potente, se si commette qualche errore è possibile danneggiare un sistema funzionante o perdere irrimediabilmente dati importanti.

Clonare hard disk dd gestire clone creato

Vantaggi e svantaggi

Perché utilizzare dd al posto di altri programmi per la clonazione? E quali sono gli svantaggi?

I vantaggi principali di dd sono:

  • la sua diffusione: si trova in tutte le distribuzioni Linux (anche datate), funziona perfettamente da LiveCD, quindi non c'è bisogno di cercare, scaricare e installare nessun nuovo programma;
  • il tipo di copiatura bit-a-bit: a dd non interessa il tipo di filesystem con cui è formattato un disco, ne se questo è criptato; farà comunque un perfetto clone del disco (o di una sola partizione);
  • la possibilità di "montare" l'immagine creata su un altro sistema per ispezionarla.

L'altro lato della medagli presenta gli svantaggi, che sono:

  • per eseguire la copia di un sistema occorrerà un dispositivo di backup grande almeno quanto il (ma meglio se più grande del) disco di origine; è comunque possibile comprimere il clone, per esempio, con gzip;
  • la copia bit-a-bit copierà anche gli errori e anzi potrebbe aggravarli: infatti dd legge prima una certa quantità di byte (di default 512) e poi li riporta così come li ha letti sul dispositivo di backup, ma se alcuni settori non sono leggibili, dd riporterà prima tutti i bit letti in sequenza e riempirà lo spazio dei bit non letti a causa di errori con degli 0. Per questo motivo è bene utilizzare dd solo per clonare i dischi che si è certi essere in buono stato (magari dopo averli controllati con badblocks)!! [Per recuperare i file dai dischi danneggiati è possibile utilizzare una versione modificata di dd chiamata dd-rescue];
  • il processo di clonazione per i grossi dischi può durare anche diverse ore ma il tempo varia anche in base alle opzioni passate a dd e naturalmente alle prestazioni del sistema.

Via con la clonazione!

Come detto, dd si trova in tutte le distro Linux e il sistema migliore per utilizzarlo è proprio avviare una di queste distro da LiveCD. Nell'esempio riportato, ho utilizzato Xubuntu 15.04.

Una volta avviata la distro, dobbiamo individuare il disco che vogliamo clonare. Per semplificare la procedura è meglio attendere a collegare il dispositivo di backup dove andremo a salvare il clone. Gli strumenti che ci consentono di individuare il disco (o la sola partizione) da clonare sono molti ma quelli più immediati nella comprensione sono lsblk da lanciare su terminale oppure Gparted

Clonare hard disk dd gestire clone creato

Nell'immagine sopra, possiamo ben vedere, con lsblk, che il disco da clonare è riconosciuto dal sistema "Live" come sda; lo riconosco dalla dimensione (111.8G) (è un ssd da 120GB) e dal numero e dimensione delle partizioni presenti. Come controprova posso verificare anche con Gparted. Prima di iniziare il processo di clonazione devo anche assicurarmi che il disco non sia montato!

Adesso è il momento di collegare la nostra unità di backup, dove andremo a salvare l'immagine del nostro disco, e ripetere il comando lsblk

Clonare hard disk dd gestire clone creato

Il nuovo disco aggiunto (in questo caso sdc) sarà il dispositivo appena collegato; per sicurezza possiamo di nuovo controllare la dimensione (465.8G, è un hard disk esterno da 500GB) e il numero di partizioni (una sola, sdc1). L'automount della nostra distro dovrebbe anche aver montato il nuovo disco rilevato e, in questo caso, il punto di mount è /media/xubuntu/489BB7A502FB63DC: è bene prenderne nota mentale se non vogliamo fare un clone disco-a-disco ma vogliamo creare un clone disco-a-file.

A questo punto possiamo procedere con la clonazione; nel terminale digitiamo questo comando:

sudo dd if=/dev/sda of=/media/xubuntu/489BB7A502FB63DC/immagine_disco.dd bs=128K

In pratica ho detto a dd di leggere da /dev/sda (if=/dev/sda) e scrivere nel file "immagine_disco.dd" che si trova in /media/xubuntu/489BB7A502FB63DC/ (se non presente il file verrà creato) (of=//media/xubuntu/489BB7A502FB63DC/immagine_disco.dd); inoltre ho indicato la quantità di 128000 byte da leggere di volta in volta (bs=128K, ricordo che senza questa opzione la quantità di byte letti è di soli 512). È bene utilizzare questa opzione per velocizzare leggermente il processo di clonazione ma, ripeto, solo se si è certi che il disco non contenga errori!

Clonare hard disk dd gestire clone creato

Come si può vedere dall'immagine sopra il processo di clonazione del disco da 120GB ha impiegato circa un'ora (3154 secondi = 52 minuti).

Come vedremo in seguito, con le ultime versioni di dd è possibile anche controllare l'avanzamento dell'operazione, aggiungendo come opzione in fondo al comando status=progress: in questo modo vedremo a che punto è il processo di copia e potremo calcolare mentalmente il tempo che impiegherà a finire.

Come ultima cosa potrebbe tornare utile creare un promemoria di cosa esattamente contiene il file-clone appena creato; questo può essere fatto reindirizzando l'output di

sudo fdisk -l /dev/sda

su un file.txt (nell'esempio, fdisk-sda.txt) da salvare insieme all'immagine appena creata

Clonare hard disk dd gestire clone creato

L'output di fdisk ci mostra che /dev/sda ha una tabella delle partizioni GPT (Disklabel type: gpt), contiene 3 partizioni (sda1, sda2, sda3), ci dice anche da quale settore a quale settore si estendono e che tipo di fylesystem utilizzano. È anche possibile verificare se queste informazioni sono presenti anche nel clone con il comando

fdisk -l /media/xubuntu/489BB7A502FB63DC/immagine_disco.dd

Ispezionare il clone

Per ispezionare il clone appena creato possiamo utilizzare, su Linux, losetup. Il comando:

sudo losetup --partscan --find --show immagine_disco.dd

creerà un nuovo dispositivo loop in questo caso /dev/loop0 che conterrà le stesse tre partizioni viste in precedenza

Clonare hard disk dd gestire clone creato

L'automount della nostra distro dovrebbe montare automaticamente le partizioni (tutte ad esclusione della EFI); se così non fosse possiamo montarle manualmente con il comando

mount /dev/loop0p2 /punto/di/mount/preferito

Le partizioni saranno completamente accessibili per ispezione o modifica (se vogliamo possiamo montare il dispositivo loop anche in sola lettura passando un'ulteriore opzione a losetup, --read-only).

Clonare hard disk dd gestire clone creato

Per avere lo stesso risultato su Windows potremo utilizzare Diskinternals Linux-reader che trovate recensito anche qua.

Sarà sufficiente selezionare Drivers > Mount Image, scegliere Raw Disk Image nella nuova finestra che si aprirà, selezionare All Files (*.*) e scegliere il nostro file-clone.

Clonare hard disk dd gestire clone creato

Ripristinare il clone

Per ripristinare il clone sul disco (magari dopo averlo sostituito) sarà sufficiente procedere in maniera analoga a quanto già visto per creare il clone. Questa volta ho utilizzato Ubuntu 16.10 sempre da LiveCD, il disco su cui voglio ripristinare il clone è sempre /dev/sda (controllare la dimensione) e il clone si trova in /media/ubuntu/489BB7A502FB63DC/immagine_disco_ORIGINE.dd (non lasciatevi ingannare dal nome del clone, è sempre quello che ho creato precedentemente, l'ho soltanto rinominato durante i miei esperimenti ;) ). Quindi si procede con il comando:

dd if=/media/ubuntu/489BB7A502FB63DC/immagine_disco_ORIGINE.dd of=/dev/sda bs=64M status=progress

Clonare hard disk dd gestire clone creato

Alla fine possiamo vedere come su /dev/sda siano ritornate le 3 partizioni presenti all'inizio e come l'opzione bs=64M (64000000 byte da leggere ogni volta) passata a dd abbia notevolmente diminuito il tempo impiegato a trattare gli stessi 120GB: questa volta ha impiegato solo 1155 secondi (poco meno di 20 minuti!).

Clonare hard disk dd gestire clone creato

A questo punto potremo riavviare e ritrovare il nostro sistema tale e quale a come era prima della clonazione.