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.confpř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í:
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.