Newsgroup: it.comp.os.linux.sys
Titolo: Debian e raid1

Vorrei realizzare un semplice mirroring di 2 dischi tramite raid 1 software
vorrei utilizzare debian ma non ho ben capito come ottenere una copia 1 a 1
del primo disco con anche il settore di boot incluso. Con la red-hat la cosa
è molto semplice in fase di installazione configuro i due dischi in modo
raid tramite l'interffaccia grafica di setup ma con la debian durante
l'installazione non ho questa possibilità. Ho letto diversi how to che
spiegano come realizzare il mirroring di singole partizioni su sistemi
debian già configurati.. ma non ho trovato niente su come fare
un'installazione di debian per 2 dischi in mirroring completo. Sapete darmi
info in proposito?ve ne sarei immensamente grato.. grazie mille ciao ciao
ps:vorrei un sistema di mirroring completo in maniera tale che nel caso il
primo disco non funzionasse entrasse in azione il secondo che sarebbe una
copia sputata del primo. grazie ancora ciao

[..CUT..]
Ti incollo una mail che ho scritto ad un amico che mi ha fatto piu' o
meno la stessa domanda.
-----------------------------------------------------------------------
Liberatoria: 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 comando ed 
aggiungi le partizioni all'array 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
sda2    101     550
sda3    551     700
in sdb puoi crearti una tabella delle
partizioni fatta cosi:
        Da Cyl  A Cyl
sdb1    1	100
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 futuro 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 sara' in 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
Alcune slide delle serate linuxcafe', organizzate dal LugVi
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
-----------------------------------------------------------------------
Spero possa esserti utile.
CYA
Banana

 
Ciao,
guarda qui:
http://people.debian.org/~blade/install/
Ho fatto un'istallazione così proprio ieri, con la differenza che mi 
sono compilato un kernel bf24 su un'altra macchina Debian.
Saluti
GuidoS1966