RAID (manipulace s polem)

Z DCEwiki
Verze z 14. 2. 2011, 10:37, kterou vytvořil Keny (diskuse | příspěvky) (Založena nová stránka: 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 k…)
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)
Skočit na navigaci Skočit na vyhledávání

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

Vyhození disku z pole

Pro správu RAID polí slouží utilita mdadm. Pokud tedy chceme nějaký disk z běžícího pole vyřadit aniž by byl systémem detekován jako vadný, taj jej nejprve musíme pomocí tohoto nástroje jako vadný (failed) označit. Bez toho jádro nedovolí disk z RAID pole odebrat.

Poznámka
stroj~# mdadm /dev/md1 -f /dev/sda3

Je-li disk označen jako vadný, jede pole dál, ovšem jako degradované, ale 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.

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 selhalo, musíte 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

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

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


Zvětšení kapacity pole

Pro změny v organizaci pole slouží parametr -G (režim grow). Nestačí-li nám tedy již kapacita stávajícího pole, můžeme je (v případě že používáte disky které podporují hotswap - i za běhu) zvětšit.

Pokud nemáte volnou pozici pro nový disk vyhoďte jeden z disků stávajícího RAID pole (čímž se sice pole stane degradovaným, ale na vyjmutém disku vám zůstanou stávající data jako pojista pro případ selhání operace) a místo něj zapojte nový, větší disk.

Pokud nechcete přidat celý disk, tak na něm vytvořte nový, větší logický oddíl a ten přidejte do běžícího pole.

Proběhne rekonstrukce pole, ovšem to zůstane v původní velikosti (RAID nevyužije větší oddíl celý).

Po ukončení synchronizace vyhoďte další starý disk. Ten rovněž vyměňte za nový, který rozdělíte stejně jako ten předchozí a znovu nechte provést rekonstrukci.

V tomto okamžiku již máte k dispozici kompletní pole, které je sice menší, než je kapacita přidaných oddílů, ale které lze snadno roztáhnout za běhu příkazem:

mdadm -G /dev/md1 --size max

Po roztažení se nově přidaný kus pole automaticky zesynchronizuje, ale vy již v tuto chvíli můžete zvětšit souborový systém, který se na RAID poli nachází. Podporuje-li vaše jádro a použitý souborový systém změnu velikosti za běhu (online-resize), není ani potřeba souborový systém odpojovat. Stačí pouze zadat příslušný příkaz.

V případě, že vaše jádro nedovoluje zvětšování souborového systému za běhu, je nutné souborový systém odpojit (příkazem umount), zvětšit a poté znovu připojit. Během toho pochopitelně není nutné čekat na to než doběhne synchronizace.


Bootovatelnost: nahrání GRUB bootloaderu do MBR nového

Pokud je na disku systém a má být bootovatelný, musíme ještě do MBR nainstalovat grub. O tom, že disk nemá v MBR boot loader, se můžete přesvědčit třeba takto:

xeric:~# dd if=/dev/sdd bs=512 count=1 | hexdump
1+0 records in
1+0 records out
512 bytes (512 B) copied0000000 0000 0000 0000 0000 0000 0000 0000 0000
*
, 2.5337e-05 s, 20.2 MB/s
00001b0 0000 0000 0000 0000 0000 0000 0000 0180
00001c0 0001 fefd ffff 003f 0000 2941 0254 fe00
00001d0 ffff fefd ffff 2980 0254 f08b 0380 fe00
00001e0 ffff fefd ffff 1a0b 05d5 2b76 1747 fe00
00001f0 ffff fefd ffff 4581 1d1c 8e3a 1d1a aa55
0000200

Vidíme, že až do adresy 0x1b0 jsou v MBR samé nuly, což asi nebude bootloader.

Proto uděláme toto:

#grub
grub> find /boot/grub/stage1

Tento příkaz najde všechny disky, na kterých je soubor "stage1", který GRUB potřebuje při boot-u. Příkaz vypíše třeba toto:

find /boot/grub/stage1
 (hd0,0)
 (hd1,0)
 (hd3,0)

Můj nový disk je "hd3", takže udělám toto:

grub> root (hd3,0)
root (hd3,0)
 Filesystem type is ext2fs, partition type 0xfd
grub> setup (hd3)
setup (hd3)
 Checking if "/boot/grub/stage1" exists... yes
 Checking if "/boot/grub/stage2" exists... yes
 Checking if "/boot/grub/e2fs_stage1_5" exists... yes
 Running "embed /boot/grub/e2fs_stage1_5 (hd3)"...  17 sectors are embedded.
succeeded
 Running "install /boot/grub/stage1 (hd3) (hd3)1+17 p (hd3,0)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded
Done.
grub> quit
quit

O tom, že se dílo podařilo, se můžete přesvědčit opět příkazem

xeric:~# dd if=/dev/sdc bs=512 count=1 | hexdump
1+0 records in
1+0 records out
512 bytes (512 B) copied, 2.2194e-05 s, 23.1 MB/s
0000000 48eb 0090 0000 0000 0000 0000 0000 0000
0000010 0000 0000 0000 0000 0000 0000 0000 0000
*
0000030 0000 0000 0000 0000 0000 0000 0000 0203
0000040 00ff 2000 0001 0000 0200 90fa f690 80c2

(atd)

0000190 7369 006b 6552 6461 2000 7245 6f72 0072
00001a0 01bb b400 cd0e ac10 003c f475 00c3 0000
00001b0 0000 0000 0000 0000 0000 0000 0000 0180
00001c0 0001 fefd ffff 003f 0000 2941 0254 fe00
00001d0 ffff fefd ffff 2980 0254 f08b 0380 fe00
00001e0 ffff fefd ffff 1a0b 05d5 2b76 1747 fe00
00001f0 ffff fefd ffff 4581 1d1c 8e3a 1d1a aa55
0000200

