[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: