Hlavní navigace

O (nejen) softwarových diskových polích (3)

15. 12. 2003
Doba čtení: 4 minuty

Sdílet

V posledním dílu seriálu si ukážeme praktický postup, jak vytvořit RAID 1 pole a jak na něj převést existující systém.

Příklad vytvoření RAID pole

Uvažujme následující situaci: Máme počítač s jedním diskem (hda), do kterého jsme se rozhodli přidat další disk (jako hdc) a udělat softwarový mirroring. Disk hda má momentálně následující rozdělení:

   Device Boot    Start       End    Blocks   Id  System
/dev/hda1             1      1041    524632+  82  Linux swap
/dev/hda2          1042    155061  77626080   83  Linux

Na disku hdc vytvoříme oddíl pro swap a oddíl, ze kterého budeme dělat pole:

   Device Boot    Start       End    Blocks   Id  System
/dev/hdc1             1      1041    524632+  82  Linux swap
/dev/hdc2          1042    155061  77626080   fd  Linux raid autodetect

POZOR! Pokud koupíme větší disk, je nutno dát pozor, aby oddíl hdc2 nebyl větší než hda2! Jinak disk hda2nepůjde v konečné fázi přidat do RAID pole! Může být buď stejně velký (v případě podobné geometrie disku), nebo menší.

Teď se ubezpečíme, že máme RAID podporu přímo zakompilovanou v kernelu. Pokud jej budeme kompilovat, v menuconfigu zaškrtneme v menu  Multi-device support (RAID and LVM) položky Multiple devices driver support (RAID and LVM), RAID support a nakonec RAID-1 (mirroring) mode. Samozřejmě překompilujeme a rebootujeme. Je možné, že vaše distribuce jádro se zakompilovanou podporou již obsahuje.

Nyní nainstalujeme raidtools2 a pak vytvoříme soubor /etc/raidtab s obsahem:

raiddev                 /dev/md0
raid-level              1
nr-raid-disks           2
nr-spare-disks          0
persistent-superblock   1
chunk-size              32
device                  /dev/hdc2
raid-disk               0
device                  /dev/hda2
failed-disk             1

Zde vidíte využití failed-disk. Na hda2 máme současný systém a ten při vytváření pole nesmí být dotčen.

Nyní můžeme pole vytvořit. Zadáme příkaz mkraid /dev/md0:

lemming:/etc# mkraid /dev/md0
handling MD device /dev/md0
analyzing super-block
disk 0: /dev/hdc2, 208845kB, raid superblock at 208768kB
disk 1: /dev/hda2, failed

Nyní by již zařízení mělo být funkční. Můžeme to zjistit příkazem cat /proc/mdstat:

lemming:/etc# cat /proc/mdstat
Personalities : [raid1]
read_ahead 1024 sectors
md0 : active raid1 ide/host0/bus1/target0/lun0/part2[0]
      208768 blocks [2/1] [U_]

unused devices: <none>

Zde vidíte, že je pole aktivní, ale je funkční pouze jeden disk. Pokračujeme vytvořením ext3 filesystému: mke2fs -J size=32 /dev/md0.

Teď přišel čas zkopírovat RAID pole na současný systém. To není dobré dělat za provozu. (V dalším výkladu budu předpokládat, že se váš bootovací image (to je to, co LILO píše při startu: Loading Linux…) jmenuje Linux. V případě pochybností se podívejte do /etc/lilo.conf, co je tam uvedeno jako parametr default.)

Nejlepší je Linux nabootovat do toho nejminimálnějšího módu – při bootu podržet klávesu shift a LILU zadat parametry Linux init=/bin/sh. (Linux je výše zmiňované jméno image).

Systém se probudí prakticky ihned po spuštění kernelu a detekci zakompilovaných zařízení. Kernel by měl zdetekovat RAID pole.

