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

Re: [riminilug-general] Raid 1



Francesco Zoffoli wrote:

Per realizzare un raid1 (mirror) con due dischi da 40gb cosa devo fare?
Ci posso mettere sopra tutto? (/boot  - /home  - /  - ecc..) ?
Una volta realizzato come lo controllo?
Per sostituire uno dei 2 dischi?

Grazie


Se realizzi raid hardware, allora il devi compilare il kernel per gestire la controller.

Per realizzare un raid software, il discorso e' un po' complesso da fare tramite mail, ma ci provero' ugualmente.
NOTA: PRIMA DI PROCEDERE FAI IL BACKUP DEI DATI!!!
Innanzitutto ci sono diverse scuole di pensiero su come collegare i dischi alla controller ide. Io preferisco collegare i due dischi settati entrambi come master su IDE0 e IDE1. In tal modo Linux vede i due dischi come /dev/hda e /dev/hdc (giusto per intenderci). L'eventuale CD puoi metterlo come slave su IDE1 (/dev/hdd). Se sei piu' fortunato e hai dischi SCSI, non hai questo problema. Per prima cosa devi compilare il kernel (se non e' gia' compilato) per supportare il raid1 software. Se hai gia' linux funzionante su un disco, puoi partizionare il 2^ disco in modo identico al primo (fdisk /dev/hdc). Per ogni partizione cambia il tipo della partizione da 83 a fd (riconoscimento in automatico del raid al boot).
Puoi fare lo stessa cosa anche per le partizioni di swap (da 82 a fd).
Verifica che il raid 1 sia attivo a livello di kernel con il comando cat /proc/mdstat. Dovresti vedere una riga che indica una Raid Personality a 1 (o qualcosa del genere) Crea il file /etc/raidtab definendo le partizioni sul disco dove hai linux funzionante (di solito /dev/hdax) come fault. Per rendere piu' semplice la gestione, ti consiglio di definire /dev/mdx formato dalle partizioni /dev/hdax e /dev/hdcx
Consulta man raidtab
Es:
# partizione /boot
raiddev /dev/md1
   raid-level                     1
   nr-raid-disk                 2
   persistent-superblock  1
   chunk-size                  64
   device                         /dev/hdc1
   raid-disk                      0
   device                         /dev/hda1
   failed-disk                   1

# partizione /
raiddev /dev/md5
   raid-level                     1
   nr-raid-disk                 2
   persistent-superblock  1
   chunk-size                  64
   device                         /dev/hdc5
   raid-disk                      0
   device                         /dev/hda5
   failed-disk                   1

# partizione /home
raiddev /dev/md6
   raid-level                     1
   nr-raid-disk                 2
   persistent-superblock  1
   chunk-size                  64
   device                         /dev/hdc6
   raid-disk                      0
   device                         /dev/hda6
   failed-disk                   1


Crea il raid con il comando mkraid /dev/mdx per ogni partizione che vuoi mettere in raid. Cosi' facendo hai delle partizioni raid degradate, in quanto lavorano solo su un disco (per il momento). Crea i file system che ritieni opportuno sulle partizioni raid (es: mkreiserfs /dev/mdx oppure mkfs.ext3 /dev/mdx)
Monta ciascuna partizione su /mnt e copia i dati da /dev/hdax
es:
# mount /dev/md5 /mnt
# cd /
# find . -xdev -print | cpio -pdumB /mnt
# find . -xdev -type f  -exec diff -q {} /mnt/{} \;
#umount /mnt

L'esempio copia la directory di root sulla partizione raid /dev/md5, limitando al solo file system dove e' montata la root. Opzionalmente puoi fare una diff per verificare che tutto sia andato ok. Nell'esempio ho limitato la diff ai soli "regular files" per evitare falsi errori che diff puo' stampare nel caso che effettui diff -rq per rami di sottodirectory. Prima di umount puoi fare una df -m come ulteriore controllo fra il file system da copiare e quello copiato.

Ovviamente non devi fare nulla per le partizioni di swap, ma solo mkswap /dev/mdx.

Ammesso che la / sia associata a /dev/md5, devi fare:
# mount /dev/md5 /mnt
# vi /mnt/etc/fstab
--> modificare i device da /dev/hdax a /dev/mdx nella mount del sistema operativo.
# umount /mnt

