How to clone/copy hard disk in Linux

Quante volte vi sara’ capitato di dover sostituire un disco sul vostro server Linux? A me e’ successo qualche giorno fa quando un disco mezzo rotto e’ stato sostituito da uno nuovo di zecca, ma essendo il pc un server di posta/web primario per un’azienda, non era certo possibile reinstallare tutto da zero copiando solo i dati, occorreva assolutamente clonare il contenuto del vecchio disco su quello nuovo ed ecco come ho proceduto.

Prima di tutto collegate il nuovo disco al server e procuratevi un cd con una Linux Live (knoppix va benissimo) e fate il boot con il cd.
Se non avete la possibilita’ di fare il boot da cd potete sempre eseguire le procedure elencate sotto da single user facendo il boot dal vecchio disco e digitando:

init 1

In questo modo tutti i servizi (rete compresa, quindi attenzione a non farlo da remoto!!!) verranno disabilitati e potrete procedere alla copia di tutto il sistema senza problemi.

Ora che siete pronti iniziamo col partizionare il nuovo disco, che se e’ IDE e’ facile che sia /dev/hdb, se invece e’ SATA o SCSI potrebbe essere /dev/sdb, controllate bene questi parametri con il comando “dmesg” o analizzando il log “/var/log/message“.

Se il disco e’ nuovo di zecca non avra’ alcuna partizione quindi eseguendo il comando:

fdisk -l

dovrebbe comparirvi un disco senza partizioni, quello e’ il vostro nuovo disco che supponiamo in questo caso sia /dev/sdb (e il vecchio /dev/sda) .

Per partizionare il nuovo disco usate il comando:

fdisk /dev/sdb

Ricordatevi di creare anche la partizione di swap

Il prossimo passo e’ quello di creare i filesystem nelle varie partizioni, eseguite il seguente comando per ogni partizione creata (tranne la swap):

(partizione /boot) mkfs.ext3 /dev/sdb1
(partizione /) mkfs.ext3 /dev/sdb2

Preparate anche la partizione di swap:

mkswap /dev/sdb3

Ora avete il nuovo disco pronto alla copia dei file dal vecchio disco, non resta che montare le nuove partizioni seguendo l’alberatura scelta e creando le directory necessarie:

mkdir /new-disk
mount -t ext3 /dev/sdb2 /new-disk
mkdir /new-disk/boot
mount -t ext3 /dev/sdb1 /new-disk/boot

Possiamo procedere alla copia, ma e’ importante che copiate SOLO le directory necessarie omettendo la directory /proc e /sys e ovviamente la directory /new-disk

cp -av /bin /boot /command /dev /etc /home /initrd* /lib /media /mnt /root /sbin /selinux /srv /tmp /usr /var /vmlinuz* /new-disk/

L’alberatura puo’ cambiare da sistema a sistema, il consiglio che posso darvi e’ quello di fare un “ls -l /” e aggiungere a mano ogni elemento che va copiato nel comando “cp

Finalizziamo il lavoro di copiatura creando la directory /proc e /sys:

mkdir /new-disk/proc
mkdir /new-disk/sys

A questo punto tutto e’ stato copiato e opzionalmente potete eseguire delle verifiche sul nuovo disco, per esempio controllando l’integrita’ dei dati copiati, smontate le nuove partizioni e per ognuna di esse (tranne la swap) eseguite il comando:

fdisk -f /dev/sdb1

Per finalizzare e ottenere un sistema completo e bootabile dal nuovo disco abbiamo bisogno di installare il boot loader (grub) nella MBR e verificare se l’fstab e’ ancora valido.

Prima di tutto organizziamo il sistema perche’ si possa chrootare all’interno del nuovo disco:

mount-t ext3 /dev/sdb2 /new-disk
mount-t ext3 /dev/sdb1 /new-disk/boot

mount -t proc none /new-disk/proc
mount -o bind dev /new-disk/dev

chroot /new-disk

In questo momento siete nella chroot del nuovo disco e state usando i comandi che prendete dal nuovo disco, verificate inanzitutto che /etc/fstab corrisponda alle partizioni da voi create, ma ricordate che molto probabilmente le vostre partizioni una volta staccato il disco vecchio diventeranno /dev/sda invece che /dev/sdb.

Non resta che installare grub nella MBR del nuovo disco, dalla chroot eseguite:

grub
> root (hd0,0)
> setup (hd0)

Dove il primo 0 sta per il primo disco (quello che diventera’ sda) e lo 0 sta per la prima partizione (boot), se tutto va bene otterete un output che vi dice che grub e’ stato correttamente installato.

Non rimane che spegnere il server, staccare il vecchio disco e riavviare incrociando le dita ;)

Se nel riavviare grub non si avvia avete sbagliato qualcosa nell’ultimo passaggio, ripetetelo avviando il server con il vecchio disco o con il cd Live di Linux, partendo con l’eseguire il chroot.

Se invece grub parte ma vi presenta degli errori potete far riferimento a un vecchio post che scrissi riguardo i vari errori di grub.

Riferimenti:

None
A comma-separated list of terms describing this content. Example: funny, bungee jumping, "Company, Inc.".