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
comments powered by Disqus