RAID (manipulace s polem)

From DCEwiki
Jump to: navigation, search

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[edit]

Upozornění 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[edit]

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.
Upozornění 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[edit]

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ě.

Poznámka
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

Poznámka
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.

Poznámka
stroj~# mdadm --zero-superblock /dev/sda3
Upozornění 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[edit]

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.

Upozornění 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[edit]

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.
Poznámka Jelikož jde u velkých polí o zdlouhavé operace, uvádím oro lepší představu i konkrétní časy
  • Počáteční synchronizace 2TB pole typu raid 1 (s použitím dvou SATA III disků ) - 7 hodin
  • Rekonstrukce degradovaného 3,7TB pole typu raid 6 z režimu dvou disků na tři disky (s použitím jednoho SATA II disku ) - 13 hodin
  • Rekonstrukce degradovaného 3,7TB pole typu raid 6 z režimu tří disků na čtyři disky (s použitím jednoho SATA II disku ) - 17 hodin (průměrná max. speed 35OO0K/sec)
  • Po vyhození SATA II disku z 3,7TB pole odhaduje rekonstrukci degradovaného pole typu raid 6 z režimu tří disků na čtyři disky (pouze SATA III) na 6 hodin (průměrná max. speed 98OOOK/sec)

Přidání disku do degradovaného pole[edit]

Poznámka
stroj~# mdadm /dev/md1 -a /dev/sda3
Poznámka 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).

Upozornění 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[edit]

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[edit]

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[edit]

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):

Poznámka
stroj~# mdadm -S /dev/md1

Nové sestavení (spuštění) pole[edit]

Chceme-li zastavené pole znovu spustit a přitom zachovat na něm uložená data, musí být sestaveno, nikoliv znovu vytvořeno!!!.

Poznámka 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.

Upozornění 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.
Poznámka Příklad sestavení raid pole /dev/md1, verze 0.9 identifikovaného hodnotou Preferred Minor
stroj~# mdadm -A /dev/md1 -m1
Poznámka Příklad sestavení raid pole /dev/md1, verze 1.2 identifikovaného hodnotou Array UUID
stroj~# mdadm -A /dev/md1 -u52f39b28:a84c56aa:c351dded:ed2c7fe4
Poznámka 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ě:

  1. Nově přidaná bloková zařízení z jiného stroje je nutné nejprve řádně prozkoumat
  2. Nejjednodušší je výsledek zkoumání rovnou přidat do souboru mdadm.conf
  3. 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.

Upozornění 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:

Poznámka
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:

Poznámka
stroj~# mdadm -A /dev/md1 -m1 --run
Poznámka 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).