RAID (synchronizace 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
|