Re: Migrazione su partizione RAID
anabik wrote:
On Fri, Dec 12, 2003 at 02:24:50PM +0100, Andrea Dinale wrote:
[...]
Ti invio privatamente una mail che ho inviato ad un amico con la
procedura dettagliata, dovrebbe esserti utile.
Perche' in privato?
Ok ok, dato che il e' una cosa abbastanza lunga, volevo solo evitare un
post "pesante" che magari interessa solo poca gente.
Cmq ho appena ho un po' di tempo pubblico la specie di howto da qualche
parte, cosi posso postare solo il link, e no rompere le sfere a nessuno
con mail troppo pesanti.
Intanto incollo qui la mail che ho spedito privatamente.
ciao
Andrea
-------------------------------------------------------------
Come ti avevo promesso ti invio la lista delle operazioni per la
creazione del raid-software di livello 1 (mirroring) su una macchina
gia' installata.
Liberatoria: non trovo piu' lista che mi ero preparato, e sto andando
a memoria, spero di non saltare pezzi. Se hai dati nel disco backuppali,
non dovrebbero esserci casini, ma non voglio sentirmi in nessun modo
responsabile di danni ai dati, persone, animali, cose, case, cervelli,
automobili, ecosistema...
Prima di cominciare leggiti almeno al capitolo 4 del software raid howto
(il link e' in fondo alla mail), e leggiti tutta questa mail, cosi ti
accorgi se ho saltato qualcosa.
Introduzione:
Non e' necessario che le partizioni siano uguali, basta che siano circa
le stesse dimensioni. Pero' ti consiglio vivamente di usare partizioni
uguali uguali.
Linux non tiene conto della geometria dei dischi, pero' ti consiglio di
impstare gli stessi valori di C,H,S, in entrambi in tutti i dispositivi
che andranno in raid.
Altrimenti potresti arrivare alla fine, quando dai l'ultimo comnado ed
aggiungi le partizioni all'aray e ti trovi con un messaggio di errore,
che ora non ricordo. Pero' ricordo il nervoso che mi e' venuto quando mi
e' capitato :-(
Preparati due floppy di boot con instalato un bootloader in modo da
ripartire senza casini in caso di errore, il bootloader e'
indispensabile per passare i parametri al kernel.
Procedimento:
Suppopniamo che sda sia il disco dove e' installato i sitema operativo e
che sdb sia il disco da usare come mirror
- Crea la tabella delle partizioni in sdb uguale a sda
Se sdb e' piu' grande di sda puoi creare una partizione in piu'
facciamo un esempio:
Supponiamo che i due dischi abbiano un valore uguale di Heads e Sectots,
ma un numero di cilindri diverso, perche' sono dischi di dimensione
diversa.
sda 700 Cyl
sdb 950 Cyl
e che tu voglioa fare un mirroring delle 3 partzioni sda1, sda2 ed sda3
Tabella delle partizioni di sda:
Da Cyl A Cyl
sda1 1 100
sda sda2 101 550
sda3 551 700
in sdb puoi crearti una tabella delle partizioni fatta cosi:
Da Cyl A Cyl
sdb1 1 100
sdb sdb2 101 550
sdb3 551 700
sdb4 701 950
poi fare il raid tra sda1 e sdb1; sda2 e sdb2; sda3 e sdb3. E scegliere
se utilizzare sdb4 da sola o se lasciare lo spazio inutilizzato.
Se usi sdb4 da solo perdi un po' in prestazioni, ma non butti via spazio.
sempre tramite fdisk marca le opartzioni di sdb come fd (raid autodetect)
- Per prima cosa assicurati che il tuo kernel sia compilato con il
supporto raid built-in (basta solo il raid1) e *NON* come modulo, ti
semplifica molto la vita.
- installati i raidtools2 (solita solfa apt-get install raidtools2)
- crei il raidtab, ovvero il file di configurazione del raid ti quoto un
esempio
raiddev /dev/md0
raid-level 1
nr-raid-disks 2
nr-spare-disks 0
chunk-size 64
persistent-superblock 1
device /dev/sdb1
raid-disk 0
device /dev/sda1
failed-disk 1
Per approfondire il significato di queste voci ti invito a consultare il
software raid howto, io ti dico solo il minimo che c'e' da sapere.
raiddev = partizione in raid
il chunk_size e' una cosa molto importante per le prestazioni, tuttavia
non esiste un metodo matematico per ricavare il valore ottimale, dalle
mie prove sperimentali 64 e' risultato un buon valore, ma dipende da
troppe variabili e quindi e' piu' facile fare qualche esperiemnto
persistent-superblock deve essere attivato se hai intenzione di fare il
boot dall'array, non e' sbagliato attivarlo sempre.
Le voci device raid-disk e failed-disk sono molto importanti, devi
specificarle nel giusto ordine.
Dobbiamo fare un passo indietro e fare alcune considerazioni. Hai gia'
un sistema operativo installato in sda, quindi non puoi creare il raid
con sda, devi usare un trucco.
Durante la creazione del raid devi indcicare sda come failed-disk, in
modo da creare l'array senza sda che e' gia' occupato.
Il disco sda non puo' essere il primo della lista (infatti se guardi
come raid-disk 0 c'e' sdb).
- Quando hai il tuo raidtab (che si trova in /etc) completo delle
indicazioni di tutte le partizioni, allora puoi creare il raid, usando
il comando mkraid. In questo caso mkraid /dev/md0, mkraid /dev/md1 ecc.
Per vedere se ha creato l'array ti bastera' fare un cat /proc/mdstat
(tientelo bene in mente questo file, e' il display dello stato di salute
del raid)
- a questo punto mkfs.filesystemchevuoi /dev/md0, poi fai la stessa cosa
per gli altri device raid. Poi mkswap /dev/md2 (se serve)
Tutto ok? Bene!
- Ora l'array e' creato e devi cominciare a "travasare" il contenuto di
sda in md0 ecc.
Supponiamo di avre md0 come root, md1 come home, e md2 come swap,
composte da md0 = sda1 + sdb1; md1 = sda2 + sdb2; md2 = sda3 + sdb3
montiamo le partizioni raid e travasiamo il contenuto
mount /dev/md0 /mnt
cd /mnt
mkdir bin boot etc home proc mnt ecc... ecc...
mount /dev/md1 /mnt/home
poi devi copiare i file da una prtizione all'altra, per una sacco di
motivi che non sto qui a spiegare e' meglio farlo tramite find + cpio
ti sposti nella partizione che vuoi copiare e copi, ad esempio
cd /
find . -xdev -print0 | xargs -0 cpio /mnt/
cd /home
find . -xdev -print0 | xargs -0 cpio /mnt/home
!!! PER LA SINTASSI ESATTA CONTROLLA IL SOFTWARE RAID HOWTO, NON HO
CONTROLLATO CIO' CHE HO SCRITTO E SONO ANDATO A MEMORIA !!!
- Ora hai una copia speculare della tua installazione di sda in md,
bastano solo un po di modifiche ad un paio di file ed e' quasi finito.
Allora il tuo fstab punta su /dev/sdaX, devi modificare il futuo fstab
per puntare ai dispositivi raid. Ma non devi modificare /etc/fstab ma
/mnt/etc/fstab (ti ricordo che attualmente la tua root e' ancora sda1,
ma quando sarain in raid la tua root sara' /dev/md0)
E devi anche sistemare il tuo bootloader, (io conosco solo lilo, se vuoi
grub arrangiati :-))
quindi si modifica /mnt/etc/lilo.conf (sempre per il discorso fatto prima)
devi far puntare la root in md0 e il boot in md0, pero' md0 e l'insieme
di sda1 e sdb1 e quindi il masterbootrecord che attualmente si trova in
sda non verra sovrascritto, quindi devi usare l'opzione raid-extra-boot
= /dev/sda,/dev/sdb (o passare l'opzione -x /dev/sda,/dev/sdb).
Cosi fai in modo che il settore di boot venga scritto in entambi i dischi.
Pero' non e' ancora il momento di eseguire lilo.
Devi prima cambiare la tua root da sda1 a md0, hai due modi,
1) fare una modifica "intermedia" al lilo.conf e settare come root
/dev/md0 e come boot lasciare /dev/sda, quindi se riavvi parti con il
disco sda, come dispositivo di boot, ma la root sara' caricata in
/dev/md0. A quel punto puoi fare la modifica finale al file lilo.conf e
segnare anche il boot in /dev/md0
(nota: puoi anche non cambiare nulla al lilo.conf, ma passare il
parametro root=/dev/md0 al kernel in fase di boot)
2) Fare semplicemente chroot /mnt/
Qualsiasi delle due ( o tre) strade che hai scelto, se tutto e' andato
bene adesso ti trovi con la root directory in una partizione raid.
Ora completi le modifiche al bootsector eseguendo lilo, dovrebbe dirti
che ha scritto il settore di boot in tre posti md0, sda ed sdb
- Ora per controllare che tutto sia ok, ti conviene provare a fare un
reboot. se tutto e' ok, il tuo raid e' funzionante, anche se non c'e'
ancora sda.
- PASSO MOLTO IMPORTANTE - devi marcare le partizioni di sda come fd,
altrimenti non fa il boot (lo hai gia' fatto anche con quelle di sdb
vero?, ancora all'inizio quando hai creato la partition table de sdb vero?)
Mi raccomando di rendere bootabili entrambe le partizioni sda1 e sdb1.
Una volta mi sono dimenticato di rendere bootabile la seconda partzione
e ci ho perso un sacco di tempo.
- Adesso ti basta aggiungere sdaX all'array
raidhotadd /dev/md0 /dev/sda1
raidhotadd /dev/md1 /dev/sda2
raidhotadd /dev/md2 /dev/sda3
e controlli la sincronizzazione dell'array sempre con cat /proc/mdstat
- Ora per completare in bellezza, fai un po' di test
spegni la macchina, togli la spina di sda e provi a fare il boot.
se tutto funziona spegni riattacca sda.
ricostrisci l'array
raidhotadd /dev/md0 /dev/sda1
raidhotadd /dev/md1 /dev/sda2
raidhotadd /dev/md2 /dev/sda3
spegni la macchina, stacca sdb e ripeti la stessa cosa.
se sei arrivato fino a qui ed hai capito tutto quello che ho scritto nel
mio strano italiano e se sei riuscito a sopportare tutti i miei errori
ortografici e grammaticali COMPLIMENTI!!
- Errori frequenti:
Dimenticarsi il persistent-superblock
Dimenticarsi di marcare come fd le partizioni
Dimenticarsi il flag bootabile delle partizioni di boot
Documetazione:
Il software raid howto:
http://www.pluto.linux.it/ildp/HOWTO/Software-RAID-HOWTO.html
Le mie slide del linuxcafé (lo so che non ti servono, ma volevo fare lo
sborone!)
http://www.vicenza.linux.it/linuxcafe/2003/materiale/7/index.html
man raidtab
Questo e' quanto e, dato che e' venerdi sera, me ne vado a fare un po'
di festa!
Buon lavoro
Andrea Dinale
Reply to: