Laboratorio

Modulo 7 - Sistemi operativi di rete

Esperienza su software RAID

Per la realizzazione di questo modulo useremo Netkit4TIC. Scarica il tarball (5KB) contenente lo script lab che genera l'esercitazione.

In questa sezione faremo riferimento al RAID software implementato da GNU/Linux e al nuovo pacchetto mdadm che ne gestisce l'amministrazione. Il guest kernel è stato compilato con:

CONFIG_MD=m
CONFIG_BLK_DEV_MD=y
CONFIG_MD_LINEAR=y
CONFIG_MD_RAID0=y
CONFIG_MD_RAID1=y
CONFIG_MD_RAID5=y
CONFIG_MD_MULTIPATH=y

Tra i documenti da leggere ci sono SATA-RAID-debian-for-2.6.html (per nulla legato al solo kernel 2.6 e a SATA) e un articolo su linux devcenter di Derek Vadala dal titolo "mdadm: A new Tool For Linux Software RAID Management".

Preparazione dell'ambiente

Per effettuare l'esperienza utilizzeremo due partizioni da usare come device per il RAID 1 (mirror) e una ulteriore partizione da usare come device spare. Ricordando che i device a blocchi di UML sono associati ad un file sull'host, prepariamo su quest'ultimo i backing store di 50M e li passiamo alla nascente vm come ubd device (ubd1, ubd2, ubd3):

user@realHost$ dd if=/dev/zero of=/tmp/r1 bs=1M seek=50
user@realHost$ dd if=/dev/zero of=/tmp/r2 bs=1M seek=50
user@realHost$ dd if=/dev/zero of=/tmp/r3 bs=1M seek=50
user@realHost$ vstart vHost --mem=128 \
                 --append="ubd1=/tmp/r1" --append="ubd2=/tmp/r2" \
                 --append="ubd3=/tmp/r3"

I passi precedentemente elencati vengono fatti automaticamente dal lancio del comando:

user@realHost$ ./lab start

Sperimentazione RAID 1

Iniziamo costruendo il RAID 1 e supponiamo di non aver ancora disponibile il device spare:

root@vHost# modprobe md
root@vHost# modprobe raid1
root@vHost# mdadm --create /dev/md0 --level 1 -n 2 -x 1 \
  /dev/ubd/1 /dev/ubd/2 missing
md: md0: raid array is not clean -- starting background reconstruction
mdadm: array /dev/md0 started.

costruiamo il filesystem XFS:

root@vHost# mkfs.xfs -qf /dev/md0

In seguito costruiamo un punto di montaggio dove inserire il filesystem XFS e dove costruiamo un file dati fittizio:

root@vHost# mkdir /mnt/raid
root@vHost# modprobe xfs
root@vHost# mount -t xfs -o usrquota,grpquota /dev/md0 /mnt/raid
root@vHost# dd if=/dev/zero of=/mnt/raid/file bs=1M count=35

Allo scopo di testare il funzionamento del RAID appena avviato potremmo controllare lo stato:

root@vHost# cat /proc/mdstat | head -n 4
Personalities : [raid1]
read_ahead 1024 sectors
md0 : active raid1 ubd/disc2/disc[1] ubd/disc1/disc[0]
      51136 blocks [2/2] [UU]

Ora aggiungiamo il disco spare e ne controlliamo lo stato:

root@vHost# mdadm /dev/md0 -a /dev/ubd/3
mdadm: hot added /dev/ubd/3
root@vHost# cat /proc/mdstat | head -n 4
Personalities : [raid1]
read_ahead 1024 sectors
md0 : active raid1 ubd/disc3/disc[2] ubd/disc2/disc[1] ubd/disc1/disc[0]
      51136 blocks [2/2] [UU]
root@vHost# mdadm -D /dev/md0 | tail -n 5
    Number   Major   Minor   RaidDevice State
       0      98       16        0      active sync   /dev/ubd/1
       1      98       32        1      active sync   /dev/ubd/2

       2      98       48        2      spare   /dev/ubd/3

È utile salvare la configurazione di mdadm con i comandi:

root@vHost# echo "DEVICE partitions" > /etc/mdadm/mdadm.conf
root@vHost# mdadm --examine --scan >> /etc/mdadm/mdadm.conf

Supponiamo che il device ubd2 entri in fault e quindi lo rimuoviamo:

root@vHost# mdadm /dev/md/0 -f /dev/ubd/2
raid1: Disk failure on ubd/disc2/disc, disabling device. 
mdadm: set /dev/ubd/2 faulty in /dev/md/0
root@vHost# mdadm /dev/md/0 -r /dev/ubd/2
mdadm: hot removed /dev/ubd/2

e controlliamo l'attività di recovery:

root@vHost# mdadm -D /dev/md0 | tail -n 5
    Number   Major   Minor   RaidDevice State
       0      98       16        0      active sync   /dev/ubd/1
       1       0        0        1      faulty removed

       2      98       48        2      spare rebuilding   /dev/ubd/3

dopo qualche attimo l'attività di rebuilding termina e la situazione è la seguente:

root@vHost# mdadm -D /dev/md0 | tail -n 3
    Number   Major   Minor   RaidDevice State
       0      98       16        0      active sync   /dev/ubd/1
       1      98       48        1      active sync   /dev/ubd/3

Supponiamo che anche il device ubd1 entry in fault (e quindi venga rimosso):

root@vHost# mdadm /dev/md/0 -f /dev/ubd/1
root@vHost# mdadm /dev/md/0 -r /dev/ubd/1

La situazione di errore è riassunta ed evidenziata in colore:

root@vHost# cat /proc/mdstat | head -n 4
Personalities : [linear] [raid0] [raid1] [raid5] [multipath] 
read_ahead 1024 sectors
md0 : active raid1 ubd/disc3/disc[1]
      51136 blocks [2/1] [_U]

Creative Commons License FREE THE MOUSE Valid HTML! Sandro Doro (email me)
Ultima modifica: $Date: 2006-03-12 17:08:13 $