Připojíme ho: mount /dev/md0 /mnt. Nyní na něj přesuneme celý filesystém. Pokud někdo chce, může si parametry příkazu cp odvodit za domácí úkol, pro ostatní je napíšu: cp -axv / /mnt. Vy máte za domácí úkol alespoň určit, proč jsou právě takovéto :-)

Teď můžeme systém souborů odmountovat (umount /mnt), pro jistotu syncnout disky (sync) a počítač zresetovat. A zkusíme z nového filesystému nabootovat. LILu zadáme parametr Linux root=/dev/md0. Pokud jsme všechno provedli správně, měl by se systém rozjet. Jestliže píše Unable to mount root fs, pravděpodobně se nestartuje RAID zařízení (není v kernelu).

Pokud systém nabootuje, máte za sebou nejtěžší část konverze. Teď už uděláme jen některé dočišťující úkony.

Předně překonfigurujeme LILO, v /etc/lilo.con­fpřidejte nebo změňte řádky:

boot=/dev/md0
raid-extra-boot="/dev/hda,/dev/hdc"
root=/dev/md0

A zapište konfiguraci příkazem: lilo. Dále upravte /etc/fstab, aby se využíval swap oddíl z obou disků (nebo to nemusíte dělat, pokud nepotřebujete, aby swap automaticky běžel i po pádu disku). fstab musí obsahovat řádky:

# <file system> <mount point> <type> <options> <dump> <pass>
/dev/hda1    none       swap   sw        0   0
/dev/hdc1    none       swap   sw        0   0

Udělejte mkswap /dev/hdc1.

Ještě nesmíme zapomenout opravit /etc/raidtab, aby odpovídal skutečnému stavu – řádek:

failed-disk             1

Zaměňte za:

raid-disk               1

Zkuste rebootovat počítač, měl by naběhnout. Ověřte, zda běží z RAIDu:

lemming:~# mount
/dev/md0 on / type ext3 (rw,errors=remount-ro)
proc on /proc type proc (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)

Důležité je, že root (/) je namountován na /dev/md0. Jestliže jste konfigurovali swap, ověřte správnou funkci výpisem cat /proc/swaps.

Nyní přišel čas zrušit váš starý filesystém a uvést pole do normálního stavu. Pomocí fdisku změňte typ partitionu /dev/hda2 nafd:

   Device Boot    Start       End    Blocks   Id  System
/dev/hda1             1      1041    524632+  82  Linux swap
/dev/hda2          1042    155061  77626080   fd  Linux raid autodetect

(Pokud vám nyní fdisk řekne, že musíte rebootovat, učiňte tak.)

A jsme u posledního kroku. Udělejte raidhotadd /dev/md0 /dev/hda2 a ověřte výsledek:

lemming:~# cat /proc/mdstat
Personalities : [raid1]
read_ahead 1024 sectors
md0 : active raid1 ide/host0/bus1/target0/lun0/part2[2] ide/host0/bus0/target0/lun0/part2[0]
      208768 blocks [2/1] [U_]
      [==========>..........]  recovery = 54.4% (113664/208768) finish=0.5min speed=2920K/sec
unused devices: <none>

Nyní se pole synchronizuje. Za nějakou dobu synchronizace doběhne a pole bude plně funkční:

root_podpora

fw-games:~# cat /proc/mdstat
Personalities : [raid1]
read_ahead 1024 sectors
md0 : active raid1 ide/host0/bus1/target0/lun0/part2[1] ide/host0/bus0/target0/lun0/part2[0]
      208768 blocks [2/2] [UU]

unused devices: <none>

A je hotovo.

Nyní můžete případně zkusit katastrofické scénáře – počítač vypnout, odpojit jeden z disků a zkusit nabootovat. Jenom upozorňuji, že po takovém experimentu je vždy nutné po opětovném přidání disku „vypadlý“ disk přidat pomocí raidhotadd a počkat na dokončení synchronizace.

Byl pro vás článek přínosný?