Szoftver RAID 1 bevetés közben

Rengeteg cikk van a hálózaton Linux RAID 1 konfigurálásról, meglévő rendszereken RAID 1-re való átállásról, de arról viszonylag kevés az információ mi van akkor, ha valami baj történik. Mi a teendő akkor, ha blokk hibák lépnek fel a tömb egyik lemezén, vagy egyéb probléma miatt kiesik a tömbből a lemez?

Linux rendszereken a mdadm daemon módban is tud futni, mely folyamatosan figyeli a tömböt. Ha valami probléma van valamelyik lemezzel, akkor kiveszi a tömb elemei közül és értesíti az adminisztrátort:

This is an automatically generated mail message from mdadm
running on sun

A Fail event had been detected on md device /dev/md4.

It could be related to component device /dev/sdb6.

Faithfully yours, etc.

Ilyenkor az adminisztrátor leellenőrzi mi a pontos helyzet a tömbbel. A proc fájlrendszer alatt található mdstat fájl mindig tájékoztatást ad az aktuális állapotról:

sun[root]> cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid5] [multipath] [raid6] [raid10]
md1 : active raid1 sdb2[1] sda2[0]
977856 blocks [2/2] [UU]

md2 : active raid1 sdb4[1] sda4[0]
291776 blocks [2/2] [UU]

md3 : active raid1 sdb5[1] sda5[0]
977856 blocks [2/2] [UU]

md4 : active raid1 sdb6[2](F) sda6[0]
12206016 blocks [2/1] [U_]

md5 : active raid1 sdb7[1] sda7[0]
2940864 blocks [2/2] [UU]

md0 : active raid1 sdb1[1] sda1[0]
290752 blocks [2/2] [UU]

unused devices:

Látszik, hogy az md4 eszközön az sdb6 device failed állapotban van. Ahhoz, hogy eltávolítsuk a diszket, először ki kell venni az sdb lemezen lévő partíciókat az összes RAID tömbből:

sun[root]> mdadm /dev/md0 --fail /dev/sdb1
mdadm: set /dev/sdb1 faulty in /dev/md0
sun[root]> mdadm /dev/md0 --remove /dev/sdb1
mdadm: hot removed /dev/sdb1
sun[root]> mdadm /dev/md1 --fail /dev/sdb2
mdadm: set /dev/sdb2 faulty in /dev/md1
sun[root]> mdadm /dev/md1 --remove /dev/sdb2
mdadm: hot removed /dev/sdb2
sun[root]> mdadm /dev/md2 --fail /dev/sdb4
mdadm: set /dev/sdb4 faulty in /dev/md2
sun[root]> mdadm /dev/md2 --remove /dev/sdb4
mdadm: hot removed /dev/sdb4
sun[root]> mdadm /dev/md3 --fail /dev/sdb5
mdadm: set /dev/sdb5 faulty in /dev/md3
sun[root]> mdadm /dev/md3 --remove /dev/sdb5
mdadm: hot removed /dev/sdb5
sun[root]> mdadm /dev/md5 --fail /dev/sdb7
mdadm: set /dev/sdb7 faulty in /dev/md5
sun[root]> mdadm /dev/md5 --remove /dev/sdb7
mdadm: hot removed /dev/sdb7

Fontos, hogy először faulty állapotba kell tenni az összes működő tömbben a lemez partícióit, csak utána lehet kivenni őket a tömbből.

Ha mindent megfelelően eltávolítottunk a tömbből, akkor az sdb lemez partíciói már nem szerepelhetnek egyik tömbben sem:

sun[root]> cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid5] [multipath] [raid6] [raid10]
md1 : active raid1 sda2[0]
977856 blocks [2/1] [U_]

md2 : active raid1 sda4[0]
291776 blocks [2/1] [U_]

md3 : active raid1 sda5[0]
977856 blocks [2/1] [U_]

md4 : active raid1 sda6[0]
12206016 blocks [2/1] [U_]

md5 : active raid1 sda7[0]
2940864 blocks [2/1] [U_]

md0 : active raid1 sda1[0]
290752 blocks [2/1] [U_]

unused devices:

Ha megfelelő hardvert választottunk a kiszolgálónak, akkor hot-plug diszkek vannak a gépben, melyeket menet közben eltávolíthatunk. Fizikailag mind a SATA-II, mind az SCA foglalatos SCSI alkalmas erre a feladatra. Azonban nem lehet csak úgy kivenni a gépből a diszket, ez nagyon sok mindennek függvénye (operációs rendszer, diszkvezérlő, stb...). Linux alatt megtaláljuk az scsiadd parancsot, mely alkalmas SCSI eszközök operációs rendszer szintű eltávolítására.
A /proc fájlrendszer alatt található egy scsi/scsi fájl. Ennek a tartalma alapján megtudhatjuk milyen SCSI eszközök vannak a gépben:

sun[root]> cat scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
Vendor: SEAGATE Model: ST318404LSUN18G Rev: 4207
Type: Direct-Access ANSI SCSI revision: 03
Host: scsi0 Channel: 00 Id: 01 Lun: 00
Vendor: IBM Model: IC35L018UCD210-0 Rev: S5BS
Type: Direct-Access ANSI SCSI revision: 03

Meg kell mondani az operációs rendszernek, hogy vegye ki az sdb diszket a stílus kedvéért az scsiadd nevű parancsot használva:

sun[root]> scsiadd -r 0 1 0
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
Vendor: SEAGATE Model: ST318404LSUN18G Rev: 4207
Type: Direct-Access ANSI SCSI revision: 03

Most már betehetünk egy új lemezt a meghibásodott helyére. Természetesen mindezt menet közben, mialatt az Exim kézbesíti a leveleket a gépen, és az Apache kiszolgálja a webes kéréseket.
Ha megcseréltük a lemezeket, akkor meg kell mondani az operációs rendszernek, hogy nézzen szét az SCSI buszon új eszközök után:

sun[root]> scsiadd -s
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
Vendor: SEAGATE Model: ST318404LSUN18G Rev: 4207
Type: Direct-Access ANSI SCSI revision: 03
Host: scsi0 Channel: 00 Id: 01 Lun: 00
Vendor: IBM Model: IC35L018UCD210-0 Rev: S5BS
Type: Direct-Access ANSI SCSI revision: 03

Ha felismerte, akkor ugyanolyan partíciókat kell létrehozni az új diszken, mint az sda-n. Ezek után hozzá lehet adni a partíciókat a RAID 1 tömbökhöz:

sun[root]> mdadm /dev/md1 -a /dev/sdb2
mdadm: added /dev/sdb2
sun[root]> mdadm /dev/md2 -a /dev/sdb4
mdadm: added /dev/sdb4
sun[root]> mdadm /dev/md3 -a /dev/sdb5
mdadm: added /dev/sdb5
sun[root]> mdadm /dev/md4 -a /dev/sdb6
mdadm: added /dev/sdb6
sun[root]> mdadm /dev/md5 -a /dev/sdb7
mdadm: added /dev/sdb7
sun[root]> mdadm /dev/md0 -a /dev/sdb1
mdadm: added /dev/sdb1

Ha szeretnénk figyelni, mi történik a folyamat során, akkor a következő paranccsal tehetjük meg:

sun[root]> watch 'cat /proc/mdstat'