A questo punto la cosa piu' igienica e' procurarsi un floppy e poi copiarci il kernel, impostando il device di boot sul device raid. Ipotizzando sempre che / sia associato a /dev/md5, allora:
# fdformat /dev/fd0u1440
# dd if=/boot/vmlinuz of=/dev/fd0
# rdev /dev/fd0 /dev/md5
# rdev -r /dev/fd0 0
# rdev -R /dev/fd0 1

Cosi' facendo copi il kernel (ammesso che sia in /boot/vmlinuz) sul floppy, impostando il device di root come /dev/md5. Prova a fare un boot impiegando il floppy, dovresti bootare da raid e vedere le partizioni montate sul raid.
Puoi dare una df e/o una mount per verificare che stia procedendo tutto ok!
Puoi anche vedere cosa dice cat /proc/mdstat
Non ti preoccupare se noti che il raid e' degradato. Ora, se tutto e' ok, e' il momento di dare in pasto /dev/hda al raid.
Con fdisk /dev/hda cambia il tipo di partizione da 83 (o 82) a fd.
Aggiungi ciascuna partizione del disco hda al raid: raidhotadd /dev/mdx /dev/hdax e osserva /proc/mdstat. Noterai dell'attivita' sui dischi. Viene creato a caldo il raid.

Una volta che i dischi fisici costituenti il raid sono allineati, viene l'operazione piu' delicata. Modificare le configurazione per il boot del sistema.
Io ho esperienza con Lilo.
Conviene creare 2 configurazioni di lilo e conviene rinominare la configurazione originale. Cosi' facendo se digitiamo lilo, da un errore perche' non trova piu' /etc/lilo.conf
# cd /etc
# cp -ipd lilo.conf lilo.conf.hda
# cp -ipd lilo.conf lilo.conf.hdc
# mv -i lilo.conf lilo.conf.bad

Modifica in lilo.conf.hda:
boot=/dev/hda
map=/boot/map.hda
root=/dev/mdx    (es root=/dev/md5)
bios=0x80

In analogia modifica lilo.conf.hdc, sostituendo le ricorrenze hda in hdc.

Inizializza i 2 master boot record:
lilo -C /etc/lilo.conf.hda
lilo -C /etc/lilo.conf.hdc

Se e' andato tutto ok, puoi provare fare il boot (ovviamente togli il floppy) e verifica che si avvii da /dev/mdx.
Ovviamente verifica che le partizioni montate siano tutte quelle raid

In seguito se aggiungi un'immagine per il boot, devi modificare entrambe le configurazioni /etc/lilo.conf.hd? e rilanciare i due comandi lilo -C /etc/lilo.conf.hd?

Se riesci ancora a riavviare regolarmente il sistema, puoi fare uno shutdown e togliere uno dei due dischi (es hdc). Verifica che il sistema parta ancora. Spegni, ricollega hdc, riparti. Puoi verificare che il raid si e' degradato (cat /proc/mdstat). Allora raidhotadd /dev/mdx /dev/hdcx per ogni partizione raid (swap compreso). Al termine dalla ricostruzione delle partizioni raid, spegni, scollega hda e riparti. Verifica che sia tutto ok. Spengi, ricollega hda e riparti. Se tutto ok ricostruisci il raid (raidhotadd /dev/mdx /dev/hdax per ogni partizione raid - swap compresi).

Non ti spaventare delle operazioni che ti ho descritto: sono piu' facili di quello che sembrano. Ovviamente se sul sistema su cui devi intervenire hai una installazione gia' in produzione, devi muoverti con i "piedi di piombo" prestando molta attenzione. Se invece hai un sistema appena installato, se qualcosa dovesse andare storto, allora non dovrebbe dispiacerti troppo... alla peggio riparti da "zero".

Nota: - non tutte le distribuzioni gestiscono il raid SW in fase di installazione di Linux. Per intenderci il boot da cd non gestisce il kernel con i moduli raid compilati, per cui e' necessario installare Linux normalmente e poi procedere alla creazione del raid come ho descritto.

Nota: - ho scritto questa mail in base a cio' che mi ricordavo da installazioni effettuate e funzionanti. Spero di non aver tralasciato nulla.

Have fun
Umberto.