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:

Tags: , , , , , , , , , , , ,

Post simili:

If you enjoyed this post, please consider to leave a comment or subscribe to the feed and get future articles delivered to your feed reader.

6 Responses to “How to clone/copy hard disk in Linux”
  1. Alex
    11:15 on June 3rd, 2010

    Non si poteva fare con dd in un baleno? Baleno nel senso di semplicità visto che con un comando si clonava tutto, non nel senso del tempo impiegato, visto che dd nella tua situazione avrebbe impiegato ore.

  2. Umberto
    11:42 on October 30th, 2009

    Ciao.
    Sto provando a duplicare il disco sistema seguendo le tue indicazioni.
    Avrei bisogno di due indicazioni.
    Il mio vecchio disco è partizionato così:
    /dev/sda1 * 1 6374 51199123+ 83 Linux
    /dev/sda2 6375 6896 4192965 82 Linux swap/Solaris
    /dev/sda3 6897 60801 432991912+ 5 Extended
    /dev/sda5 6897 19055 97667136 83 Linux

    Ho partizionato il nuovo disco (sdd) in modo identico al vecchio.
    Vorrei sapere su quali partizioni – tra sdd1 sdd3 e sdd5 – devo lanciare mkfs.ext3.
    E poi, quale devo montare su /new-disk e quale su /new-disk/boot .
    Ho già fatto un tentativo ma non sono sicuro.
    Grazie.

  3. michele
    14:43 on December 3rd, 2008

    @Martino le direcotry /proc e /sys sono directory “speciali/virtuali” create “al volo” ad ogni avvio del sistema, per questo non vanno di solito copiate.

    Per l’opzione -f di fdisk e’ una vecchia opzione che non si utilizza piu’ e comunque il man puo’ esserti utile per conoscere i comandi, basta digitare “man fdisk”.

  4. Martino
    13:59 on December 3rd, 2008

    inoltre non ho trovato nemmeno nel manuale il significato dell’opzione -f in fdisk, potresti spiegarlo?
    P.s. ho provato a darlo su un disco e non ha dato risultati..

  5. Martino
    13:50 on December 3rd, 2008

    ciao, guardando questo link–>
    http://linux.p2pforum.it/wiki/Trasferimento_di_un_sistema_GNU-LINUX
    ho notato che viene detto di fare una copia completa di tutte le cartelle, mentre in qui scrivi di non copiare la cartella /proc e /sys..
    Per quale motivo?

  6. Stefano
    18:56 on July 19th, 2008

    ottimo how to grazie !

Leave a comment

(required)

(required)


*

Categories