Přejmenování RAID zařízení: mdX->mdY

Tuto operaci budete potřebovat asi jen v případě, kdy budete chtít přidat disky s RAIDem z jednoho počítače do jiného, ve kterém už RAID je, a budete jim chtít přidělit nějaké vaše vlastní jméno. Příklad přejmenování md0 na md6:

mdadm --stop /dev/md0
mdadm --assemble /dev/md6 [--super-minor=0] --update=super-minor /dev/sda5 /dev/sdb5

První příkaz stopne RAID na /dev/md0, aby mohl provést změny v superblocích jeho disků. Druhý příkaz poskládá ("assemble") RAID /dev/md6 z disků, které byly součástí /dev/md0, což zařídí nepovinná podmínka "--super-minor=0". Vysvětlení: Každý disk, který je součástí RAIDu, má ve svém superbloku zapsáno číslo "minor", které odpovídá číslu N jména RAID zařízení /dev/mdN. Proto také u libovolného disku, který byl součástí Linux RAID pole a který připojíte do počítače, můžete zjistit jméno mdN RAID zařízení, do kterého disk patřil, pomocí příkazu "mdadm --examine --scan /dev/sdXY"

Option "--update=super-minor" pak zařídí, aby se při operaci assemble v superblocích disku přepsalo minor číslo disku z (/dev/md)0 na (/dev/md)6 Příklad.jpg

Je třeba updatovat ramdisk..!!!

update-initramfs -u


Zvětšení kapacity RAID zařízení a roztažení LVM

  1. Z RAID pole, které chci zvětšit, odeberu 1 disk (přes --fail a --remove)
  2. Přidám do RAID pole nový, větší disk (či diskový oddíl) a po přidání roztáhnu RAID pole na maximální dostupnou kapacitu ( mdadm --grow /dev/mdX --size=max )
  3. Poté vyhodím i druhý původní disk (opět přes --fail a --remove) a místo něj přidám do RAID pole druhé nové (větší) blokové zařízení, aby se mohlo pole plně zrekonstruovat.
  4. Nakonec roztáhnu LVM physical volume přes celou kapacitu RAID pole ( pvresize /dev/mdX )

Potřebuju změnit velikost partitions (včetně systémového), na nové není místo, co dělat?

  • zapojte do systému jakýkoli nový disk, na kterém vytvoříme správný partitioning.
  • boot from SystemRescueCD (výhoda: malé CD, které umí 32bit i 64bit a má všechny nástroje pro správu disků)
  • Stopněte md0, pokud jede:
mdadm --stop /dev/md0
  • a nahoďte si jej pod jiným jménem (nebojte, změna jména nemá žádné trvalé následky:)
mdadm --assemble /dev/md10 /dev/sd?? /dev/sd??
  • vytvořte nový md0 s novým diskem
mdadm --create /dev/md0 --level=raid1 --raid-devices=1 /dev/nejaky_novy_disk
mkfs.ext2 /dev/md0
  • namountujte obě RAID zařízení:
mount /dev/md10 /media/old
mount /dev/md0 /media/new
  • zkopírujte obsah:
rsync -a /media/old /media/new
  • nainstalujte grub:
mount -o bind /dev/ /media/new/dev
mount -o bind /proc/ md0/proc
mount -o bind /sys/ md0/sys
chroot /dev/new
grub-install /dev/md0
  • zkuste, jestli nabootujete. Já jsem nenabootoval a musel jsem udělat ještě toto:
#grub
grub> find /boot/grub/stage1
find /boot/grub/stage1
 (hd0,0)
 (hd1,0)
 (hd3,0)
grub> root (hd0,0)
root (hd0,0)
 Filesystem type is ext2fs, partition type 0xfd
grub> setup (hd0)
setup (hd0)
 Checking if "/boot/grub/stage1" exists... yes
 Checking if "/boot/grub/stage2" exists... yes
 Checking if "/boot/grub/e2fs_stage1_5" exists... yes
 Running "embed /boot/grub/e2fs_stage1_5 (hd0)"...  17 sectors are embedded.
succeeded
 Running "install /boot/grub/stage1 (hd0) (hd0)1+17 p (hd0,0)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded
Done.
grub> root (hd1,0)
root (hd1,0)
 Filesystem type is ext2fs, partition type 0xfd
grub> setup (hd1)
setup (hd1)
 Checking if "/boot/grub/stage1" exists... yes
 Checking if "/boot/grub/stage2" exists... yes
 Checking if "/boot/grub/e2fs_stage1_5" exists... yes
 Running "embed /boot/grub/e2fs_stage1_5 (hd1)"...  17 sectors are embedded.
succeeded
 Running "install /boot/grub/stage1 (hd1) (hd1)1+17 p (hd1,0)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded
Done.
grub> root (hd3,0)
root (hd3,0)
 Filesystem type is ext2fs, partition type 0xfd
grub> setup (hd3)
setup (hd3)
 Checking if "/boot/grub/stage1" exists... yes
 Checking if "/boot/grub/stage2" exists... yes
 Checking if "/boot/grub/e2fs_stage1_5" exists... yes
 Running "embed /boot/grub/e2fs_stage1_5 (hd3)"...  17 sectors are embedded.
succeeded
 Running "install /boot/grub/stage1 (hd3) (hd3)1+17 p (hd3,0)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded
Done.
grub> quit
quit
  • Obsah boot sektoru si můžete prohlédnout např. takto:
dd if=/dev/sda bs=512 count=1 | hexdump
  • pokud ano, zkopírujte na nový disk i obsah ostatních disků
  • Namountuj
  • mount -o bind /dev/ /media/md0