RAID (manipulace s polem)
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
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.
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.
- 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.
Přidání disku do degradovaného pole
stroj~# mdadm /dev/md1 -a /dev/sda3
|
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).
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.
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
|
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).