RAID
From Alessandro's Wiki
Il Raid è la soluzione migliore per non rischiare di perdere tutto per colpa di discacci malfnzionanti.
- Appunto, ho questi due discacci (Maxtor molto cattivi) li metto a specchio per:
- guadagnare velocità di lettura
- se un disco muore, l'altro farà il suo lavoro
mdadm
Gestore + comune e semplice di dispositivi RAID
comandi al volo
- crea bitmap
mdadm /dev/md3 -Gb internal
oppure
mdadm --grow --bitmap=internal /dev/md3
- mdadm: set /dev/sda1 faulty in /dev/md0
mdadm /dev/md0 -f /dev/sda1
- mdadm: hot removed /dev/sda1
mdadm /dev/md0 -r /dev/sda1
- mdadm: hot added /dev/sda1
mdadm /dev/md0 -a /dev/sda1
- creo un raid multipath con 4 dischi
mdadm -C /dev/md0 --level=multipath --raid-devices=4 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1 Continue creating array? yes mdadm: array /dev/md0 started.
- Verificare la consistenza:
echo check >> /sys/block/mdX/md/sync_action watch -n .1 cat /proc/mdstat
- Controllare la velocità del RAID
cat /proc/sys/dev/raid/speed_limit_max
per un massimo di 30MB/sec.
echo "30000" > /proc/sys/dev/raid/speed_limit_max
recuperare un raid1
livecd ~ # mdadm --assemble /dev/md1 /dev/hda5 /dev/hdc5 mdadm: /dev/md1 has been started with 2 drives. livecd ~ # cat /proc/mdstat Personalities : [raid1] md1 : active raid1 hda5[0] hdc5[1] 19542976 blocks [2/2] [UU] bitmap: 0/150 pages [0KB], 64KB chunk unused devices: <none>
Installare il sistema su RAID software
mknod /dev/md1 b 9 1 mknod /dev/md2 b 9 2 mknod /dev/md3 b 9 3 mdadm --create --verbose /dev/md1 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1 mdadm --create --verbose /dev/md2 --level=1 --raid-devices=2 /dev/sda2 /dev/sdb2 mdadm --create --verbose /dev/md3 --level=1 --raid-devices=2 /dev/sda3 /dev/sdb3 mdadm --detail --scan > /etc/mdadm.conf mdadm /dev/md1 -Gb internal mdadm /dev/md2 -Gb internal mdadm /dev/md3 -Gb internal grub grub> root (hd0,x) grub> setup (hd0) grub> quit
Creare un raid0 (Dis+Disk+Disk..)
localhost ~ # mknod /dev/md0 b 9 0 localhost ~ # mdadm --create /dev/md0 --chunk=64 --level=raid0 --raid-devices=2 /dev/hda7 /dev/hdc1 mdadm: /dev/hda7 appears to contain a reiserfs file system size = 4891648K Continue creating array? y mdadm: array /dev/md0 started. localhost ~ # cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] md0 : active raid0 hdc1[1] hda7[0] 303363200 blocks 64k chunks unused devices: <none>
Creare un raid1 (Disk=Disk+Disk=Disk+..)
- vediamo i modelli di disco che ho a disposizione: (sapendo che sono PS e SM)
[root@elwood ~]# cat /proc/ide/ide[01]/hd[bc]/model Maxtor 6Y160P0 Maxtor 6L160P0
Il primo è un modello difettuoso di fabbrica (6Y***P0) Il secondo è un pò meglio
- Faacio una partizione per disco (devono essere identiche) e togglo il file syste a linux raid autodetect (tipo fd)
# fdisk -l /dev/hd[bc] Device Boot Start End Blocks Id System /dev/hdb1 1 19929 160079661 83 Linux raid autodetect
Device Boot Start End Blocks Id System /dev/hdc1 1 19929 160079661 83 Linux raid autodetect
- formattimao il file system (ext3)
[root@elwood ~]# mkfs.ext3 -L raid1 -m0 /dev/hdb1 [root@elwood ~]# mkfs.ext3 -L raid1 -m0 /dev/hdc1
- costruiamo e facciamo partire il raid:
[root@elwood ~]# mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/hdb1 /dev/hdc1 mdadm: /dev/hdb1 appears to contain an ext2fs file system size=160079660K mtime=Mon May 29 22:32:40 2006 mdadm: /dev/hdc1 appears to contain an ext2fs file system size=160079660K mtime=Thu Jan 1 01:00:00 1970 Continue creating array? (y/n) y mdadm: array /dev/md0 started.
- Ora vedo cosa è successo:
[root@elwood ~]# cat /proc/mdstat Personalities : [raid1] md0 : active raid1 hdc1[1] hdb1[0] 160079552 blocks [2/2] [UU] [>....................] resync = 0.4% (652864/160079552) finish=44.7min speed=59351K/sec
- Con il seguente comando facciamo partire a ogni avvio la monitoria del raid che ci manderà e-mails
[root@elwood ~]# echo " nohup mdadm --monitor --mail=aledelg@gmail.com --delay=300 /dev/md0 & " >> /etc/rc.local
- Scriviamo un paio di linee in mdadm.conf per far riavviare il raid al riavvio (non sempre necessario)
[root@elwood ~]# vi /etc/mdadm.conf DEVICE /dev/hd[bc]1 ARRAY /dev/md0 devices=/dev/hdb1,/dev/hdc1
Rimuovere un disco
- rimuovo la partizione /dev/hdb1 dal RAID /dev/md5
fricco ~ # mdadm --manage /dev/md5 --fail /dev/hdb1 mdadm: set /dev/hdb1 faulty in /dev/md5 fricco ~ # cat /proc/mdstat Personalities : [linear] [raid0] [raid1] md5 : active raid1 hdd1[1] hdb1[2](F) 244187904 blocks [2/1] [_U] md0 : active raid0 hdc1[1] hda7[0] 303363200 blocks 64k chunks unused devices: <none> fricco ~ # mdadm --manage /dev/md5 -r /dev/hdb1 mdadm: hot removed /dev/hdb1
reset raid information of a disk
mdadm --zero-superblock /dev/<disk>
Sostituire un disco in raid1 Corrotto
- La configurazione è la seguente:
macchina ~ # cat /proc/mdstat |grep ^md md10 : active raid1 hdd2[1] hda2[0] md100 : active raid1 hdd3[1] hda3[0] md160 : active raid1 hdd5[1] hdb1[0] md0 : active raid1 hdd1[1] hda1[0]
- i dischi installati sono;
macchina ~ # fdisk -l 2> /dev/null|grep 'Disk /dev/hd' Disk /dev/hda: 80.0 GB, 80000000000 bytes Disk /dev/hdb: 163.9 GB, 163928604672 bytes Disk /dev/hdd: 251.0 GB, 251000193024 bytes
- il disco /dev/hdd è danneggiato:
macchina ~ # dmesg |grep hdd|tail end_request: I/O error, dev hdd, sector 162802377 raid1: hdd5: rescheduling sector 100823408 hdd: dma_intr: status=0x51 { DriveReady SeekComplete Error } hdd: dma_intr: error=0x40 { UncorrectableError }, LBAsect=162802376, high=9, low=11807432, sector=162802369 end_request: I/O error, dev hdd, sector 162802369 raid1:md160: read error corrected (8 sectors at 100823536 on hdd5) hdd: dma_intr: status=0x51 { DriveReady SeekComplete Error } hdd: dma_intr: error=0x40 { UncorrectableError }, LBAsect=162802377, high=9, low=11807433, sector=162802377 end_request: I/O error, dev hdd, sector 162802377 raid1:md160: read error corrected (8 sectors at 100823544 on hdd5)
- Faccio il backup della tabella di partizioni:
sfdisk -d /dev/hdd > hdd_partition_table
- Spengo la macchina, e monto il nuovo disco:
[... reboot ...]
- ricario la tabella delle partizioni del vecchio disco, nel nuovo:
sfdisk /dev/hdd < hdd_partition_table
- Añado, una por una las particiones del nuevo disco a los RAIDs
aledg ~ # mdadm /dev/md160 -a /dev/hdd5 mdadm: added /dev/hdd5 aledg ~ # mdadm /dev/md0 -a /dev/hdd1 mdadm: added /dev/hdd1 aledg ~ # mdadm /dev/md10 -a /dev/hdd2 mdadm: added /dev/hdd2 aledg ~ # mdadm /dev/md100 -a /dev/hdd3 mdadm: added /dev/hdd3
- Miramos si esta reconstruyendo los raids, el primero que he areglado se estarà reconstruyendo, los otros , tienen que estar en estado "DELAYED" osea que se completaran uno a la vez:
aledg ~ # cat /proc/mdstat Personalities : [raid0] [raid1] [multipath] [faulty] md10 : active raid1 hdd2[2] hda2[0] 10241344 blocks [2/1] [U_] resync=DELAYED bitmap: 28/157 pages [112KB], 32KB chunk md100 : active raid1 hdd3[2] hda3[0] 20482752 blocks [2/1] [U_] resync=DELAYED bitmap: 17/157 pages [68KB], 64KB chunk md160 : active raid1 hdd5[2] hdb1[0] 160079552 blocks [2/1] [U_] [>....................] recovery = 0.4% (690112/160079552) finish=141.1min speed=18812K/sec md0 : active raid1 hdd1[2] hda1[0] 264960 blocks [2/1] [U_] resync=DELAYED bitmap: 0/33 pages [0KB], 4KB chunk