Marcus Schopen <marcus dot schopen at uni dash bielefeld dot de>
Stand: 18.06.2002
Giuseppe Barichello <beppuz at supereva dot it>
Italian translation: 07.12.2003
Flavio Boniforti <boniforti dot f |at| gmail dot com>
Italian translation: 17.08.2004
Se sembrano ancora troppi 110 € circa per un controller IDE hardware RAID (p. es. Promise Fasttrack/100 TX2), si può pensare alla variante economica del RAID Software per harddisk SCSI ed IDE. Il seguente breve "HOW TO" descrive un RAID-1 avviabile su Debian Woody.
Prima di procedere è consigliabile effettuare un backup del Sistema (DAT, CD, Partition Image etc.). Nonostante la soluzione descritta sia praticabile su un Sistema avviato senza effettuarne un backup, è insensato correre inutili rischi.
Il presente HOW TO è estendibile anche al RAID-5. Ulteriori indicazioni si trovano ai link in fondo alla pagina.
Il secondo harddisk è consigliato connetterlo al secondo canale IDE/SCSI e jumperarlo come Master (purtroppo non è questo il caso).
Parto dal presupposto che sia già stato installato Debian Woody con kernel 2.4.x o che l'utente sappia installare tale Sistema. Chi a questo punto volesse installare un nuovo Sistema, può utilizzare i dischetti di boot con kernel 2.4.x e partizionare durante l'installazione entrambi i dischi allo stesso identico modo. L'installazione procederà normalmente sul primo disco fisso (hda).
I punti di "mount" sul primo disco (hda) sono i seguenti:
Punto di mount |
Partizione hda (primo disco) |
/ |
/dev/hda4 |
/boot |
/dev/hda1 |
/usr |
/dev/hda5 |
/home |
/dev/hda6 |
/var |
/dev/hda7 |
/tmp |
/dev/hda8 |
/vol |
/dev/hda9 |
Il secondo disco (hdb) deve essere partizionato in modo speculare. Una volta partizionati entrambi i dischi allo stesso modo (p. es. con cfdisk), è necessario impostare tutte le partizioni del secondo disco (hdb) - tranne la partizione di swap - con il tipo "fd" (= Linux raid autodetect):
Per il momento non è necessario formattare il secondo disco (hdb).
Si rende necessario crearci un kernel personalizzato, visto che nel kernel 2.4.18 di Debian il RAID viene supportato soltanto come modulo. Il kernel lo scarichiamo da ftp.it.kernel.org e lo scompattiamo sotto /usr/src/ nella cartella "linux".
Entriamo nella cartella "/usr/src/linux" ed avviamo la configurazione con "make menuconfig". La configurazione relativa al RAID-1 dovrebbe rispecchiare questa:
Ora lanciamo la sequenza di comandi
make dep; make clean; make bzlilo; make modules; make modules_install; lilo
ed il nuovo kernel dovrebbe essere pronto. Riavviamo il computer giusto per verificare che il nuovo kernel funzioni senza problemi.
Informazioni aggiuntive: per poter compilare il kernel devono essere installati almeno questi pacchetti: gcc, make, libc6-dev e libncurses5-dev. Eventuali ulteriori dipendenze saranno riconosciute e gestite in automatico da apt.
Ora ci installiamo i RAID2 Tools:
apt-get install raidtools2
Procediamo alla creazione di /etc/raidtab. La seguente tabella riassuntiva ci aiuta a mantenere una visione corretta tra RAID e partizioni:
Punto di mount |
Partizione RAID |
Partizione hda (primo disco) |
Partizione hdb (secondo disco) |
/ |
/dev/md0 |
/dev/hda4 |
/dev/hdb4 |
/boot |
/dev/md1 |
/dev/hda1 |
/dev/hdb1 |
/usr |
/dev/md2 |
/dev/hda5 |
/dev/hdb5 |
/home |
/dev/md3 |
/dev/hda6 |
/dev/hdb6 |
/var |
/dev/md4 |
/dev/hda7 |
/dev/hdb7 |
/tmp |
/dev/md5 |
/dev/hda8 |
/dev/hdb8 |
/vol |
/dev/md6 |
/dev/hda9 |
/dev/hdb9 |
E' importantissimo che il primo disco (hda) sie ancora marchiato come "failed-disk"!
# example /etc/raidtab |
Nota: la partizione di swap non entra in RAID. Le partizioni di swap vengono trattate nativamente dal kernel in maniera simile ad un RAID di tipo "stripe".
Ora impostiamo il RAID su ogni singola partizione. Il primo disco (hda) non viene ancora considerato in quanto marchiato come "failed-disk".
bob:~# mkraid /dev/md0
bob:~# mkraid /dev/md1
bob:~# mkraid /dev/md2
bob:~# mkraid /dev/md3
bob:~# mkraid /dev/md4
bob:~# mkraid /dev/md5
bob:~# mkraid /dev/md6
Procediamo alla formattazione delle singole partizioni RAID sul secondo disco (hdb) con filesystem ext3:
bob:~# mkfs.ext3 /dev/md0
bob:~# mkfs.ext3 /dev/md1
bob:~# mkfs.ext3 /dev/md2
bob:~# mkfs.ext3 /dev/md3
bob:~# mkfs.ext3 /dev/md4
bob:~# mkfs.ext3 /dev/md5
bob:~# mkfs.ext3 /dev/md6
Copiamo l'intero Sisyema dal primo disco (hda) sul disco con il sistema RAID (hdb). A questo scopo creiamo in /mnt la struttura di directory che rispecchia le nostre partizioni:
bob:~# mkdir /mnt/root
bob:~# mkdir /mnt/boot
bob:~# mkdir /mnt/usr
bob:~# mkdir /mnt/home
bob:~# mkdir /mnt/var
Ora eseguiamo il "mount" di tutte le partizioni su questi punti di mount:
bob:~# mount /dev/md0 /mnt/root
bob:~# mount /dev/md1 /mnt/boot
bob:~# mount /dev/md2 /mnt/usr
bob:~# mount /dev/md3 /mnt/home
bob:~# mount /dev/md4 /mnt/var
e copiamo l'intero Sistema, tralasciando soltanto /mnt/, /proc/ e ad esempio nfs, nelle directory appena montate:
bob:~# cp -a /boot/ /mnt/boot/
bob:~# cp -a /usr/ /mnt/usr/
bob:~# cp -a /home/ /mnt/home/
bob:~# cp -a /var/ /mnt/var/
Ora copiamo la partizione / root:
bob:~# cp -a /bin/ /mnt/root/
bob:~# cp -a /dev/ /mnt/root/
bob:~# cp -a /etc/ /mnt/root/
bob:~# cp -a /initrd/ /mnt/root/
bob:~# cp -a /lib/ /mnt/root/
bob:~# cp -a /opt/ /mnt/root/
bob:~# cp -a /root/ /mnt/root/
bob:~# cp -a /sbin/ /mnt/root/
bob:~# cp -a /vmlinuz* /mnt/root/
bob:~# cp /*.* /mnt/root/
In funzione della struttura si dovranno tralasciare (o aggiungere) alcune directory, ma il principio dovrebbe essere stato chiarito.
Ora dobbiamo solamente creare i singoli punti di mount sulla partizione RAID di root (/mnt/root/):
bob:~# mkdir /mnt/root/boot
bob:~# mkdir /mnt/root/home
bob:~# mkdir /mnt/root/tmp
bob:~# mkdir /mnt/root/usr
bob:~# mkdir /mnt/root/var
bob:~# mkdir /mnt/root/vol
Infine, non scordiamoci la directory /proc:
bob:~# mkdir /mnt/root/proc
Ci si deve assolutamente accertare che il Sistema presente sul disco in RAID (hdb) sia identico a quello presente sul primo disco (hda). Dovessimo scordarci dei dati (file o cartelle che siano) a questo punto della procedura, questi risulteranno irrecuperabili successivamente.
Sulla partizione root del disco in RAID (hdb) adeguiamo "fstab" su "/mnt/root/etc/" come segue:
# /etc/fstab: Tabella dei filesystem collegati. |
Ci creiamo un dischetto d'avvio con il quale avviare il Sistema dal RAID sul secondo disco fisso (hdb):
dd if=/vmlinuz of=/dev/fd0 bs=2k
rdev /dev/fd0 /dev/md0
rdev -r /dev/fd0 0
rdev -R /dev/fd0 1
ed avviamo il Sistema da questo dischetto. Prima del riavvio è consigliabile "smontare" tutte le partizioni md montate in precedenza sotto /mnt. Il Sistema dovrebbe ora avviarsi dalle partizioni RAID presenti sul secondo disco (hdb). Il comando "mount" ci darà:
bob:~# mount
/dev/md0 on / type ext3 (rw,errors=remount-ro)
proc on /proc type proc (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/md1 on /boot type ext3 (rw)
/dev/md2 on /usr type ext3 (rw)
/dev/md3 on /home type ext3 (rw)
/dev/md4 on /var type ext3 (rw)
/dev/md5 on /tmp type ext3 (rw)
/dev/md6 on /vol type ext3 (rw)
Se questo non è il nostro caso, riavviamo il Sistema da hda e verifichiamo tutti i passaggi precedenti.
Proseguite con il prossimo passaggio (inserimento del primo disco (hda) nell'array RAID) solo quando siete assolutamente sicuri che il Sistema funziona in maniera totalmente affidabile da RAID. Successivamente, infatti, tutti i dati del primo disco (hda) saranno irrimediabilmente perduti. Esisterà soltanto la copia sul disco hdb.
Premessa:
Dapprima impostiamo mediante "cfdisk" tutte le partizioni del primo disco (hda) al tipo "fd" (tranne la partizione di swap ovviamente)
In secondo luogo, tutte le voci "failed-disk" del disco hda nel file /etc/raidtab devono essere sostituite con "raid-disk"
Ora aggiungiamo il primo disco all'array RAID mediante "raidhotadd":
bob:~# raidhotadd /dev/md0 /dev/hda4
bob:~# raidhotadd /dev/md1 /dev/hda1
bob:~# raidhotadd /dev/md2 /dev/hda5
bob:~# raidhotadd /dev/md3 /dev/hda6
bob:~# raidhotadd /dev/md4 /dev/hda7
bob:~# raidhotadd /dev/md5 /dev/hda8
bob:~# raidhotadd /dev/md6 /dev/hda9
In funzione della dimensione delle singole partizioni, la sincronizzazione dei due dischi può avere durata differente. La situazione attuale è consultabile in tempo reale mediante il comando "cat /proc/mdstat":
bob:~# cat /proc/mdstat
Personalities : [linear] [raid1] [multipath]
read_ahead 1024 sectors
md1 : active raid1 hda1[1] hdb1[0]
15936 blocks [2/2] [UU]
md2 : active raid1 hda5[1] hdb5[0]
13671168 blocks [2/2] [UU]
md3 : active raid1 hda6[1] hdb6[0]
13671168 blocks [2/2] [UU]
md4 : active raid1 hda7[1] hdb7[0]
9767424 blocks [2/2] [UU]
md5 : active raid1 hda8[1] hdb8[0]
489856 blocks [2/2] [UU]
md6 : active raid1 hda9[2] hdb9[0]
29294400 blocks [2/1] [U_]
[=====>...............] recovery = 25.1% (7364608/29294400) finish=144.4min speed=2528K/sec
md0 : active raid1 hda4[1] hdb4[0]
10747392 blocks [2/2] [UU]
unused devices: <none>
E' consigliabile attendere il completamento della sincronizzazione di tutte le partizioni prima di riavviare. In alcuni casi potrebbe durare anche alcune ore.
Procediamo con la creazione di un nuovo file "lilo.conf" per permettere al Sistema di avviarsi direttamente da RAID:
# /etc/lilo.conf - con supporto RAID |
e la scriviamo nel Master Boot Record (MBR) del disco hda col comando:
bob:~# lilo -C /etc/lilo.conf
Chi volesse, può anche creare un "lilo.conf" per il disco hdb, in modo da poter avviare il Sistema direttamente da hdb nel caso dovesse guastarsi il primo disco (hda). A questo scopo creiamo il file "lilo.conf.hdb" e modifichiamo la riga "boot=/dev/hda" in "boot=/dev/hdb". Eseguiamo
bob:~# lilo
-C /etc/lilo.conf.hdb
per scrivere le informazioni di boot nel MBR di hdb. Comparirà un avviso: »/dev/hdb is not on the first disk«, ma questo non ci deve preoccupare, in quanto in caso di backup questo disco diventerà il primo disco del Sistema. Per farlo sarà evidentemente necessario collegarlo al primo canale (E)IDE!
In caso di guasto di hda dovrebbe comunque essere sufficiente riavviare da hdb con il dischetto di avvio creato in precedenza.
Arrestiamo il server, scolleghiamo il primo disco (hda) e colleghiamo al suo posto (primo canale IDE) il secondo disco (hdb). Avviamo il server, il quale dovrebbe avviarsi da hdb (che ora però è diventato hda). Qualora non dovesse funzionare, utilizziamo il dischetto di boot creato in precedenza. Spegniamo nuovamente il server, ricolleghiamo hda e -dopo il riavvio - ricolleghiamo a mano con "raidhotadd" le partizioni di hda al RAID-Array.
Il Sistema non si avvia più con il RAID software: aiuto, cosa faccio?
In questa caso è sempre possibile avviare con il "Rescue Disc" di Debian, dal quale con ALT-F2 si può aprire una shell e montare la partizione di root dei due dischi RAID (hda4 o hdb4) con il comando "mount /dev/hda4 /mnt".
Nel file "fstab" in "/mnt/etc/" sostituiamo tutti i devices md con i corrispondenti hda o hdb (vedi la tabella di corrispondenza presentata più sopra). Poi si riavvia dal dischetto che ci siamo creati in precedenza ed al prompt di LiLo digitiamo "linux root=/dev/hda4". Il Sistema dovrebbe ora avviarsi dal disco hda o hdb senza RAID.
La velocità dei dischi può spesso essere incrementata con "hdparm":
bob:~# apt-get install hdparm
prima:
bob:~# hdparm -Tt /dev/hda
Timing buffer-cache reads: 128 MB in 0.46 seconds =278.26 MB/sec
Timing buffered disk reads: 64 MB in 17.25 seconds = 3.71 MB/sec
dopo l'ottimizzazione:
bob:~# hdparm -Tt /dev/hda
Timing buffer-cache reads: 128 MB in 0.46 seconds =278.26 MB/sec
Timing buffered disk reads: 64 MB in 2.54 seconds = 25.20 MB/sec
Una descrizione dettagliata di "hdparm" si trova qui.
Variazioni e critiche costruttive a: marcus dot schopen at uni dash bielefeld dot de
Have fun!