RAID Software : Proteggere i dati con l’aiuto del kernel (3 di 5)

linux

Nel precedente articolo sono stati illustrati i metodi per la messa in RAID di partizioni nei diversi livelli disponibili.
Di seguito viene affrontata la messa in RAID della partizione root del sistema, sia nel caso di una nuova installazione, sia nel caso di un’installazione già esistente. Il tutto sempre grazie al software Linux mdadm.

Mettere in RAID la partizione root

Sino a questo punto sono state illustrate soluzioni RAID applicate a partizioni diverse da root (intesa come “/”, non come la directory /root), Linux però, offre anche la possibilità di montare la partizione root su una device RAID.
Le situazioni di partenza possono essere due : costruire un sistema partendo da una situazione vergine, oppure disporre di un sistema che non può essere cancellato, ma che si vuole mettere sotto RAID.
Se da una situazione vergine ogni distribuzione offre la possibilità di impostare in fase di configurazione la partizione root in modo che risieda su una device RAID, migrare un sistema esistente può risultare leggermente più complicato.
Verranno descritti entrambi le situazioni possibili, supponendo che il sistema possieda due dischi da 300 Giga collegati al canale IDE primario (quindi hda e hdb) e che si voglia mettere la partizione root sotto RAID 1 (o mirror).

Situazione 1 : Nuova installazione con RAID sulla partizione root creato attraverso l’installer

La maggior parte delle distribuzioni offre la possibilità di configurare in fase di installazione la partizione root in modo che risieda sotto una device RAID. I passi descritti e gli screenshot associati si riferiscono all’installer di Debian Sarge 3.1, ma concettualmente sono applicabili a tutte le distribuzioni.
Verranno descritte solo le fasi che riguardano la configurazione dei dischi in quanto a parte queste, l’installazione su RAID non si differenzia in alcun modo da una standard.
Attraverso il tool di configurazione dei dischi, andranno per prima cosa create per ogni disco una partizione di tipo “Volume fisico per il RAID” e la relativa swap :

Screenshot 1

Screenshot 1

Screenshot 2

Screenshot 2

Successivamente, selezionando “Configurare il RAID software” si accederà al menu di configurazione multidisk per il RAID software :

Screenshot 3

Screenshot 3

Selezionando l’opzione “Creare un device multidisk”, si potrà scegliere il tipo di multidisk da creare. Come stabilito, la scelta che verrà adottata verterà sul RAID 1, o mirror :

Screenshot 4

Screenshot 4

A questo punto andranno indicate al programma di installazione il numero di partizioni attive nel RAID (nel nostro caso 2) :

Screenshot 5

Screenshot 5

Ed il numero di device “spare”, utile soprattutto nei livelli di RAID 4 e 5, e che in questo caso potrà quindi rimanere 0 :

Screenshot 6

Screenshot 6

Per completare le informazioni sul RAID necessarie al programma di installazione, andranno indicate le partizioni attive per il RAID. Le due che sono state indicate durante il partizionamento con il tipo “Volume fisico per il RAID” :

Screenshot 7

Screenshot 7

Sulla neo creata device “RAID 1 dispositivo n° 0” andrà infine creato il filesystem ext3 associato alla partizione root, e terminate queste modifiche, la situazione dei dischi sarà la seguente :

Screenshot 8

Screenshot 8

Per completare il tutto, sarà necessario “Terminare il partizionamento e scrivere i cambiamenti sui dischi”, procedendo poi per il resto dell’installazione nella maniera consueta.

Situazione 2 : Sistema preesistente, creazione del RAID sulla partizione root attraverso una distribuzione “Live”

Nell’eventualità in cui non si possa cancellare un’installazione esistente e si voglia comunque fare in modo che la partizione root sia sotto RAID verrà proposta tra le tante disponibili una soluzione che prevede l’uso di una distribuzione “Live”, necessaria per l’avvio del sistema con la partizione root non montata, e di un disco USB, necessario per il backup dei dati presenti sulla partizione root.
A sistema avviato, una volta collegato il disco USB, andranno copiate in una cartella nominata “oldroot” le cartelle di sistema ritenute critiche :

$ mkdir /media/usb0/oldroot
$ cp -Rp /bin  /boot /dev /etc /home /lib /mnt /opt  /root  /sbin /tmp /usr /var /media/usb0/oldroot

L’opzione -Rp del comando cp consente di percorrere ricorsivamente le directory e di copiarne il contenuto mantenendo permessi, proprietario, gruppo e date.
Le cartelle indicate sono quelle giudicate “critiche”, ma nulla vieta in presenza di altri dati sensibili di copiarli nello stesso sistema.
Essenziale è comunque avere nella directory /meda/usb0/oldroot del disco USB il contenuto attuale del sistema.
Il sistema andrà riavviato quindi con una distribuzione “Live” recente come “Knoppix”, “Ubuntu” o qualsiasi altra tra le numerose disponibili.
Una volta avviato il sistema si dovrà creare la device virtuale md0 composta dalle due partizioni appartenenti ai diversi dischi :

$ mdadm --create /dev/md0 --level=1 --raid-disks=2 /dev/hda1 /dev/hdb1
mdadm: array /dev/md0 started.

