RAID

Z DCEwiki
Skočit na navigaci Skočit na vyhledávání

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
Poznámka 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.
Upozornění Raidová pole lze skládat pouze z logických oddílů stejné velikosti. Pokud chcete zkombinovat disky o různé kapacitě, musíte raidové pole poskládat z diskových oddílů, které velikostí odpovídají diskové kapacitě nejmenšího z disků.

Nemá také valný smysl skládat raidové pole z diskových oddílů na jednom disku, přestože to lze udělat. Dosáhli byste tím pouze další degradace výkonu při diskových operacích.

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

Upozornění Pokud jsou logické oddíly, ze kterých je RAID pole sestaveno, označeny jako typ Linux raid autodetect ( kód fd), pak se pole při startu jádra automaticky sestaví - to je důležité v případě, že kořenový souborový systém je také v RAID poli. Každopádně však musí být příslušné moduly jádra buď zakompilované rovnou v jádře, nebo 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.

Po každé změně RAID polí je tedy žádoucí aktualizovat ramdisk příkazem:

update-initramfs -u

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.

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

Poznámka 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.
Upozornění V případě SATA disků (podporují hotswap) se může v případě problémů s napájením stát, že vypadnou a systém je znovu najde jako nové zařízení. V takovém případě se RAID pole přepne nejenom do degradovaného režimu, ale také do stavu read-only. Systém zůstane běžet pouze s tím co má aktuálně nataženo v paměti. Po restartu by se mělo pole normálně obnovit. Každopádně takové chování signalizuje vážný hardwarový problém, který je nutno bezpodmínečně vyřešit.

Příklad vytvoření RAID pole typu 0 z blokových zařízení /dev/hda3 a /dev/sda3

Poznámka
 stroj~# mdadm -C /dev/md1 -l0 -n2 /dev/hda3 /dev/sda3
  • Parametr -C je zkrácená forma pro parametr --create, operaci, kterou vytvoříme nové RAID pole /dev/md1
  • Parametr -l nastaví typ raidového pole (0, 1, 5, 6 apod.)
  • Parametr -n určí z kolika disků (či diskových oddílů) se má pole sestavit. Je-li pole sestaveno z více disků nežli je třeba, nastavení nepoužívaným diskům příznak [S] (spare - záložní disk)

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:

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

Poznámka Za určitých okolností je neúplné RAID pole výhodné. Pokud chceme tedy pole záměrně vytvořit jako degradované je třeba při jeho vytvoření místo chybějících blokových zařízení uvést parametr missing. Mějte však stále na paměti, že v případě selhání degradovaného pole (nebo pole vytvořeného s příznakem --assume-clean) mohou být data - v případě že selže zrovna disk na němž jsou uložena - nenávratně ztracena.

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

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

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

Upozornění 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ý!
Poznámka Použití bitmapy může být také zbytečné, pokud během výpadku zařízení nemohlo v neúplném RAID poli dojít k nějakým změnám. Typicky když došlo k zastavení celého stroje v jeden okamžik - např. při náhlém přerušení el. proudu, atp.

Zapnutí bitmapy

Poznámka
stroj:~# cat /proc/mdstat 
Personalities : [raid1] 
md1 : active raid1 sdb2[0] sda2[1]
      29302464 blocks [2/2] [UU]
stroj:~# mdadm --grow --bitmap=internal /dev/md1
stroj:~# cat /proc/mdstat                       
Personalities : [raid1] 
md1 : active raid1 sdb2[0] sda2[1]
      29302464 blocks [2/2] [UU]
      bitmap: 1/1 pages [4KB], 65536KB chunk

Vypnutí bitmapy

Po ukončení manipulace s polem lze použití bitmapy vypnout a odstartovat rekonstrukci pole

Poznámka
stroj:~# mdadm --grow --bitmap=none /dev/md1
stroj:~# echo check > /sys/block/md1/md/sync_action 
stroj:~# cat /proc/mdstat                           
Personalities : [raid1] 
md1 : active raid1 sdb2[0] sda2[1]
      29302464 blocks [2/2] [UU]
      [>....................]  check =  0.4% (137856/29302464) finish=7.0min speed=68928K/sec
      
unused devices: <none>

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.

Poznámka V případě zařízení /dev/md1 odstartujeme synchronizaci pole zapsáním hodnoty resync do souboru /sys/block/md1/md/sync_action
stroj~#  echo resync > /sys/block/md1/md/sync_action

Po skončení synchronizace dat se automaticky změní hodnota v souboru na idle.

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

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

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

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

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

Poznámka Pokud toužíte pozorovat jaký je průběh synchronizace, můžete využít utilitu watch, která vám bude v pravidelných intervalech provádět výpis obsahu souboru /proc/mdstat
Poznámka
user@stroj:~$ watch cat /proc/mdstat


Kromě výpisu souboru /proc/mdstat, můžete zjistit další informace o běžícím RAID poli pomocí dotazů přes mdadm:

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

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

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

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

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

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

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

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

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

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

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

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



Zdroje