RAID (FAQ)

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

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