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]
|
|
Sandro Doro (email me)