Il comando dd
è un semplice, versatile e potente strumento. Può essere usato per copiare dalla sorgente alla destinazione, blocco per blocco, a prescindere dal tipo di filesystem oppure dal sistema operativo. Un metodo più conveniente è quello di usare dd
da un ambiente live, come un livecd.
Clonare una partizione
Da un disco fisico /dev/sda
, la partizione 1, ad un disco fisico /dev/sdb
sulla partizione 1.
dd if=/dev/sda1 of=/dev/sdb1 bs=4096 conv=notrunc,noerror
Se il file di output of
(sdb1
nel nostro esempio) non esiste, dd
lo creerà a partire dall’inizio del disco.
Clonare un intero hard disk
Da un dico fisico /dev/sda
ad un disco fisico /dev/sdb
:
dd if=/dev/sda of=/dev/sdb bs=4096 conv=notrunc,noerror
Questo comando clonerà l’intero disco, incluso il Master Boot Record (e quindi anche il bootloader), tutte le partizioni ed i dati.
notrunc
odo not truncate
mantiene l’integrità dei dati imponendo add
di non spezzare nessun dato.noerror
comunica add
di continuare l’operazione, ignorando tutti gli errori dall’origine. Il comportamento di default didd
è quello di fermarsi ad ogni errore.bs=4096
imposta la dimensione dei blocchi a 4k, la dimensione ottimale ed efficiente per la lettura/scrittura del disco, e quindi della velocità clonazione.
Backup del MBR
Il Master Boot Record è contenuto nei primi 512 byte del disco. Esso consiste in 3 parti:
- I primi 446 byte contengono il bootloader.
- I successivi 64 contengono la tavola delle partizioni (4 voci di 16 byte ciascuna, una voce per ogni partizione primaria).
- Gli ultimi 2 byte contengono un identificatore.
Per salvare il MBR in un file dal nome mbr.img
:
# dd if=/dev/hda of=/mnt/sda1/mbr.img bs=512 count=1
Per ripristinare (attenzione questo comando potrebbe distruggere la tavola delle partizioni, e quindi impedire l’accesso ai dati presenti sul disco):
# dd if=/mnt/sda1/mbr.img of=/dev/hda
Se si desidera soltanto ripristinare il bootloader, ma non la tavola delle partizioni, basterà ripristinare solo i primi 446 byte del MBR:
# dd if=/mnt/sda1/mbr.img of=/dev/hda bs=446 count=1
Per ripristinare soltanto la tavola delle partizioni, il comando sarà:
# dd if=/mnt/sda1/mbr.img of=/dev/hda bs=1 skip=446 count=64
Sarà possibile estrarre il MBR dall’immagine completa di un disco:
#dd if=/path/to/disk.img of=/mnt/sda1/mbr.img bs=512 count=1
Creare l’immagine di un disco
1. Effettuare il boot da un sistema live(liveCD o liveUSB).
2. Assicurarsi che nessuna partizione sia montata dal disco di origine.
3. Effettuare il mount di un disco esterno.
4. Effettuare il backup del disco:
# dd if=/dev/hda conv=sync,noerror bs=64K | gzip -c > /mnt/sda1/hda.img.gz
5. Salvare alcune informazioni addizionali riguardo al disco, come la sua geometria, sarà necessario per interpretare la tavola delle partizioni salvata nell’immagine. L’informazione più importante è la dimensione dei cilindri.
# fdisk -l /dev/hda > /mnt/sda1/hda_fdisk.info
bs=
) uguale all’ammontare della cache del disco di cui si sta creando l’immagine. Ad esempio, bs=8192K
funziona per una cache di 8MB. Il valore di 64K menzionato in questo articolo è migliore del valore di default, che è impostato a bs=512
byte, perché dd
verrà eseguito più velocemente con un valore di bs=
maggiore.Ripristinare il sistema
Per ripristinare il sistema:
# gunzip -c /mnt/sda1/hda.img.gz | dd of=/dev/hda
Usando cp
Il programma cp
può essere usato per clonare un disco, ad una partizione alla volta. Il vantaggio dell’uso di cp
è che il tipo di filesystem della/delle partizione/i di destinazione può non essere il solito dell’origine. Per sicurezza, effettuare il processo da un ambiente live.
La procedura di base da un ambiente live sarà:
- Creare le nuove partizioni di destinazione (usando fdisk, cfdisk oppure altri programmi disponibili nell’ambiente live).
- Creare un filesystem su ogni partizione precedentemente creata. Ad esempio:
mkfs -t ext3 /dev/sdb1
- Effettuare il mount dell’origine e della/delle partizione/partizioni di destinazione. Ad esempio:
mount -t ext3 /dev/sda1 /mnt/origine mount -t ext3 /dev/sdb1 /mnt/destinazione
- Copiare i file dalla partizione di origine a quella di destinazione:
cp -a /mnt/origine/* /mnt/destinazione
L’opzione -a
: preserva i permessi, non segue mai i link simbolici ed copia ricorsivamente
- Cambiare i punti di mount della partizione appena copiata nel file
/etc/fstab
a seconda delle modifiche effettuate(es. il tipo di filesystem) - Infine, installare il bootloader GRUB se necessario. (Consultare GRUB)