Lo scenario oggetto di questo articolo è il seguente: per un motivo qualsiasi, voglio aggiungere alla linuxbox un secondo hard disk e riprodurvi il sistema attualmente installato. Ottenuta la duplicazione del sistema, voglio sostituire il secondo disco al primo.
Ecco le operazioni necessarie
nel seguito si da per scontato che il secondo disco sia stato installato, cioè si sia fermato il sistema, si sia inserito il secondo hard disk e si sia riavviato il tutto,
riconfigurando anche il BIOS della macchina.
La duplicazione dell'hd attivo avviene come una normale
installazione da cdrom usando i comandi
clone o, meglio,
isiclone la versione potenziata descritta al link precedente
Ricognizione della situazione esistente
Per avere una lista dei dischi esistenti e delle relative partizioni (dischi IDE)
* # ll /dev/hd* *
Per vedere come e'partizionato un disco (es. /dev/hda)
* # parted /dev/hda print *
oppure
* # fdisk -l /dev/hda *
Per dischi scsi i dispositivi sono denominati
sd anzichè
hd
Vediamo un caso pratico....
# ll /dev/hd*
lr-xr-xr-x 1 root root 32 Jun 30 11:23 /dev/hda -> ide/host0/bus0/target0/lun0/disc
lr-xr-xr-x 1 root root 33 Jun 30 11:23 /dev/hda1 -> ide/host0/bus0/target0/lun0/part1
lr-xr-xr-x 1 root root 33 Jun 30 11:23 /dev/hda2 -> ide/host0/bus0/target0/lun0/part2
lr-xr-xr-x 1 root root 33 Jun 30 11:23 /dev/hda5 -> ide/host0/bus0/target0/lun0/part5
lr-xr-xr-x 1 root root 33 Jun 30 11:23 /dev/hda6 -> ide/host0/bus0/target0/lun0/part6
lr-xr-xr-x 1 root root 30 Jun 30 11:23 /dev/hdc -> ide/host0/bus1/target0/lun0/cd
che mi dice che ho un solo disco, di nome simbolico
/dev/hda,
collegato al dispositivo fisico
/dev/ide/host0/bus0/target0/lun0/disc,
cioè al canale ide primario (
bus0) come master (
target0). Le partizioni sono la numero 1 primaria, la 2 estesa (vedi sotto) contenente le partizioni logiche 5 e 6.
Con cfdisk posso a questo punto vedere o modificare la situazione.
# cfdisk /dev/hda attiva la modalità interattiva (l´unica, da cui uscirò immediatamente) che fornisce
cfdisk 2.11z
Disk Drive: /dev/hda
Size: 20411080704 bytes
Heads: 255 Sectors per Track: 63 Cylinders: 2481
Name Flags Part Type FS Type [Label] Size (MB)
-----------------------------------------------------------------------------
hda1 Primary Win95 FAT32 (LBA) 10289.83
hda5 Logical Linux swap 271.44
hda6 Logical Linux ReiserFS 9845.67
# parted /dev/hda print restituisce (attenzione: potrebbe non funzionare e restituire un errore)
Disk geometry for /dev/ide/host0/bus0/target0/lun0/disc: 0.000-19465.523 megabytes
Disk label type: msdos
Minor Start End Type Filesystem Flags
1 0.031 9813.142 primary FAT boot, lba
2 9813.142 19461.555 extended lba
5 9813.173 10072.001 logical linux-swap
6 10072.033 19461.555 logical reiserfs
# fdisk -l /dev/hda emette la tavola delle partizioni nel modo seguente
Disk /dev/hda: 255 heads, 63 sectors, 2481 cylinders
Units = cylinders of 16065 * 512 bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 1251 10048626 c Win95 FAT32 (LBA)
/dev/hda2 1252 2481 9879975 f Win95 Ext'd (LBA)
/dev/hda5 1252 1284 265041 82 Linux swap
/dev/hda6 1285 2481 9614871 83 Linux
dalla quale si vede che la primaria n.2 è in realtà l´estesa che contiene le logiche 5 e 6.
Per quanto riguarda i
mount point ecco il contenuto di
/etc/fstab
/dev/ide/host0/bus0/target0/lun0/part6 / reiserfs defaults,rw 1 1
/dev/ide/host0/bus0/target0/lun0/part5 none swap sw 0 0
proc /proc proc defaults 0 0
/dev/fd0 /floppy auto defaults,user,noauto 0 0
/dev/cdrom /cdrom iso9660 defaults,ro,user,noauto 0 0
NOTA: avremo potuto anche sostituire ai dispositivo
veri tipo /dev/ide/host0/bus0/target0/lun0/part6 anche il relativo link simbolico
/dev/hda6 ottenendo una migliore leggibilità del file.
Costruire il file di descrizione del disco bersaglio e avviare la duplicazione
Ecco un esempio (supponiamo che il nome del file sia
/etc/clone/disco2):
ZAP_ALLPART=1 # tutte le partizioni eventualmente presenti verranno cancellate
PARTITIONING=1 # quelle desiderate saranno create
FORMATTING=1 # e formattate
GRUB_MODE="MBRDSK" # avremo un grub installato sul MBR del nuovo disco (potrebbe non funzionare)
EXTRA_DIRS="/pippo /pluto" # duplicheremo anche delle dirs _nostre_
LIVE=1 # copiamo il S.O. al momento in funzione
Disk=/dev/ide/host0/bus0/target1/lun0 # questo l´abbiamo deciso come descritto sopra
extra_disk=/disc
extra_part="/part"
DESCR="
mnt_p fmt fs dim part_n overwrite opt
/boot 1 ext2 50 1 1
swap 1 swap 256 5 1
/ 1 reiserfs 2000 6 1
/var 1 reiserfs 2000 7 1
/usr 1 reiserfs 3000 8 1
/home 1 reiserfs fill 9 1
"
a questo punto il lavoro difficile è finito e potremo avviare la duplicazione ordinando
# isiclone /etc/clone/disco2
Test del sistema duplicato
Prima di sostituire il primo hd, verificheremo che il sistema clonato si avvi.
Occorre controllare e modificare
/boot/grub/menu.lst per aggiugere il lancio del secondo sistema.
Con riferimento al partizionamento descritto sopra le cose dovrebbero essere messe in questo modo (le ultime 4 righe sono quelle aggiunte per consentire il lancio del sistema duplicato):
*/boot/grub/menu.lst
timeout 10
default 0
title Kernel 2.4.24-std on /dev/ide/host0/bus0/target0/lun0/part6
root (hd0,5)
kernel /boot/bzImage-2.4.24-std root=/dev/ram0 boot=/dev/ide/host0/bus0/target0/lun0/part6 rw init=/linuxrc
initrd /boot/initrd-2.4.24-std.gz
### questa è la parte aggiunta
title Kernel 2.4.24-std on secondo disco
root (hd1,0)
kernel /bzImage-2.4.24-std root=/dev/ram0 boot=/dev/hdb6 rw init=/linuxrc
initrd /initrd-2.4.24-std.gz
adesso montiamo la / del secondo disco e controlliamo il file
etc/fstab creato da isiclone.
# umount -a
# mkdir /mnt/dsk2
# mount -t reiserfs /dev/hdb6 /mnt/dsk2
# cat /mnt/dsk2/etc/fstab
quanto visualizzato dovrebbe essere simile a questo:
/dev/ide/host0/bus0/target1/lun0/part1 /boot ext2 defaults,rw 1 1
/dev/ide/host0/bus0/target1/lun0/part5 none swap sw 0 0
/dev/ide/host0/bus0/target1/lun0/part6 / reiserfs defaults,rw 1 1
/dev/ide/host0/bus0/target1/lun0/part7 /var reiserfs defaults,rw 1 1
/dev/ide/host0/bus0/target1/lun0/part8 /usr reiserfs defaults,rw 1 1
/dev/ide/host0/bus0/target1/lun0/part9 /home reiserfs defaults,rw 1 1
proc /proc proc defaults 0 0
/dev/fd0 /floppy auto defaults,user,noauto 0 0
/dev/cdrom /cdrom iso9660 defaults,ro,user,noauto 0 0
notare il
target1, che significa che il secondo disco è installato come slave sul canale ide primario.
Se tutto è come descritto basterà a questo punto riavviare il sistema scegliendo la seconda voce del menù di GRUB
Sostituzione hard disk e riavvio
Controllato che il secondo sistema funzioni regolarmente siamo pronti a sostituire il primo disco con il secondo.
Occorrerà
- preparare un floppy di boot che consenta anche l´installazione di grub sul MBR del disco hd0 (se questa non fosse già avvenuta a fine duplicazione)
- modificare etc/fstab del secondo disco
- montare la partizione di boot del secondo disco per modificare il menu´ di grub
- spegnere la macchina ed effettuare la sostituzione dell´hd (ATTENZIONE AL BIOS)
- riavviare
Procediamo
preparazione floppy di boot
inserire un dischetto vuoto e digitare
# mkgrub (in alternativa può essere usato
isigrub)
modificare etc/fstab del secondo disco
procedere come sopra descritto ed editare
/mnt/dsk2/etc/fstab sostituendo a
target0 a
target1.
Alla fine NON smontare
/mnt/dsk2 perchè bisogna...
montare la partizione di boot del secondo disco per modificare il menu´ di grub
*# mount -t ext2 /dev/hdb1 /mnt/dsk2/boot *
editare
/mnt/dsk2/boot/grub/menu.lst in modo che appaia così
timeout 10
default 0
title Kernel 2.4.24-std on /dev/hda6
root (hd0,0)
kernel /bzImage-2.4.24-std root=/dev/ram0 boot=/dev/hda6 rw init=/linuxrc
initrd /initrd-2.4.24-std.gz
si osservino le differenze con le ultime quattro righe del
menu.lst precedentemente descritto.
A questo punto si può effettuare la sostituzione dell´hd e riavviare.
Troubleshooting
Cosa può andare storto?
Ad esempio GRUB potrebbe risultare non installato sull` hd. In questo caso occorrerà
- avviare la macchina dal floppy di boot
- scegliere installa GRUB su hd0
- togliere il dischetto e ripartire.