RAID v Linuxu
RAID (Redundant Array of Inexpensive Disks) je metoda, jak zvýšit výkon diskového systému nebo bezpečnost na disku uložených dat bez extrémních pořizovacích nákladů. Patří všude tam, kde je výpadek disku nebo dokonce ztráta dat nepřípustná. Typické nasazení jsou servery v počítačových sítích a místa, kde i malý výpadek přináší velké ekonomické ztráty.
Obsah
Úrovně RAID
Úrovně RAID se liší různou úrovní zabezpečení dat a výkonností. V praxi se nepoužívají všechny definované úrovně, ale jen ty nejvýhodnější. Podrobné informace najdete například na adrese http://cs.wikipedia.org/wiki/RAID.
RAID 0 (disk striping)
RAID 0 není vlastně žádný RAID. Zajišťuje pouze zvýšení výkonu paralelním provozováním více disků. Pole může být lineární (disky jsou jakoby spojeny za sebou) nebo prokládaná (kapacita je rozdělena na bloky, které se střídají – např. všechny liché na prvním a všechny sudé na druhém disku). Veškerá kapacita je určena pro ukládání dat (žádný prostor pro bezpečnostní informace). Pole má velikost 100% celkové kapacity. Při výpadku disku jsou data ztracena.
RAID 1 (disk mirroring)
RAID 1 je nejstarší používaná metoda zabezpečení dat. V počítači jsou dva stejně velké disky a oba provádějí všechny požadované operace. Rychlost zápisu proto klesá na 1/2 (musí se zapsat na oba disky). Naopak rychlost čtení může být v ideálním případě dvojnásobná (z každého disku je potřeba přečíst jen 1/2 dat). Pole má velikost 50% celkové kapacity. Při výpadku disku z pole 2 disků je dále používán pouze zbývající disk a data nejsou dotčena. Vypadlý disk je však potřeba co nejrychleji nahradit, protože data už nejsou chráněna.
RAID 5
Bezpečnostní informace o paritě se ukládá rozprostřeně na všechny disky v poli, takže nedochází k přetěžování některého z disků. Zabezpečovací informace zabírají kapacitu jednoho z použitých disků. Minimální počet disků je 3. Pomocí zabezpečovací informace lze dopočítat ztracená data z 1 vypadlého disku. Výsledná kapacita je rovná součtu kapacity všech disků bez jednoho, takže s počtem disků se režie zmenšuje. Vypadlý disk je však potřeba co nejrychleji nahradit, protože data už nejsou chráněna.
RAID 6
RAID 6 je obdoba RAID 5, zabezpečovací informace jsou rozprostřeny po všech discích a zabírají kapacitu 2 disků. Pole je tak odolné vůči výpadku 2 disků. Při výpadku jednoho disku jsou tedy data po dobu rekonstrukce pole stále chráněna.
RAID 10
Označuje se jako RAID 1+0. Zrcadlené disky jsou tedy spojeny do 1 výsledného pole. Pole vyniká vysokou rychlostí čtení.
Administrace RAIDu v Linuxu
RAID pole lze v Linuxu vytvářet pomocí MD subsystému. Pro administraci RAID polí slouží v Linux příkaz mdadm
.
Stav
Jádro Linuxu udržuje informace o aktuálním stavu MD subsystému v souboru /proc/mdstat
. Pokud jsou v poli všechny disky, je pole funkční. V případě výpadku disku mluvíme o degradovaném RAID poli. Při vložení disku zpět do pole dojde k rekonstrukci chybějících dat (neplatí u RAID 0).
V níže uvedeném příkladu je v systému pole RAID 0, které se skládá ze dvou disků (sda1 a hda1). Pole je plně funkční (oba disku jsou ve stavu U jako up, tj. funkční).
$ cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sda1[0] hda1[1] 19542976 blocks [2/2] [UU] unused devices: <none>
Oddíly pro RAID
Pole RAID se obvykle sestavuje s oddílů. Pokud jsou oddíly, ze kterých je RAID pole sestaveno, označeny číselným identifikátorem fd (typ Linux raid autodetect), mohou být při startu jádra automaticky sestaveny (což je důležité v případě, že kořenový souborový systém také na RAID poli). V takovém případě ale musí být příslušné moduly přítomny v initrd obrazu, který jádro používá při svém zavedení do paměti počítače při startu systému.
V následujícím příkladu jsou vždy 1. a 3. oddíl na pevném disku /dev/hda
a /dev/sda
určen pro sestavení RAID pole:
$ fdisk -l /dev/hda Disk /dev/hda: 120.0 GB, 120060444672 bytes 255 heads, 63 sectors/track, 14596 cylinders Units = cylindry of 16065 * 512 = 8225280 bytes Zařízení Boot Start End Blocks Id System /dev/hda1 * 1 2433 19543041 fd Linux raid autodetect /dev/hda2 2434 2677 1959930 82 Linux swap / Solaris /dev/hda3 2678 14593 95715270 fd Linux raid autodetect
$ fdisk -l /dev/sda Disk /dev/sda: 120.0 GB, 120060444672 bytes 255 heads, 63 sectors/track, 14596 cylinders Units = cylindry of 16065 * 512 = 8225280 bytes Zařízení Boot Start End Blocks Id System /dev/sda1 * 1 2433 19543041 fd Linux raid autodetect /dev/sda2 2434 2677 1959930 82 Linux swap / Solaris /dev/sda3 2678 14593 95715270 fd Linux raid autodetect
Vytvoření pole
Pole se vytváří vždy v degradovaném stavu (neplatí pro RAID 0), takže okamžitě po vytvoření je zahájena rekonstrukce pole. Parametr -l
určuje typ RAID pole (0, 1, 5, 6 apod.), parametr -n
určuje počet prvků pole. Jednotlivé prvky pole musí být poté vyjmenovány:
# vytvoření RAID 0 mdadm -C /dev/md1 -l0 -n2 /dev/hda3 /dev/sda3
# vytvoření RAID 1 mdadm -C /dev/md1 -l1 -n2 /dev/hda3 /dev/sda3
# vytvoření RAID 5 mdadm -C /dev/md1 -l5 -n3 /dev/hda3 /dev/sda3 /dev/sdb3
Pokud při vytvoření pole nedodáme všechny potřebné části, vytvoří se také, ale zůstane v degradovaném stavu.
Degradované pole
V případě problémů s diskem ho jádro automaticky označí jako F (failed) nebo ho rovnou z pole vyřadí (remove). Tím se pole dostane do degradovaného stavu.
Disk lze z pole vyřadit také ručně. Nejprve ho označíme jak failed (volba -f
) a pak ho z pole teprve odstraníme (remove, volba -r
). Pole bude dál pokračovat v degradovaném režimu:
mdadm /dev/md1 -f /dev/sda3 mdadm /dev/md1 -r /dev/sda3
Rekonstrukce degradovaného pole
Pokud do degradovaného pole doplníme chybějící disk (tzv. hot-add), začne automaticky jeho rekonstrukce:
mdadm /dev/md1 -a /dev/sda3
Postup rekonstrukce lze sledovat v souboru /proc/mdstat
(viz výše). Rekonstrukce pole je odložena (DELAYED), pokud by měla probíhat na stejném disku, na kterém již nějaká rekonstrukce běží. Po dokončení aktivní rekonstrukce je automaticky zahájena odložená rekonstrukce.
Zrušení pole
Pole lze zrušit (zastavit) pouze v případě, že se nepoužívá (nesmí být připojeno příkazem mount):
mdadm -S /dev/md1
Sestavení pole
Chceme-li zastavené pole znovu spustit a zachovat data, musí být jen sestaveno (ne tedy vytvořeno, jak je uvedeno výše). K tomu slouží příkaz:
mdadm -A /dev/md1 /dev/hda3 /dev/sda3
Opět lze sestavit pole v degradovaném stavu, avšak je nutné přidat parametr --run
:
mdadm -A /dev/md1 /dev/hda3 --run
Pole lze místo sestavení (parametr -A
) také znovu vytvořit (parametr -C
, viz výše), avšak rekonstrukce může poškodit data. V takovém případě vytváříme pole tak, aby nebylo kompletní a rekonstrukci zahájíme až po ověření, že bylo pole správně sestaveno (používá se například u pole RAID 5, na kterém havarovaly dva disky a pokoušíme se zachránit data).
Změna velikosti pole
Pro změny v organizaci pole slouží parametr -G
(režim grow). Nestačí-li nám již místo na disku, můžeme jeden starý disk vyměnit za nový, spustit systém, vytvořit na novém disku větší oddíly a přidat je do existujícího pole. Proběhne rekonstrukce, avšak pole zůstane v původní velikosti. Vyměníme druhý starý disk, vytvoříme oddíly a znovu spustíme rekonstrukci. V tomto okamžiku máme k dispozici pole, které je menší, než umožňují vytvořené oddíly. Takové pole lze snadno zvětšit příkazem:
mdadm -G /dev/md1 --size max
Ve zbytku pole automaticky proběhne rekonstrukce, která zajistí identický obsah nové oblasti. V tuto chvíli můžeme zvětšit souborový systém, který se na poli nachází. Podporuje-li použité jádro zvětšování za provozu (online-resize), není potřeba souborový systém odpojovat a stačí pouze zadat příkaz:
resize2fs -p /dev/md1