Shell Magic/ Immagini dei dischi da riga di comando
Come creare l’immagine di un disco fisso senza ricorrere a costosi e mastodontici strumenti come Ghost o Partition Magic e possibilmente provando anche un po’ di soddisfazione nell’eseguire il compito? La risposta è “usando una distribuzione live di GNU/Linux”, magari concepita appositamente allo scopo.
In questi giorni ho pensato di sostituire il sistema operativo sul mio
laptop, ma prima di procedere alla formattazione volevo mettere da
parte un’immagine del sistema attuale come misura
precauzionale. Un’ottima distro live piena di strumenti utili è
SystemRescueCd. L’idea era di avviare la distro sul laptop da CD o
pendrive USB, collegare un hard disk esterno formattato con XFS su cui
fare il backup e utilizzare Partimage per creare l’immagine della
partizione di sistema. Sfortunatamente ho scoperto che partimage non
supporta ext4, per cui all’avvio del processo restituisce un errore
(“can’t read bitmap block 0 from image”) ed esce. Così ho ripiegato
sulla riga di comando con il caro vecchio dd
. Come promemoria e nel
caso servisse a qualcuno ecco i comandi per creare l’immagine
compressa di una partizione da SystemRescueCd o altra distro live.
Innanzitutto è necessario montare preventivamente l’hard disk esterno sulla cartella di backup già predisposta sulla distro:
mount -t xfs /dev/sdb2 /mnt/backup
In questo caso sdb2
è la partizione dell’hard disk esterno adibita a
storage, che viene montata su /mnt/backup
. Quindi avviamo la
creazione dell’immagine:
dd if=/dev/sda1 conv=sync,noerror bs=64K | pv -s 30G | gzip -c > /mnt/backup/sys.img.gz
Il venerando dd
legge a basso livello i blocchi del dispositivo
/dev/sda1
e li passa allo standard output. Il parametro bs
imposta il
numero di byte che vengono letti di volta in volta, mentre con
conv=sync,noerror
viene inviato in output il numero corretto di
blocchi anche in caso di errori in lettura. L’output di dd
viene
elaboarto da gzip
che comprime l’immagine. L’utility pv
piazzata
strategicamente nel mezzo della pipe mostra all’utente un indicatore
di progresso, in base alla stima sulle dimensioni fornita con
l’opzione -s
; nel mio caso la partizione era di circa 30G.
Per concludere il comando di ripristino, in caso di emergenza:
gunzip -c /mnt/backup/sys.img.gz | pv -s 30G | dd of=/dev/sda1 conv=sync,noerror bs=64K