Terminata la sincronizzazione, sarà possibile creare il filesystem sulla device md0 :

$ mke2fs -j /dev/md0

e montarlo su una cartella qualsiasi, copiandoci sopra le cartelle precedentemente salvate sul disco esterno :

$ mkdir /target
$ mount /dev/md0 /target
$ cd /media/usb0/oldroot
$ cp -Rp /bin  /boot /dev /etc /home /lib /mnt /opt  /root  /sbin /tmp /usr /var /target

Alla struttura delle cartelle della partizione root andranno aggiunte le cartelle virtuali di sistema /proc e /sys :

$ mkdir /target/proc
$ mkdir /target/sys

Per completare i lavori ed installare il bootloader che dovrà avviare il sistema dalla device RAID, sarà sufficiente lanciare una shell interattiva nella cartella /target attraverso il comando chroot :

$ chroot /target

E dopo aver montato il filesystem /proc :

$ mount -t proc - /proc

Editare il file /boot/grub/menu.lst (supponendo che sia grub il bootloader installato nel sistema) con le specifiche necessarie all’avvio dalla device RAID :

default	0
timeout	5
color		cyan/blue	white/blue
 
title		Debian GNU/Linux , kernel 2.6.8-2-386
root		(hd0,0)
kernel	/boot/vmlinuz-2.6.8-2-386 root=/dev/md0 ro
initrd	/boot/initrd.img-2.6.8-2-386 root=/dev/md0 ro
savedefault
boot
 
title		Debian GNU/Linux , kernel 2.6.8-2-386 (Single)
root		(hd0,0)
kernel	/boot/vmlinuz-2.6.8-2-386 root=/dev/md0 ro single
initrd	/boot/initrd.img-2.6.8-2-386 root=/dev/md0 ro
savedefault
boot

Anche se a differenza di lilo, grub non necessita di essere reinstallato ogni volta che ne si modifica il contenuto del file di configurazione, lanciare il comando grub-install aiuta a comprendere come il bootloader debba risiedere comunque nel master boot record del disco primario, visto che sarà quella la posizione da cui il BIOS avvierà il sistema operativo :

$ grub-install /dev/hda
Installation is finished. No errors reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the line is incorrect,
fix it and re-run the script 'grub-install'.
 
(hd0)	/dev/hda
(hd1)	/dev/hdb

Ultimo passo da eseguire prima del riavvio è la modifica nel file /etc/fstab della riga che fa riferimento alla partizione /, in modo che non venga più montata su /dev/hda1 ma su /dev/md0. Il contenuto di tale file dovrà quindi essere il seguente :

$ cat /etc/fstab
# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc		/proc	proc	defaults			0       0
/dev/md0	/	ext3	defaults,errors=remount-ro	0       1
/dev/hda2	none	swap	sw				0       0
/dev/hdb2	none	swap	sw				0       0

A questo punto il sistema è pronto ad essere riavviato ed utilizzato.

Verifica del funzionamento

In entrambe le situazioni, per verificare che le operazioni siano andate a buon fine, sarà sufficiente controllare attraverso il comando mount che la device /dev/md0 sia montata nella cartella / :

$ mount
/dev/md0 on / type ext3 (rw,errors=remount-ro)
...
...

L’output conferma che tutto funziona come dovrebbe.

Considerazione finale sulle aree di swap

Anche se potrebbe risultare immediato pensare che volendo effettuare un mirror dell’intero sistema, anche la partizione di swap debba essere duplicata, non c’è niente di più sbagliato.
Le aree di swap del sistema infatti sono gestite a livello di kernel ed è il kernel a sfruttarle a seconda delle necessità. Mettere in RAID 1 una partizione di swap comporterebbe una perdita di performance notevole. Nel momento in cui il kernel scrivesse sulla partizione di swap primaria un’informazione, il sistema dovrebbe attendere che tale informazione venisse replicata anche sulla partizione swap secondaria. Tale informazione però non verrebbe mai utilizzata da nessuno ! Se a questo si aggiunge che il contenuto della partizione di swap è volatile, si capisce come sia molto più sensato indicare al sistema due aree di swap distinte, una sul primo disco ed una sul secondo, dichiarandole attraverso l’installer (si veda lo screenshot-8) o modificando a mano il file /etc/fstab in modo che contenga le seguenti righe :

/dev/hda2       none            swap    sw              0       0
/dev/hdb2       none            swap    sw              0       0

In questo modo il kernel avrà due aree swap a cui far riferimento, e le performance ne gioveranno.

Conclusioni

Nel prossimo articolo verrà illustrato il primo dei due “case study”, una soluzione RAID 1 con Hard Disk ide “a cassetto”.

Note

Questa serie di articoli è apparsa in origine nel libro edito da Duke Italia Clustering e raid software allegato all’edizione italiana di Linux Journal dell’Ottobre 2006.

Da sempre appassionato del mondo open-source e di Linux nel 2009 ho fondato il portale Mia Mamma Usa Linux! per condividere articoli, notizie ed in generale tutto quello che riguarda il mondo del pinguino, con particolare attenzione alle tematiche di interoperabilità, HA e cloud.
E, sì, mia mamma usa Linux dal 2009.

Tags: , , , ,