RAID
RAID (Redundant Array of Inexpensive Disks) je technologie, která umožuje spojit několik fyzicky nezávislých disků do jednoho pole, které se pak navenek tváří jako disk jediný. To může vést:
- ke zvýšení kapacity diskového systému
- zvýšení výkonu při IO operacích
- zvýšení úrovně zabezpečení uložených dat bez extrémních pořizovacích nákladů.
Proto se RAID používá všude tam, kde je výpadek disku nebo dokonce ztráta dat nepřípustná.
Linuxový SW RAID
Linuxový softwarový RAID je obecně považován za spolehlivější řešení než RAID hardwarový. Je to dáno i tím, že dává mnohem větší svobodu jak při tvorbě jednotlivých RAIDových zařízení, ale také tím, že v případě problémů je (na rozdíl od pseudohardwarových SW RAID zařízení) u disku z takového zařízení mnohem větší pravděpodobnost záchrany dat, prostřednictvím jakéhokoliv jiného linuxového stroje.
- Výhody:
- pokud máte hotswap disky a správně nakonfigurovaný systém (viz kapitola o Hotswap), můžete za plného provozu serveru (bez výpadku služeb) odstranit pokažený disk a místo něj dát čerstvý nový. Nastavení nového disku totiž děláte z příkazové řádky Linuxu.
- do Linux SW RAIDu lze zapojit různě velké disky - nezapojují se totiž celé disky, ale jejich partitions. Pokud po letech provozu selže jeden ze starých disků a do RAIDu vložíme nový disk s násobnou velikostí, není jeho zbylá volná kapacita promarněna - můžeme ji využít na ukládání nekritických dat, popř. můžeme zbylou kapacitu do RAIDu zapojit později, až vyměníme i ten zbývající starý malý disk
- Linux SW RAID je nezávislý na HW počítače. Pokud shoří základní deska a disky přežijí, můžete disky vložit do jakéhokoli jiného počítače a server máte okamžitě znovu online, v plné parádě včetně funkčního RAIDu, bez potřeby jakéhokoli nastavování v Linuxu.
- Linux SW RAID je plně funkční, odladěný a stabilní systém, určený pro nasazení v ostrém provozu. Což se mnohdy od Linux driverech BIOS SW RAIDu nedá říci.
- Nevýhody:
- je potřeba se naučit syntaxi příkazů mdadm :-)
- ve srovnání s plně HW RAIDem asi menší rychlost a větší zátěž CPU
- je použitelný pouze s OS který linuxový SW RAID podporuje, což rozhodně nejsou systémy od Microsoftu
Výhod linuxového SW RAID ale lze u produktů MS využít, pokud u nich použijete nějakou formu síťového přístupu - samba, iscsi, aj. |
Vytvoření raidového pole
Pro vytvoření nového RAID pole se používá režim --create
(lze použít i zkrácenou verzi parametru -C
). Tento režim se nikdy nesmí použít, pokud pracujeme s disky již existujícího pole! Tj. pokud chceme do nového pole přidat blokové zařízení, které již bylo součástí nějakého RAID pole, je nezbytné provést nejprve u tohoto zařízení vynulování superbloku ( viz část Vyhození disku z pole )
Raid může být několika typů, které se liší jak různou úrovní zabezpečení dat tak výkonem a kapacitou. Podrobné informace najdete například na adrese http://cs.wikipedia.org/wiki/RAID.
- RAID 0 (disk striping)
- Není vlastně žádný RAID. Zajišťuje pouze zvýšení objemu úložného prostoru spojením více disků do jednoho celku. Tento typ pole může být lineární (disky jsou jakoby spojeny za sebou) nebo prokládaný (kapacita celého pole se rozdělí na bloky, které se pak střídavě ukládají na ostatní disky). Pole má velikost 100% celkové diskové kapacity, ovšem při výpadku některého z disků jsou data, která na něm byla uložena - ztracena.
- RAID 1 (disk mirroring)
- Je nejstarší používaná metoda zabezpečení dat. Tento typ raidu musí být tvořen minimálně dva stejně velkými disky, nad kterými se provádějí veškeré diskové operace paralelně. To může sna jednu stranu mírně snížit celkovou rychlost zápisu dat (protože se data musí zapisovat dvakrát), ale zase naopak se může mírně zvednout rychlost načítání dat, protože je systém prostřednictvím raidu může načítat z obou dvou disků současně. Pokud v raidu není přítomen žádný záložní disk, je při výpadku jednoho z disků nadále používán pouze zbývající disk. Data tím sice nejsou nijak dotčena, ale chybějící disk je třeba co nejrychleji nahradit.
- RAID 5
- Musí být tvořen minimálně třemi disky. Bezpečnostní informace o paritě dat se ukládají rozprostřeně na všechny disky v poli, takže nedochází k přetěžování některého z disků. Díky tomu, že jsou informace o paritě dat rozloženy na všech discích, lze v případě výpadku jednoho z disků chybějící data dopočítat. Výsledná datová kapacita raid5 oproti raid0 je tak menší pouze o kapacitu jednoho disku (u raid0 diskovou kapacitu náhradního (sparse) disku nelze využít). Pokud však z pole raid5 tvořeného třemi disky vypadnou dva disky, dojít k poškození dat. tento typ raidu je tedy výhodný při poiužití většího počtu stejně velkých HDD.
- RAID 6
- Je obdobou raid5, ovšem s tím rozdílem, že zabezpečovacím informacím je vyhrazena kapacita 2 disků (u raid5 je těmto datům vyhrazena pouze kapacita jednoho disku). Pole je tak odolné vůči výpadku 2 disků. Na druhou stranu je to na úkor snížení celkové kapacity úložného prostoru.
- RAID 10
- Je v podstatě spojením dvou raidových polí typu raid1 do jednoho pole raid0. Toto pole je tvořeno minimálně čtyřmi disky. Pole má vysokou rychlostí čtení, ovšem pokud vám selžou dva disky, které se zrovna zrcadlí mezi sebou, dojde ke ztrátě dat.
Bloková zařízení a RAID
RAID pole lze sestavit rovnou z celých disků, ale pokud však nemáme stejně velké disky je lepší RAID pole sestavit z logických oddílů.
S - spare disk
Disk, který je součástí RAID zařízení, ale není používaný dokud z něj některý disk nevypadne. Pak přestane být označen [S] a začnou se na něj replikovat data.
V případě že zhavaruje disk na kterém byly uloženy informace potřebné pro replikaci, dojde ke ztrátě dat. To je důvod proč upřednostnit RAID-6 před RAID-5. |
F - faulty disk
Když nějaké blokové zařízení, které je součástí RAID pole zkolabuje, zůstane dále jeho součástí, ale je označeno jako faulty [F]. V poli je takový disk nahrazen prvním dostupným spare diskem, na který se automaticky začne pole rekonstruovat. Pokud není spare disk k dispozici, může pole fungovat dál, pokud mu to dovolí jeho typ, ovšem v degradovaném režimu.
Pokud chceme nějaké diskové zařízení z RAID pole vyjmout, musíme ho nejprve označit jako faulty (přestože je v pořádku), jinak nám ho nedovolí mdadm odstranit, protože s ním bude stále pracovat. |
Příklad vytvoření RAID pole typu 0 z blokových zařízení /dev/hda3
a /dev/sda3
Linuxový RAID vytváří zařízení v rámci MD subsystému, proto systém tato zařízení vidí pod jejich pořadovými čísly v rámcio adresáře /dev/md
. Informace o aktuálním stavu MD subsystému udržuje jádro v souboru /proc/mdstat
, ze kterého lze získat podrobnosti o aktuálně spuštěných RAID polích pouhým výpisem:
user@stroj:~$ cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sda1[0] hda1[1]
19542976 blocks [2/2] [UU]
unused devices: <none>
|
Výše uvedený příklad poskytuje informaci o tom že v systému běží jedno spuštěné RAID pole typu 1 (mirror), které je dostupné jako blokové zařízení /dev/raid1
. Je složené ze dvou diskových oddílů - /dev/sda1
, který je na SATA disku a /dev/hda1
, který je na IDE disku. Pole je plně funkční - má příznak [UU], který signalizuje že oba z disků jsou ve stavu U (z angl. up - nahozené).
Neúplné ( degradované) pole
V případě že by některý z disků vypadnul, běželo by RAID pole dál, ovšem v degradovaném stavu. Data by nadále zůstala dostupná, ovšem pouze z jednoho disku. Ovšem v případě selhání i tohoto druhého disku by mohla být ztracena, proto by bylo zapotřebí do RAID pole urychleně přidat náhradní disk.
U běžícího pole, kterému vypadlo či selhalo některé z blokových zařízení by příznak vypadal buď [U_] nebo [_U], v závislosti na tom, který z disků nelze použít.}}
S výjimkou RAID 0 se nové pole vždy vytvoří v degradovaném stavu, s tím, že pokud je přítomen plný počet blokových zařízení, začne automaticky proces synchronizace. Znamená to, že se ukládaná data primárně ukládají na jeden z disků a teprve z něj se postupně rozhazují na další disky v RAID poli. Tento proces synchronizace - nazývaný také "rekonstrukce" - raidového pole je poměrně zdlouhavý. Pokud na nově vytvořený RAID, který se teprve synchronizuje, začnete ihned sypat data, může trvat ještě déle. Proto máte několik možností
- Nechat dojet synchronizaci a teprve pak začít RAID používat
- Manuálně zastavit synchronizaci, dokud neskončí všechny ostatní operace s polem (ovšem pak ji nesmíte zapomenout spustit)
- Nové pole vytvářet rovnou s parametrem
--assume-clean
, a synchronizaci spustit manuálně až po nakopírování dat. - Nové pole vytvořit jako degradované, nasypat do něj data a teprve poté do něj přidat další disky, které se začnou automaticky synchronizovat.Tato možnost se hodí obzvlášť tehdy, když nemůžeme nebo nechceme použít rovnou všechny diskové oddíly.
Synchronizace dat RAID pole
Synchronizace se spouští automaticky po vytvoření nového RAID pole. Je to však proces, který může trvat u velkých a pomalých blokových zařízení i několik hodin a každá další IO operace jej ještě víc zpomalí. Proto je dobré vědět jakým způsobem lze proces synchronizace dat řídit, a jakým způsobem jej lze urychlit.
Průběh synchronizace RAID zařízení lze řídit zápisem příslušné hodnoty do souboru sync_action
příslušného RAID zařízení.
Zastavení probíhající synchronizace
Pokud chceme u zařízení /dev/md1 proces synchronizace odložit na pozdější dobu, zapíšeme do souboru /sys/block/md1/md/sync_action hodnotu idle
stroj~# echo idle > /sys/block/md1/md/sync_action
|
Vytvoření nového RAID pole bez automatického spuštění synchronizace
Automatickému spuštění synchronizace, bezprostředně po vytvoření RAID pole, můžeme zabránit, pokud při jeho vytvoření použijeme parametr --assume-clean
. Tím se nastaví, aby zápis nových dat probíhal pouze do těch oblastí PRIMÁRNÍHO disku, které nejsou synchronizovány.
stroj~# mdadm --create --assume-clean --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1
|
Jak zabránit spouštění synchronizace po přidání nového disku do běžícího pole
Za normálních okolností se synchronizace dat automaticky spouští, je-li do pole přidáno chybějící blokové zařízení. Tomu lze zabránit tím, že se pole přepne do režimu, kdy používá tzv. bitmapu
Bitmapa obsahuje informace o aktuálním stavu synchronizace dat v RAID poli a zajišťuje, aby se nová data nezapisovala do těch míst disku, kde by mohlo dojít ke kolizi s nesynchronizovanými daty na ostatních discích.
Bitmapa se používá především tehdy, pokud potřebujeme pracovat s RAID polem kterého z nějakého důvodu prošlo zhroucením a při automatické synchronizaci dat by mohlo dojít k jejich poškození. Následná rekonstrukce pole po vypnutí bitmapy pak rovněž proběhne rychleji, protože se budou synchronizovat pouze rozhozená data, nikoliv celý disk.
Při použití bitmapy, je sice výkon RAID pole mírně degradován, ale bloková zařízení lze přidávat a odebírat bez toho, aniž by se pokaždé automaticky spustila zdlouhavá rekonstrukce pole.
Při použití bitmapy se data zapisují pouze na primary disk!. Je-li tedy nastaveno použití bitmapy na čerstvě vytvořené RAID pole, nebude žádná replikace probíhat a přidaný disk zůstane čistý! |
Zapnutí bitmapy
Vypnutí bitmapy
Po ukončení manipulace s polem lze použití bitmapy vypnout a odstartovat rekonstrukci pole
Spuštění synchronizace
Jak se má přistupovat k rozhozeným datům při synchronizaci lze určit hodnotou, která se stejně jako když synchronizaci pozastavujeme, zapíše do souboru sync_action
.
Pokud disk synchronizaci nepotřebuje, tak se nestane nic a synchronizace pole se ihned přepne do stavu idle |
Chceme-li nejprve zjistit, jak dalece je pole rozhozené, můžeme použít hodnotu check
V případě zařízení /dev/md1 zapíšeme hodnotu check do souboru /sys/block/md1/md/sync_action
stroj~# echo check > /sys/block/md1/md/sync_action
|
Provede se synchronizace pouze těch datových bloků, které nejsou v konfliktu. V případě rozhozených bloků se pokusí pokusí RAID o obnovu z disku, který má "čerstvější" data. Tzn. že pokud se při synchronizaci narazí na data, která nejsou synchronizována, zapíše se na ostatní disky datový blok z upřednostňovaného disku. V případě že se data nepodaří zesynchronizovat, je blok ignorován. Jak dalece je RAID pole rozhozené, se pak můžete dozvědět z obsahu souboru mismatch_cnt
, který najdete na stejném místě jako sync_action
, kterým se proces synchronizace řídí. Pokud proběhla synchronizace dobře bude hodnota v tomto souboru nulová.
stroj~# cat /sys/block/md1/md/mismatch_cnt
|
Při spuštění synchronizace hodnotou repair budou při synchronizaci datové bloky, které se nepodaří opravit vynulovány, s tím že se o opravu poškozených dat pak musí postarat soborovým systém nad RAID polem.
V případě zařízení /dev/md1 zapíšeme hodnotu repair do souboru /sys/block/md1/md/sync_action
stroj~# echo repair > /sys/block/md1/md/sync_action
|
Nastavení rychlosti synchronizace dat
Synchronizace dat má defaultně stanovené limity, které však lze změnit a tím i ovlivnit, jak dlouho potrvá. Tyto limity vymezují kolik IO operací za sekundu se má provést. Jde o hodnoty, které zajišťují že za normálních okolností nebude synchronizace příliš zatěžovat řadič a tím i zpomalovat ostatní IO operace. Za určitých okolností však může být žádoucí synchronizaci urychlit na úkor ostatních IO operací (např. při obnově havarovaného systému). V takovém případě zvedněte hodnotu minimálního limitu (který je defaultně nastaven na 1000, zatímco maximální limit je defaultně nastaven na 200000) zapsáním nové hodnoty do souboru /proc/sys/dev/raid/speed_limit_min
stroj:~# echo 200000 > /proc/sys/dev/raid/speed_limit_min
|
Zjišťování dalších informací o RAID poli
Monitoring stavu RAID pole
Nástroj mdadm
umožňuje průběžně sledovat stav pole a v případě, že dojde k jeho rozpadu či selhání některého z disků vám odešle upozornění na jehož základě budete moct provést servisní zásah.
Aby to fungovalo, musíte mít na stroji funkční odesílání e-mailů (nakonfigurovaný exim4 nebo jiný mailovací systém) a v souboru /etc/mdadm.conf
nastaveno na jakou adresu má být upozornění odesláno (MAILADDR) a pokud možno i zpáteční adresu (MAILFROM), abyste si pak nemuseli lámat hlavu s tím, na kterém stroji vám RAID pole vlastně selhalo.
E-mail však není příliš spolehlivé komunikační médium, proto je vhodné nastavit systém tak, aby byl tento informační mail odesílán opakovaně, dokud nebude problém odstraněn.
Kromě výpisu souboru /proc/mdstat
, můžete zjistit další informace o běžícím RAID poli pomocí dotazů přes mdadm:
stroj~# mdadm -Q /dev/md0
/dev/md0:37.28GiB raid1 2 devices, 0 spares. Use mdadm --detail for more detail.
|
Podrobnější výpis můžete dostat buď přidáním volby --detail
a nebo rovnou nahrazením parametru -Q
za -D
:
stroj~# mdadm -D /dev/md0
/dev/md0:
Version : 00.90.01
Creation Time : Thu Mar 12 01:34:06 2009
Raid Level : raid1
Array Size : 39086016 (37.28 GiB 40.02 GB)
Device Size : 39086016 (37.28 GiB 40.02 GB)
Raid Devices : 2
Total Devices : 2
Preferred Minor : 0
Persistence : Superblock is persistent
Update Time : Tue Jul 21 10:55:23 2009
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
UUID : ae074243:b857e8b6:85943576:cab70855
Events : 0.13454779
Number Major Minor RaidDevice State
0 8 1 0 active sync /dev/sda1
1 8 17 1 active sync /dev/sdb1
|
Ve výše uvedeném výpisu jsou vypsány tyto informace:
- Jde o pole typu RAID1 (zrcadlo)
- je složeno ze dvou logických diskových oddílů (
/dev/sda1
a/dev/sdb2
) - major-minor čísla tj. čísla speciálních zařízení jednotlivých oddílů jsou: 8-1 (
/dev/sda1
) a 8-17/dev/sdb2
). - preferované minor number RAID pole je 0 (nula), takže se pole automaticky sestaví po spuštění jako
/dev/md0
. - položka update time se používá při sestavování pole, kdy je potřeba zjistit, které členy pole obsahují platná data (novější záznam o poslední aktualizaci pole). Pokud jsou tedy u dvou členů zrcadla (pole RAID1) časy různé, použije se pro sestavení pouze novější člen(!) a starší člen je tedy poté nutno s polem synchronizovat (viz Rekonstrukce degradovaného pole).
Výše uvedené informace se zapisují do superbloku každého členu pole (dřív se superbloky nepoužívaly, takže bylo například velmi obtížné pole po změně zapojení disků správně složit). Informace o poli musí být konzistentní u všech členů pole.
Informace z jednotlivých členů pole, lze zjišťovat jejich přímým dotazováním:
stroj~# mdadm -Q --examine /dev/sda1
|
Výstup bude obdobný jako tabulka která byla uvedena výše. Navíc v ní však bude uvedeno, kterého člena pole jsme se zeptali. Na základě tohoto výpisu pak můžeme kupř. zjistit:
- do kterého RAID pole patří resp. patřil
- kdy byl naposled aktualizován a v jakém stavu se tehdy pole nacházelo.
- jaké bylo v poli jeho pořadí
To jsou informace důležité především při úpravách na úrovni fyzických zařízení či opravě rozpadlého pole.
Ovládání RAID pole
Ovládáním RAID pole se rozumí:
- jak z pole odstranit disk
- jak do pole přidat chybějící disk
- jak pole správně spustit
- jak zvětšit kapacitu pole
- jak pole zastavit
Kontrola stavu pole - check
U každého raid pole se mohou objevit poškozené bloky. Takové pole, které není čisté, se označuje jako dirty (angl. "špinavé") a je tedy potřeba co nejdříve vyčistit tj. provést opravu. V případě, že dojde k degradaci špinavého pole, se totiž může stát, že datový blok již nepůjde opravit. |
Během kontroly pole, která probíhá různě, v závislosti na jeho typu, se neprovádí žádné opravy. Systém pouze v případě chyby navýší hodnotu v md/mismatch_cnt
příslušného pole.
- U pole typu raid 1, se kontrola provádí tak, že se porovnává kontrolní součet bloku z primárního disku, s kontrolním součtem bloku na disku sekundárním.
- U pole typu raid 5, se porovnává kontrolním součet bloku, s informací uloženou v metadatech.
- U pole typu raid 6 je to obdobné, pouze s tím rozdílem že pro každý blok jsou k dispozici dvoje metadata, takže se kontroluje každý blok dvakrát.
Kontrolu pole lze spustit zapsáním příkazu check do souboru md/sync_action
příslušného pole
V případě že hodnota md/mismatch_cnt
není po kontrole nulová, je třeba provést opravu pole.
Oprava pole - repair
Pokud se v souboru md/mismatch_cnt
příslušného pole ojevila jiná hodnota než 0, je třeba provést co nejdříve opravu. Opravu pole lze spustit zapsáním příkazu repair do souboru code>md/sync_action příslušného pole.
- U pole typu raid 1, se kontroluje velikost bloků primárního disku. Pokud neodpovídá, použijí se data sekundárního disku. Jako primární disk se bere ten, který má uvedeno čerstvější časové razítko.
- U pole typu raid 5, se nejdřív porovná velikost bloku s kontrolním součtem uloženým v metadatech. Pokud údaj neodpovídá, je blok zrekonstruován z dat v nich uložených. Postupně se tak překontrolují bloky na všech discích.
- U pole typu raid 6 je to obdobné, pouze s tím rozdílem, že pro každý blok jsou k dispozici dvoje metadata, které by měly vracet stejný výsledek. Takže se kontroluje každý blok dvakrát.
Podmínkou úspěšné opravy je, aby pole mělo k dispozici alespoň minimální počet disků, který je nezbytný pro fungování raidu. Pokud je však spuštěna na pole v degradovaném režimu, je mnohem vyšší pravděpodobnost, že se oprava datového bloku nepodaří. |
Vyhození disku z pole
Zůstane-li po opravě pole hodnota nenulová, znamená to, že někde vzniká problém. Bohužel nelze s jistotou říct, kde neboť na vině může být všechno možné, počínaje vadným konektorem a poškozeným pevným diskem konče. Pokud je však na vině vadný disk (což lze zjistit kupř. přes SMART), tak jej nejdřív musíme z běžícího pole vyřadit.
Nejprve ho však musíme pomocí mdadm označit jako vadný (failed). Bez toho totiž jádro nedovolí disk z RAID pole odebrat. V případě, že je disk poškozen do té míry, že je vyloučeno jeho další použití, je označen jako vadný přímo jádrem. Jádro označí disk jako vadný v okamřiku, kdy se mu nepodaří z něj data načíst, nebo naopak na něj zapsat. A to už může být občas pozdě.
stroj~# mdadm /dev/md1 -f /dev/sda3
|
Je-li disk označen jako vadný, jede pole dál, ovšem jako degradované, a disk je možné z pole odstranit
stroj~# mdadm /dev/md1 -r /dev/sda3
|
Nechceme-li, aby pole odstraněné blokové zařízení začalo po restartu znovu používat, je nutné odstranit ze superbloku diskového zařízení informaci o tom že bylo součástí nějakého RAID pole.
stroj~# mdadm --zero-superblock /dev/sda3
|
Před nulováním superbloku musí být blokové zařízení z pole již vyřazeno (viz výše), jinak to nebude mít žádný efekt. |
Superblok je nutné vynulovat i u blokových zařízení, které přidáme omylem, protože by se jinak po restartu nemuselo díky tomu pole správně sestavit.
Degradace pole
Degradace pole znamená, že není k dispozici plný počet disků, pro jaký bylo pole vytvořeno. Jediným typem raid pole, které ustojí výpadek více než jednoho disku je raid 6. Tento typ pole je totiž defakto pole typu raid 5 s duplikovanými metadaty.
U degradovaných polí znamenají operace, které probíhají paralelně s opravou či rekonstrukcí potencionální riziko vzniku nové chyby, kterou bude nutné později opravit.
Použití namountovaného degradovaného pole znamená především zvýšené riziko ztráty dat bez možnosti opravy. |
- V případě raid 1 (mirror - zrcadlení) se ukládá fyzický datový blok na dva disky. Pole lze degradovat pouze o 1 disk. Dojde-li však k poškození disku v degradovaném poli, tak oprava není možná!
- Pole typu raid 5, se od typu raid 1 liší tím, že navíc vytváří opravný blok, který je uložen jinde, než datový blok. Když dojde k degradaci pole, na kterém byl uložen sekundární blok dat, tak ho lze zpětně rekonstruovat z přeživšího bloku příslušného opravného souboru. Tento typ pole lze degradovat pouze o jeden disk. V případě, kdy dojde k chybě na degradovaném poli raid 5 již oprava není možná, neboť chybí data na jejichž základě by bylo možné vypočítat nový opravný soubor, resp. dopočítat sekundární datový blok.
- Pole typu raid 6 lze degradovat o dva disky, protože kromě toho, že jsou ukládány dublovaně datové bloky, jsou ukládány dublovaně i opravné soubory. V případě, že je tento typ pole degradován pouze o jeden disk, lze provést jeho opravu!
Rekonstrukce raid pole - recovery
Rekonstrukce pole je operace, která se spustí automaticky poté, je-li do degradovaného pole přidán nový disk. Pole se při ní zrekonstruuje do původní podoby což má především vliv na jeho rychlost.
- Rekonstrukce pole typu raid 1 probíhá tak, že se paritní datové bloky překopírují na druhý disk. Čas rekonstrukce je tedy závislý na rychlosti, jakou probíhá kopírování mezi disky.
- Rekonstrukce pole typu raid 5 probíhá tak, že se z datových bloků počítají nové opravné součty, případně naopak - se z přeživšího datového bloku a opravného součtu vytváří paritní datový blok. Vzhledem k tomu, že se data průběžně přepočítávají, je proces obnovy cca 1,2 x delší než obnova pole typu raid 1.
- Při rekonstrukci pole typu raid 6 degradovaného o 2 disky proběhne nejprve rekonstrukce na raid5 a teprve pak na zpátky na raid6. Vzhledem k tomu, že při obnově na raid 6 se počítají dvojí opravné součty, trvá proces obnovy cca dvakrát tak dlouho, jako u raid 5. Takže odhadem celý proces zabere zhruba 3,5x více času, než rekonstrukce pole typu raid 1.
Jelikož jde u velkých polí o zdlouhavé operace, uvádím oro lepší představu i konkrétní časy
|
Přidání disku do degradovaného pole
stroj~# mdadm /dev/md1 -a /dev/sda3
|
Pramater -a je zkrácená varianta pro příkaz --add . Existuje také příkaz --re-add . Ten je určen pro přidání zpět do pole disku, který z něj pouze na chvíli vypad. Při jeho aplikaci by se měla omezit synchronizace pouze na ta data která se změnila výpadku. V praxi je však výsledek chování obou parametrů shodný.
|
Pokud se do degradovaného RAID pole, které není v režimu interní bitmapy doplní chybějící disk, spustí se automaticky po jeho přidání rekonstrukce pole. Její průběh lze sledovat výpisem souboru /proc/mdstat
(viz výše).
Pokud je přidáno blokové zařízení disku na kterém již probíhá rekonstrukce jiného RAID pole, bude spuštění rekonstrukce odložena, dokud předchozí rekonstrukce nedoběhne. U příslušného pole se pak objeví ve výpisu příznak (DELAYED)
|
Přidání nového (náhradního) disku
V případě že původní blokové zařízení v RAID poli zcela selhalo, se musí nové zařízení, které ho má nahradit nejprve připravit. Tj. zajistit aby:
- Neobsahovalo zbytky informací z jiného RAID pole
- Neobsahovalo zbytky dat z jiného souborového systému, které by mohl vyvolávat konflikty
- A odpovídalo svou velikostí ostatním diskům pole
Přidání vypadlého disku
Jak už bylo zmíněno, disk může z nejrůznějších příčin z pole vypadnout. Nejčastěji bývá na vině uvolněný napájecí či datový konektor.
Bohužel operace --re-add většinou selže, takže je třeba před novým přidáním disku do pole odstranit stávající superblok a provést plnou operaci recovery.
Zastavení RAID pole
RAID pole lze zastavit pouze v případě, že se nepoužívá (tzn. nesmí být připojené a také s ním nesmí pracovat žádný jiný proces, např. LVM):
stroj~# mdadm -S /dev/md1
|
Nové sestavení (spuštění) pole
Chceme-li zastavené pole znovu spustit a přitom zachovat na něm uložená data, musí být sestaveno, nikoliv znovu vytvořeno!!!.
Příklad sestavení raid pole /dev/md1 , identifikovaného záznamem v souboru /etc/mdadm/mdadm.conf
stroj~# mdadm -A /dev/md1
|
Občas je však potřeba, sestavit pole, které nemá záznam v souboru /etc/mdadm/mdadm.conf
. V takovém případě musíme při jeho novém sestavení zároveň předat informaci, podle níž jsou při sestavování příslušného raidu identifikovány jednotlivé disky. U staršího typu raid polí verze 0.90 je to číslo MD zařízení, pod kterým bylo pole původně sestaveno - tzv. Preferred Minor, kdežto u novější verze raid polí 1.20 se používá Array UUID.
U starší verze raid polí 0.90, se může stát - v případě kdy jsou disky přehozeny do jiného stroje - že mají stejné Preferred Minor jako disky jiného již běžícího RAID pole. Proto aby při pokusu o sestavení nedošlo k nabourání tohoto běžícího pole, je nutné u přenesených disků hodnotu Preferred Minor změnit. Viz níže. |
Příklad sestavení raid pole /dev/md1 , verze 0.9 identifikovaného hodnotou Preferred Minor
stroj~# mdadm -A /dev/md1 -m1
|
Příklad sestavení raid pole /dev/md1 , verze 1.2 identifikovaného hodnotou Array UUID
stroj~# mdadm -A /dev/md1 -u52f39b28:a84c56aa:c351dded:ed2c7fe4
|
Jak je z příkladů zřejmé, pravděpodobnost výskytu stejné hodnoty Array UUID je velmi malá, neboť nejde o pouhé jedno celé číslo, ale řetězec. Přesto to není vyloučeno. K duplicitě může dojít tehdy, pokud bylo původní raid pole "naklonováno" na jiný stroj a po nějakém čase je toto naklonované pole přesunuto zpět na původní stroj. |
Při přesunu raid pole na jiný stroj je tedy nutno postupovat následovně:
- Nově přidaná bloková zařízení z jiného stroje je nutné nejprve řádně prozkoumat
- Nejjednodušší je výsledek zkoumání rovnou přidat do souboru mdadm.conf
- V něm pak upravíme příslušné číslo, tak aby nemohlo dojít při sestavení pole ke kolizi, a pokusíme se pole sestavit.
V případě že chceme pole pouze přečíslovat, stačí je zastavit, změnit v souboru mdadm.conf číslo a pole znovu sestavit.
Aby se změna projevila i po restartu, musí se po nahození pole aktualizovat ramdisk! Viz výše. |
Hodnotu Preferred minor number resp. Array UUID lze zjistit dotazem na příslušný diskový oddíl, který chceme aktivovat. Následující příkaz vypíše informace z MD superbloku na prvním oddíle prvního disku v systému:
stroj~# mdadm -E /dev/sda1
|
Pole lze znovu spustit (sestavit) i v degradovaném stavu, v takovém případě je však nutné přidat parametr --run
:
stroj~# mdadm -A /dev/md1 -m1 --run
|
Pole byste pochopitelně mohli místo pouhého sestavení (spuštění s parametrem -A ) také znovu vytvořit - parametr -C (viz výše), ovšem automatickou rekonstrukcí byste mohli poškodit rozhozená data.
|
Pokud si nejste po havárii jisti konzistencí dat, sestavujte (spouštějte) raději pole vždy tak, aby nemohlo dojít k poškození nesynchronizovaných dat a synchronizaci spusťe až po ověření, že bylo pole správně sestaveno. (To je důležité zvláště u pole typu RAID 5, kterému zhavarovaly dva disky a vy se pokoušíte zachránit data).
Zdroje
- http://www.pslib.cz/ke/RAID_v_Linuxu ( Mgr. Milan Keršláger )
- http://wiki.slfree.net/index.php/Linux_SW_RAID ( Tomáš Dulík )
- http://cs.wikibooks.org/wiki/RAID_a_LVM ( Aleš Kapica )