hardware
Softwarový RAID a LVM Piotr Wolny
S
tále více našich počítačů je vybaveno více než jedním pevným diskem. Obvykle na nich vytváříme několik oddílů, protože GNU/Linux nám umožňuje připojování různých částí souborového systému (např. /usr nebo /home) z nezávislých zařízení. Tím ale nekončí možnosti využití pevných disků v GNU/Linuxu. Již dlouho tento systém podporuje dva pokročilé mechanismy ukládání dat: Softwarový RAID a Logical Volume Manager. S jejich použitím můžeme zvětšit výkonnost disků, a také zvýšit bezpečnost uložených dat. I když se Softwarový RAID a Logical Volume Manager (LVM) často spojují s velkými servery vybavenými desítkami disků, s úspěchem je můžeme použít také v domácích počítačích vybavených dvěma či třemi pevnými disky. Navíc je LVM užitečný i při použití s jedním diskem.
rámeček Úrovně RAID. Obecně RAID umožňuje: • zvětšení bezpečnosti dat, pokud využíváme „nadbytečné” disky (bez nadbytečných disků je náš RAID více náchylný k havárii než samostatné disky); • rychlost čtení a zápisu dat se zvyšuje, pokud použijeme stripping na dva nebo více nezávislých fyzických zařízení; • spojení několika nezávislých zařízení v jeden souborový systém může zvětšit pohodlí při administraci systému na určitých konfiguracích. Pamatujme však na to, že RAID má jisté hranice: • jednou vytvořené zařízení RAID nemůže být rozděleno na oddíly, což
RAID a LVM
DVD
Po spuštění Linux+ Live DVD je možno otestovat probíranou problematiku.
Na DVD disku
Na DVD disku se nachází programy popisované v článku.
54
leden 1/2005
Historicky je starším zařízením softwarový RAID. Idea Redundant Arrays of Inexpensive Disks není tak stará, protože pochází z roku 1987. Tehdy byla vypracována koncepce spojení mnoha levných disků v jedno velké a rychlé zařízení. Aby havárie jednoho z nich nezpůsobila ztrátu dat na celé matrici, byl v koncepci použit „nadbytečný” disk (anglicky redundant) nezbytný pro rekonstrukci dat v případě havárie. Tradiční RAID se vytváří hardwarově, nejčastěji spojením SCSI disků, které jsou po připojení k počítači viditelné jako jedno zařízení. GNU/Linux nám umožňuje vybudování RAID softwarovým spojením do pole a mohou to být zároveň zařízení SCSI, IDE stejně jako SATA. Pro informace o různých typech RAID polí si přečtěte
Obrázek 1. V GNU/Linuxu můžeme disky různého typu spojovat do jednoho zařízení RAID nebo LVM
softwarový raid a logical volume manager
občas způsobuje potřebu konfigurování několika RAID zároveň; • jednou vytvořený RAID nemůže být rozšířen o více disků. Díky RAID, co počítač vidí jako jedno blokové zařízení, může být ve skutečnosti kombinace několika oddílů na různých pevných discích. Logical Volume Manager jde o mnoho dále. Jím zpřístupněné blokové zařízení se může fyzicky nacházet na libovolném množství disků nebo oddílů ale je umožněno jejich zvětšování, zmenšování nebo přenášení. Funguje to tak, jakoby jedna tabulka rozdělení obsahovala nejenom několik disků, ale také umožňovala přidávání/ odstraňování, zvětšování/zmenšování oddílů bez jakékoliv přestávky při fungování systému – často také bez odpojení oddílů. Možné je také přidávání dalších disků. Shrneme-li to, díky LVM dostaneme: • celkovou svobodu v přidělování fyzických disků nebo oddílů jako blokových zařízení v systému (např. zařízení připojené jako /home se může skládat z jednoho IDE disku a poloviny SCSI disku); • možnost jednoduchého zvětšování a zmenšování (pokud to systém souborů umožňuje) zařízení viděných operačním systémem a jejich přenášení mezi disky (to zahrnuje také možnost jednoduchého přidávání a odebírání disků do systému);
• rozdělení (anglicky stripping) dat na dvě nebo více nezávislých zařízení pro zvětšení výkonu; • funkci zjednodušující pořizování bezpečnostních záloh (snapshot). Vadou linuxového LVM je chybějící podpora “nadbytečných” disků, ale můžeme jej propojit se softwarovým RAID-1 pro dodatečnou bezpečnost.
Vytváříme softwarový RAID Softwarový RAID můžeme založit na nejméně dvou libovolných oddílech. Aby to celé mělo nějaký smysl, měly by se oddíly nacházet na samostatných discích. Vytvoření RAID na dvou oddílech jednoho disku nezvětší bezpečnost dat ani nezrychlí diskové operace. Do jednoho RAID pole můžeme spojit oddíly z úplně odlišných disků např. IDE, SCSI nebo SATA ale zpravidla bude tento hybrid pracovat rychlostí nejpomalejšího z nich. Pokud chceme spojit dva IDE disky, měly by se nacházet na různých IDE kanálech, pokud budou připojeny jedním kabelem, zpozorujeme výrazný pokles výkonu. Softwarový RAID je realizován přímo jádrem systému. Jádro musí obsahovat podporu pro RAID. Při konfiguraci jádra, v části Multi-device support (RAID and LVM), musíme označit RAID support a požadované módy RAID pole (můžeme označit všechny). Nejlepší je zkompilovat do jádra podporu RAID pole natrvalo. Nemusíme také sami kompilovat jádro
Obrázek 2. Ovladače RAID a LVM najdeme v linuxovém jádře
hardware
RAID a LVM při instalaci distribuce
Instalátory většiny moderních distribucích umožňují vytvoření zařízení RAID a LVM již při instalaci GNU/Linuxu. Například v Aurox Linuxu postačí, pokud vybereme volbu Ruční vytvoření oddílů, pomocí programu Disk Druid budeme moci vytvořit RAID, LVM či dokonce LVM na RAID. V novějších verzích Mandrakelinuxu musíme vybrat ruční rozdělení na oddíly a později se navíc ještě přepnout do rozšířeného módu. Instalátor této distribuce má podobné možnosti, ale vypadá to tak, že neumožňuje vytvoření LVM na RAID. Pokud víme jak fungují zařízení RAID a LVM, jejich vytvoření s pomocí některého z těchto instalátorů by nemělo činit žádné problémy. Například abychom vytvořili RAID v Aurox Linuxu, klikneme na RAID, vybereme první z disků a označíme Vytvořit oddíl softwarového RAID. Následně to stejné opakujeme pro další disky. Nakonec ještě jednou klikneme na RAID a vybereme Vytvořit zařízení RAID. Pak budeme moci zadat jeho typ, bod připojení a systém souborů, který na něm bude vytvořen. LVM vytváříme podobně – nejdříve vytvoříme jeden nebo několik oddílů typu physical volume LVM a později klikneme na LVM a vytvoříme příslušné logické svazky. Mé zkušenosti s tvořením RAID a LVM s těmito instalátory distribucí nejsou dobré. Doporučuji instalaci na tradiční zařízení a teprve později vytvoření RAID nebo LVM a následný přenos příslušných adresářů.
a můžeme se spolehnout to dodávané s distribucí. Většina novějších distribucí najdeme moduly linear, raid0, raid5 atd., nutné pro práci pole. Stačí použít příkaz cat /proc/mdstat a zjistíte, zda to vaše obsahuje podporu pro softwarový RAID. Pokud se zobrazí hlášení o chybějícím souboru, musíme si jádro nakonfigurovat a zkompilovat sami. Softwarový RAID je v jádře GNU/ Linuxu již dlouhou dobu – je standardně přítomna v jádrech série 2.4.x a 2.6.x, ale existují také možnost použití s jádry 2.2.x a dokonce i 2.0.x. Všechny zde popisované činnosti jsem prováděl na jádře 2.6.9, měli by vypadat identicky i ve starších verzích jádra zahrnujíc v to sérii 2.4.x. Mimo podpory v jádře systému budeme potřebovat ještě dva balíčky: mdadm a raidtools (v Debianu – raid-
www.lpmagazine.org
55
hardware
tools2). Ten první obsahuje nástroje pro aktivování a zastavování RAID zařízení a druhý přidává základní nástroje pro tvorbu polí. Tyto balíčky najdete ve všech populárních linuxových distribucích. Řekněme, že náš operační systém je nainstalován na disku sda a na RAID chceme využít IDE disky: hda a hdd. Na obou discích jsme vytvořili oddíl, přičemž na RAID mají být určeny hda2 a hdd2. Předtím než začneme vlastní nastavování, můžeme si otestovat rychlost těchto disků před tím, než z nich uděláme pole. Jak dobře otestovat výkonnost disků s využitím programu Bonnie++, popisuji v rámečku Jak testovat disky? Při návrhu systému, ve kterém hraje důležitou roli výkonnost disků, je dobré se řídit doporučeními programu Bonnie++ nebo podobného. V tomto článku, abych rychle a názorně ukázal rozdíly mezi konfiguracemi RAID využiji program dd. Například po vytvoření oddílu hda2 souborového systému ext2, jeho připojení na /mnt/test/ jsem spustil příkaz: cd /mnt/test; dd if=/dev/zero of= vymaz_ mne count=2000000.
Jako výsledek jsem obdržel následující rychlost lineárního zápisu jednoho velkého souboru: 1024000000 bytes transferred in 28,490542 seconds (35941752 bytes/sec)
Při využití souborového systému ext3 vzrostl čas potřebný na vykonání této operace narostl na 32,8 sekundy.
RAID-0 Nejdříve vyzkoušíme RAID-0. Abychom jej vytvořili, musíme vytvořit soubor /etc/ raidtab. Nejdříve do něj zapíšeme následující řádky: raiddev /dev/md0 raid-level
0
nr-raid-disks
2
persistent-superblock 1 chunk-size
4
device
/dev/hda2
raid-disk
0
device
/dev/hdd2
raid-disk
1
při zápisu do pole (není možno jednoznačně říci, jaká hodnota zajistí nejlepší výkon, ale zjednodušeně můžeme říci, že bude rovna block size našeho souborového systému). Dále vyjmenováváme a číslujeme použité oddíly. Dalším krokem je změna identifikátorů oddílů s užitím programu fdisk, na kterých bude pole pracovat. Měli by být typu fd, čili Linux raid auto. Bez tohoto úkonu bude pole pracovat, ale nebude automaticky detekováno jádrem systému. Když máme všechno hotovo, spustíme příkaz mkraid /dev/md0. Samozřejmě, že jeho spuštěním přijdeme o všechna data, která jsme měli na oddílech vyjmenovaných v /etc/raidtab. Jako výsledek bychom měli obdržet něco takového: handling MD device /dev/md0
Jak je vidět, soubor není komplikovaný. První řádek popisuje, kterého zařízení se tato konfigurace týká. Za md0 můžeme mít libovolné množství jiných zařízení (samozřejmě by se měly nacházet na jiných oddílech). Volbou raid-level nastavujeme typ pole, v tomto případě RAID-0 čili stripe. V nr-raid-disk zadáváme kolik oddílů má fungovat v tomto zařízení; persistent-superblock způsobí, že v superblocích zadaných později budou zapsány informace potřebné pro automatické rozpoznání pole při spouštění jádra systému; chunk-size nastavuje na jaké nejmenší jednotky v kilobajtech budou dělena data
analyzing super-block disk 0: /dev/hda2, 14659312kB, raid superblock at 14659200kB disk 1: /dev/hdd2, 18922680kB, raid superblock at 18922560kB
Jak vidíme, mimo to, že se oddíly liší velikostí, bylo pole vytvořeno. Teď si jej můžeme prohlédnout pomocí příkazu cat /proc/mdstat. Měli bychom spatřit například něco takového: Personalities : [linear] [raid0] [raid1] [raid5] [raid6] [raid10] md0 : active raid0 hdd2[1] hda2[0] 33581760 blocks 4k chunks unused devices: <none>
Od této chvíle pracujeme se zařízením /dev/md0 jako s oddílem pevného disku. Můžeme např. použít příkazy: # mkfs.ext3 /dev/md0 # mount /dev/md0 /mnt/test/ # cd /mnt/test/ # dd if=/dev/zero of=vymaz_mne count=2000000
Na mém systému tento rychlý test zobrazil: 1024000000 bytes transferred in 18,410448 seconds (55620591 bytes/sec)
Obrázek 3. Všechny potřebné informace pro vytvoření RAID a LVM můžeme nalézt v angličtině v příslušných HOWTO
56
leden 1/2005
Vidíme skoro dvojnásobný nárůst rychlosti zápisu tohoto souboru (z 32,8 na 18,4 sekundy). Podobné pole vytvořené v mém počítači na discích SATA si se zápisem poradilo za 14 sekund. Tímto způsobem jsme získali zařízení, které by mělo fungovat značně rychle-
hardware
softwarový raid a logical volume manager
ji než samostatný disk, jak při operacích čtení tak při zápisu. Můžeme jej připojit v libovolném místě systému souborů, ve kterém se objevuje intenzivní používání disků např. v /var/www. Stačí pouze patřičný zápis do /etc/fstab a přenesení starých dat na nové zařízení. Pokud chceme použít pole v několika různých částech souborového systému, musíme přidat více disků nebo již vlastněné disky rozdělit na více oddílů, následně je definovat v /etc/raidtab další zařízení /dev/md1, md2 atd., všechny inicializovat (mkraid), naformátovat a připojit. Pokud jsme správně nainstalovali balíčky mdadmin a raidtools, měly by skripty odpovědné za zamykání systému zastavit pole (vykonat příkaz raidstop s příslušnými parametry), než budou naše disky odpojeny. V mnoha distribucích bude také fungovat odeslání upozorňovacího e-mailu administrátorovi systému o havárii některého z disků. Zmiňované balíčky mají ještě několik dalších funkcí – je dobré prohlédnout si jejich konfigurační soubory v adresářích /etc/default/ a /etc/mdadm/.
RAID-1 Řekněme, že jsme se rozhodli změnit svou konfiguraci, vytvořením RAID-1 místo RAID-0 – je nutno říci, že teprve RAID-1 je skutečným RAID, protože v RAID-0 nejsou „nadbytečné” disky. Než začneme vytvářet nové zařízení, musíme
deaktivovat předchozí. Prvním krokem je odpojení souborových systémů v poli (např. umount /var/www). Následně provedeme příkaz raidstop /dev/md0. Teprve teď můžeme změnit nastavení oddílů na discích a vytvořit nové pole. Pokud tyto kroky neprovedeme ani konfigurace nového pole ani změny v nastavení oddílů nebudou trvalé a navíc mohou způsobit nenávratnou ztrátu dat. Konfigurační soubor /etc/raidtab pro RAID-1 je identický s použitým pro RAID-0: raiddev /dev/md0 raid-level
1
nr-raid-disks
2
persistent-superblock 1 chunk-size
4
device
/dev/hda2
raid-disk
0
device
/dev/hdd2
raid-disk
1
Následně provedeme příkaz mkraid md0 a obdržíme výpis: handling MD device /dev/md0 analyzing super-block disk 0: /dev/hda2, 14659312kB, raid superblock at 14659200kB
/dev/
Integrace RAID/LVM se systémem
To, kam připojíme vzniklá zařízení, závisí na způsobu, jakým nám bylo pomáháno s konfigurací LVM nebo RAID, stejně jako na specifikaci našeho systému. Mohou zrychlovat přístup k datům (pokud využíváme rozdělování přístupu na více fyzických zařízení) tak i zlepšit správu místa na disku a zvětšit bezpečnost dat. Proto ho více využívejme v oblastech, kde je vyžadována některá ze jmenovaných oblastí. Prvními umístěními, které se nabízejí jsou /home a /var – zpravidla zde jsme předpokládali moc nebo málo místa na disku a také tam máme obecně nejdůležitější data. V případě, že naše nové zařízení pracuje rychleji než obvyklé disky (díky využití strip), můžeme se rozhodnout o přenesení na něj také adresáře /tmp – existují aplikace, které jej intenzivně využívají, nebo také /usr, což může minimálně zrychlit spouštění programů na kancelářském počítači. Abychom přenesli data z jednoho zařízení na nové, můžeme jej jednoduše připojit na dočasné umístění (např. /mnt/tmp) a použít příkaz, např. cp -ax /var/* /mnt/tmp/, následně vyprázdnit ukázkový adresář /var a zaktualizovat /etc/fstab aby bylo toto zařízení připojováno v tomto místě.
/dev/hda2 appears to be already part of a raid array -- use -f to force the destruction of the old superblock mkraid: aborted.
Jak je vidět, systém odmítl vytvoření nového pole na zařízeních, na kterých jsme již dříve vytvořili RAID-0. Jsme si však jistí, že chceme úplně zrušit předchozí pole, proto zadáme příkaz: mkraid -R /dev/md0 a dostaneme např.: DESTROYING the contents of /dev/md0 in 5 seconds, Ctrl-C if unsure! handling MD device /dev/md0 analyzing super-block disk 0: /dev/hda2, 14659312kB, raid superblock at 14659200kB disk 1: /dev/hdd2, 18922680kB, raid superblock at 18922560kB
Obrázek 4. Ukázková konstrukce LVM
Od této chvíle je zařízení /dev/md0 připraveno k použití. Má kapacitu 14 GB, čili stejně jako menší z použitých oddílů. Vytvoříme na něm souborový systém a otestujeme, jak pracuje. Příkaz dd, použitý stejně jako v předchozích příkladech potřeboval tentokrát více než 35 sekund na provedení svého úkolu. Vidíme, že RAID-1 při zápisu pracuje výrazně pomaleji než samostatný pevný disk.
www.lpmagazine.org
57
hardware
Rychlý test s užitím příkazu dd a zařízení /dev/zero, trval na mém systému 20 sekund, proto RAID-5 pracuje rychleji než samostatný disk, ale samozřejmě pomaleji než RAID-0.
Výpis 1. Ukázkový výpis generovaný vgdisplay --- Volume group --VG Name
IDE_disky
System ID Format
lvm2
Metadata Areas
1
Metadata Sequence No
1
VG Access
read/write
VG Status
resizable
MAX LV
0
Cur LV
0
Open LV
0
Max PV
0
Cur PV
1
Act PV
1
VG Size
37,27 GB
PE Size
4,00 MB
Total PE
9540
Alloc PE / Size
0 / 0
Free
9540 / 37,27 GB
PE / Size
VG UUID
Záložní disky
OEEclx-9gIP-Oqyl-R1cH-9tkK-Mlm7-rWW4xi
Daní za vyšší bezpečnost dat je zmenšení výkonnosti. Pokud na jednom z disků dojde k havárii, bude pole pracovat dále a v systémových log souborech se objeví informace o nutnosti jeho výměny.
RAID-5 Vytvoření RAID-5 není o moc složitější než RAID-0 a RAID-1. Ukázkový /etc/raidtab, který jsem vytvořil na svém počítači, může vypadat takto:
Pro zvětšení bezpečnosti pole RAID-1 a RAID-5 (a také zde nepopisovaných RAID-6 a RAID-10) můžeme využít záložní disky (spare disk). Tento disk není normálně používán – žádná data na něj nejsou zapisována ani z něj čtena. Ve chvíli, kdy je jeden z disků poškozen, pole automaticky vytvoří jeho obsah na prvním dostupném spare disk. Díky tomu může být vypnutí systému s cílem výměny poškozeného disku naplánováno na pozdější dobu – můžeme čekat i do havárie dalšího disku a nepřijdeme o žádná data. Pokud chceme do pole přidat záložní disk, stačí do /etc/raidtab dopsat např. tento řádek:
raid superblock at 18922560kB disk 2: /dev/sda3, 39070080kB,
device
/dev/sdd1
raid superblock at 39070016kB
spare-disk
0
disk 3: /dev/sdb9, 9775521kB, raid superblock at 9775424kB
Vytváříme LVM
Takto vytvořené zařízení má kapacitu cca 27 GB. Proč? Musíme vynásobit kapacitu nejmenšího z použitých oddílů (9775521kB ~= 9GB) počtem disků a odečíst velikost jednoho oddílu potřebného na zrcadlení, proto 9*4-9=27.
Logical Volume Manager sám o sobě není těžký ke zkonfigurování. To co mnoho uživatelů odrazuje je používaná terminologie. Než přistoupíme k práci s ním, musíme si osvojit několik základních termínů, používaných v LVM – bez toho se velmi rychle ztratíme.
raiddev /dev/md0 raid-level
5
nr-raid-disks
4
persistent-superblock 1 chunk-size
4
device
/dev/hda2
raid-disk
0
device
/dev/hdd2
raid-disk
1
device
/dev/sda3
raid-disk
2
device
/dev/sdb9
raid-disk
3
Zadaný příkaz mkraid
-R /dev/md0 ukázal:
DESTROYING the contents of /dev/md0 in 5 seconds, Ctrl-C if unsure! handling MD device /dev/md0 analyzing super-block disk 0: /dev/hda2, 14659312kB, raid superblock at 14659200kB disk 1: /dev/hdd2, 18922680kB,
58
leden 1/2005
Obrázek 5. Konfigurace našich zařízení vyžaduje určité příkazy pracující z příkazové řádky
hardware
softwarový raid a logical volume manager
LVM vytváří dodatečnou abstraktní vrstvu mezi zařízeními na ukládání dat a souborovým systémem operačního systému. Následně se mezi oddílem disku a systémem souborů objevují některé termíny: • physical volume (PV) – fyzický svazek, jednoduše se jedná o pevný disk nebo častěji oddíl na pevném disku, může to být však i zařízení softwarového RAIDu; • volume group (VG) – skupina svazků, je to jeden nebo několik fyzických svazků (pracujeme s ní vždy i když máme jen jeden PV); • logical volume (LV) – logický svazek (systém vidí LV jako blokové zařízení, proto když využíváme LVM, vytváříme souborový systém (např. ext3) ne na oddíle, ale na LV; podobně, v systému připojujeme LV a ne oddíl; na jedné skupině svazků vytváříme jeden nebo více LV); • physical extent (PE) a logical extent (LE) – fyzické rozšíření a logické rozšíření (data na fyzických a logických svazcích jsou dělena na menší jednotky např. po 4 MB; velikost PE a LE jsou stejné). Pro fungování LVM potřebujeme v jádře podporu pro Device mapper. Při konfiguraci jádra ji nalezneme v oddíle Multiple devices driver support. Z dostupných voleb bychom měli zatrhnout přinejmenším Snapshot target a Mirror target – i když jsou označeny jako experimentální, jsou již běžně používány (nejdříve musíme vybrat Prompt for development and/or incomplete code/drivers v části Code maturity level options). Nejlepší je LVM zkompilovat natrvalo do jádra, ale v některých distribucích jej najdeme v podobě modulu s názvem dm-mod. Pokud máme distribuční jádro, stačí pouze nahrát tento modul. Měli bychom používat jádra
Úrovně RAID: •
•
•
•
Lineární (linear mode). V tomto módu jsou dva nebo více oddílů k sobě přidávány aby vytvořili jedno velké RAID zařízení. Pří zápisu na toto zařízení data nejdříve zaplní celý první oddíl / (první disk), později druhý atd. Výsledná kapacita zařízení je rovna součtu velikostí všech použitých oddílů. Nezískáme zvětšení rychlosti a havárie jednoho disku způsobí ztrátu dat celého pole. RAID-0 (stripe). Kapacita dvou nebo více zařízení je sčítána, ale data jsou zapisována současně na více zařízeních a stejně i načítána. Pokud máme tímto způsobem spojeny tři disky a nastavili jsme stripe size na 16 kB, spustí soubor o velikosti 48 kB současný zápis na všechny disky a na každý bude nahráno pouze 16 kB dat. Jak je možno domyslet, tato konfigurace zvětšuje mnohonásobně rychlost přenosu dat. Kapacita je rovna součtu disků, ale musí mít stejnou velikost. Pokud jsou různé, je na všech discích používána kapacita pouze nejmenšího z nich. Havárie jednoho disku způsobí ztrátu dat celého pole. RAID-1 (mirroring). Stejná data jsou zapisována současně na dva a více disků. Načítá se z libovolného z nich. Kapacita tohoto pole je rovna velikosti nejmenšího oddílu. Rychlost zápisu je o něco menší než zápis na samostatný disk. V případě havárie jednoho disku může systém pracovat dále, nenastává žádná ztráta dat. RAID-5. Vyžaduje tři a více oddílů. Velikost vzniklého zařízení se rovná
série 2.6.x, protože v sérii 2.4.x, se nachází předchozí generace LVM, která umožňuje o něco méně funkcí. Mimo podpory v jádře potřebujeme také sadu programů na vytváření a správu LVM. Jsou obvykle v balíčku lvm2 a ne v balíčku lvm nebo lvm01, který je určen pro spolupráci se staršími verzemi jádra. Používání špatné verze pro-
Obrázek 6. LVM nám pomáhá lépe zorganizovat místo na discích
součtu kapacit všech oddílů mínus kapacita jednoho oddílu. Pokud máme čtyři oddíly po 15 GB, získáme 45 GB místa. Pokud nejsou rozměry oddílů stejné, ve výpočtech se používá velikost nejmenšího z nich. Místo, které se odečítá je pro uschovávání kontroly parity zařízení, díky čemuž je možno v případě havárie jednoho disku rekonstruování všech dat. V případě souběžné havárie dvou disků jsou data nenávratně ztracena. Rychlost práce se blíží RAID-0, ale při zápisu je o něco menší, protože se počítá „parita“ dat (přesně je vykonávána logická operace eXclusive OR na několika bitech ze všech disků). Navíc se ještě zřídka používá: •
•
•
•
RAID-4 – stejný jako RAID-5, ale informace o paritě je zapisována výlučně na jedno zařízení, díky čemuž se stává úzkým hrdlem. Mělo by být mnohem rychlejší než všechny ostatní. RAID-6 – podobný jako RAID-5, s ještě jedním diskem na data o paritě, díky čemu může přečkat současnou havárii dvou disků. RAID-2, RAID-3 – jsou podobné RAID-4, ale nebyly přijaty a mělo smysl zabudovávat jejich podporu do Linuxu. RAID-10 – Je to RAID-0, ale jeho základním elementem nejsou oddíly fyzických disků ale pole RAID-1. Proto vyžaduje čtyři nebo více disků.
gramů na nás může nabalit neočekávané problémy, proto věnujte pozornost tomu, zda máte nainstalovaný správný a pouze tento správný balíček. Mimo to musíme doinstalovat všechny knihovny, na kterých je závislý (zvláště libdevmapper).
Výběr zařízení Při návrhu diskového pole jsme museli určit, na kterých oddílech kterých disků bude vytvořeno. LVM může použít několik oddílů, stejně jako RAID, ale můžeme jej rovněž instalovat bezprostředně na disk, nerozdělený na oddíly (pokud jej chceme celý využít k tomuto účelu). Navíc můžeme zkonfigurovat LVM na zařízení / dev/md0 čili na libovolném typu softwarového RAID. Jak jsem uvedl již dříve, LVM, mimo svého mála možností, nespolupracuje s „nadbytečnými” disky, proto když zkonfigurujeme LVM na RAID-1,
www.lpmagazine.org
59
hardware
/dev/hdc4 /dev/sda5.
Obrázek 7. Výstup programu Bonnie++ po konverzi do html
dostaneme zařízení, které v sobě spojuje výhody jednoho i druhého – zvýšenou bezpečnost dat a lepší přizpůsobivost v konfiguraci systému. V další části článku popíši, jak jednoduše vytvořit LVM na RAID-1 poli. Pokud chceme vytvořit LVM na samostatném disku či oddíle všechny kroky provádíme identicky pouze se zadáním jiných názvů zařízení. Předpokládám, že jsme již vytvořili pole RAID-1, tak jak bylo popisováno dříve.
Další kroky První úkonem je označení všech zařízení, která se mají stát částí nějaké skupiny svazků (VG). V našem případě napíšeme příkaz: pvcreate /dev/md0. Pokud chcete nainstalovat LVM na samostatný oddíl, např. /dev/hdb3, napište pvcreate /dev/hdb3, pokud určíte pro LVM celý disk hdb – pvcreate /dev/hdb. V tomto posledním případě jsme nuceni nejdříve vymazat tabulku oddílů, např. příkazem dd if= /dev/zero of=/dev/hdb bs=1k count=1. Po zadání příkazu pvcreate bychom měli vidět např. Physical volume "/dev/md0" successfully created. Tento příkaz opakujeme pro všechna zařízení, která mají být použita v nějaké VG. Způsobí zapsání specifických dat do zaváděcí oblasti disku identifikující dané zařízení, díky čemu pokud např. zaměníme disky sda a sdb, bude LVM pracovat nadále bez překážek (netýká se to mého systému, ve kterém je LVM zbudováno na RAID-1). Druhým úkonem je vytvoření skupiny svazků. Každá skupina má své jméno, které si můžeme zvolit dle vlastního uvážení. V mém případě jsem vytvořil VG příkazem vgcreate IDE_disky /dev/md0, které odpovědělo výpisem Volume group "IDE_disky" successfully created. Mé skupině jsem dal jméno „IDE_disky”. Pokud se má náš svazek roztáhnout na více zařízení, musíme je v tomto příkaze vyjmenovat všechna např. vgcreate IDE_disky /dev/hda3
60
leden 1/2005
V jednom systému můžeme vytvořit více VG (maximálně 99), ale je samozřejmé, že žádné fyzické zařízení nemůže být ve dvou skupinách zároveň. Při příležitosti vytváření VG můžeme nastavit rozměr PE – dle HOWTO je výchozí hodnota 32 MB, ale na mém počítači použil vgcreate hodnotu 4 MB. Samotnou hodnotu můžeme zadat pomocí parametru -s, např. vgcreate -s 32 /dev/md0. Zadaná hodnota (výchozí v megabajtech) musí být mocninou čísla dvě. Následný krok je aktivace svazku. Provedeme ji příkazem vgchange --available y IDE_disky. Měl by odpovědět: 0 logical volume(s) in volume group "IDE_disky" now active. Je důležité, že od této chvíle se budou skripty odpovědné za start a ukončování systému, které jsme nainstalovali společně s balíčkem lvm2, starat o náš svazek, čili aktivovat jej při startu a deaktivovat při ukončování systému. Po aktivaci VG o něm můžeme získat zajímavé informace s využitím příkazu vgdisplay IDE_disky. Výsledek jeho činnosti jsem umístil do Výpisu 1. Vidíme, že naše velikost PE je 4 MB (PE Size) a k dispozici máme 9540 PE. Chtěl bych upozornit na to, že v tomto příkladu LVM vidí jen jedno fyzické zařízení (je to /dev/ md0), i když fakticky máme dva disky. Blížíme se ke konci. Teď vytvoříme logické svazky. Jak jsem již zmiňoval dříve v jednom VG můžeme vytvořit mnoho logických svazků (v systému jich může být maximálně 256). Logické svazky (LV), podobně jako skupiny
svazků (VG), mohou mít libovolná jména, která si vymyslíme. Rozeberme si ukázkový příkaz, vytvářející LV: lvcreate -l3000 -ndomovské_adresáře IDE_disky. Tento příkaz vytvořil LV se jménem „domovské_adresáře” a velikosti 3000 PE, čili na mém systému 12000 MB. Nový logický svazek byl vytvořen na základě skupiny svazků pojmenované „IDE_disky”. Jako výchozí nastavení budou data zapisovaná na tomto svazku postupně zabírat dostupné místo na příslušných fyzických zařízeních. Přístup k tomuto svazku máme díky souboru zařízení /dev/IDE_disky/domovské_adresáře. Pokud vytváříme LVM na základě dvou nebo více nezávislých zařízeních, můžeme použít parametr -i, abychom využili rozdělování diskových operací (stripe) na několik zařízení. Příkaz lvcreate -i2 -l3000 -njméno_LV jméno_VG způsobí, že data budou rozdělována na dvě zařízení. Pokud máme více zařízení, s úspěchem můžeme tento parametr zvětšit. Obecně, pokud využíváme LVM, nezajímá nás na které fyzické zařízení se data dostanou z konkrétního logického svazku. Máme přece několik zařízení, spojených do jedné VG. Proto můžeme k příkazu lvcreate přidat ještě jeden parametr, který nastaví, které fyzické zařízení systém použije, pokud začne plnit náš svazek daty. Například lvcreate -l3000 -njméno_LV jméno_VG /dev/sdh1 nastaví první používané zařízení jako /dev/sdh1. Samozřejmě, že pokud na něm dojde místo, LVM začne používat i jiná zařízení.
Obrázek 8. Zařízení RAID a LVM můžeme vytvářet již v průběhu instalace distribuce
hardware
softwarový raid a logical volume manager
Pokud chcete odstranit logický svazek, zadejte příkaz lvremove /dev/IDE_disky/ domovské_adresáře. Nejdříve musíme odpojit systém souborů, pokud jsme již nějaké stihli vytvořit a připojit, s využitím /dev/IDE_disky/domovské_adresáře. Pro změnu názvu LV můžeme použit příkaz lvrename. Užitečný je také program lvscan, který nám zobrazí informace o všech pracujících logických svazcích. Ve svém systému jsem si vytvořil ještě jeden svazek: lvcreate -l3000 -nsystémové_logy IDE_disky a následně jsem zapsal příkaz vgdisplay, který mi zobrazil mj. i počet volných PE: Free
PE / Size
3540 / 13,83 GB
Abychom úplně zaplnili náš VG, vytvořením logického svazku, musíme zadat parametr -l3540, protože právě tolik alokačních bloků nám zůstalo. Je však dobré ponechat si ještě trochu místa na snapshot'y, o kterých napíši ještě v další části, proto zadám příkaz lvcreate -l3490 ndatabáze IDE_disky. V této chvíli je vše připraveno na formátování všech vytvořených zařízení. V mém systému by ukázkové příkazy vypadaly takto: # mkfs.ext3 /dev/IDE_disky/databáze
S
# mkfs.ext3 /dev/IDE_disky/domovské_ adresáře
Jak testovat disky?
Určitě mnoho uživatelů GNU/Linuxu zná nástroj hdparm. S jeho pomocí můžeme mj. zjistit rychlost lineárního přenosu dat z disku. Je to velmi jednoduchý test umožňující porovnání disků – ve skutečnosti nám říká nemnoho o tom, jak výkonné budou naše disky a vůbec se nehodí na testování RAID nebo LVM. Neexistuje jeden univerzální měřič rychlosti disků, protože každý počítačový systém je jiný – některé stále načítají soubory o velikosti několika gigabajtů a jiné desítky tisíc souborů o velikosti několika kilobajtů. V některých je stejně důležitá rychlost načítání jako rychlost zápisu, v jiných nemá rychlost význam. Některé programy načítají data lineárně a jiné stále prohledávají disk. Z toho důvodu musíme při měření výkonu disků brát v úvahu konkrétní systém. Nejpopulárnějším programem, který nám dá mnoho informací o práci disku je Bonnie++ (http://www.coker.com.au/ bonnie++/). Pokud jej nenajdete ve své distribuci, můžete si stáhnout zdrojové kódy z domovské stánky a můžete je zkompilovat a nainstalovat tradičními příkazy: ./configure; make; make install. Tento program testuje rychlost práce nejenom samotného pevného disku ale i systému souborů. Na testovaném disku musíme vytvořit nějaký oddíl, vytvořit na něm souborový systém a připojit do systému. Následně přejděte do adresáře, kam je připojen testovaný disk (např. cd /mnt/test) a spusťte program:
bonnie++ -s 1000k -n 128 -b. Pomocí
parametru -s 1000k jsme nastavili velikost souboru, který Bonnie++ vytvoří, aby mohl zkontrolovat rychlosti lineárního zápisu a čtení. Volba -n 128 nastavuje, kolik tisíc malých souborů (s nulovou velikostí) bude vytvořeno, aby se dala změřit doba jejich vytváření, načítání a mazání. Poslední parametr -b vypíná cachování zápisů a synchronizuje disk po každém z nich (fsync()), čímž se chová jako populární SQL nebo SMTP servery, které to dělají podobně. Po několika nebo více minutách testů vypíše program několik řádků – na začátku budou dvě málo čitelné tabulky s výsledky a poslední řádek obsahuje všechny výsledky oddělené čárkami. Abychom získali pěknou a čitelnou tabulku, můžeme použít program bon_ csv2html. Pomocí standardního výstupu načte poslední řádek výpisu z Bonnie++ a tiskne html soubor na standardní výstup. Můžeme ho použít takto: echo <poslední řádek bonie++> | bon_ > /tmp/dysk1.html. Samozřejmě, že nejjednodušší pro nás bude dlouhý řádek s výsledky z programu Bonnie++ označit a vložit do tohoto příkazu pomocí myši. Hodnoty, které Bonnie++ vypíše, budou závislé nejenom na pevném disku, ale rovněž na použitém systému souborů (ext2/ext3), rychlostí procesoru či zatížením systému atd. csv2html
# mkfs.ext3 /dev/IDE_disky/systémové_logy
LVM v akci V této chvíli se jistě mnoho čtenářů ptá, proč bylo vytvořeno LVM? Zatím nás dost dlouhý popis kroků dovedl do situace, kdy máme obvyklý systém. Je pravdou, že je zabezpečen před havárií jednoho pevného disku, ale to je zásluha výlučně RAID-1 a ne LVM. Navíc se přístup k disku zpomalil (jednoduchý test s příkazem dd na LVM u mne pracuje o tři sekundy déle než na samostatném RAID-1). A samozřejmě, že LVM nebyl vytvořen proto, abychom mohli využít fantazii v pojmenovávání zařízení. Podívejme se na to, jak s jeho pomocí spravovat místo na disku a pohodlně provádět bezpečnostní zálohu dat.
Přidáváme disk Předpokládejme, že nám chybí místo na zařízení /dev/IDE_disky/databáze. Do systému jsme přidali nový disk a můžeme z něj použít jeden oddíl – /dev/sda3. Samo-
zřejmě, že to není nejlepší nápad, protože naše předchozí zařízení se nachází na RAID-1, a proto je zabezpečeno před havárií jednoho z disků. Pokud do celé skupiny svazků přidáme jedno fyzické zařízení bez této ochrany, v případě jeho havárie přijdeme o všechna data. V reálném světě bychom měli přidat nejméně jeden další disk a vytvořit na nich nejdříve RAID-1. Pro potřeby ukázky v tomto článku si však ukážeme jednoduchý příklad s jedním oddílem. Začneme inicializací oddílu: # pvcreate /dev/sda3 Physical volume "/dev/sda3"
S
successfully created
S využitím příkazu vgdisplay zkontrolujeme výsledek naší činnosti. Ukázka výpisu na mém počítači vypadá takto: VG Size
74,52 GB
PE Size
4,00 MB
Total PE
19078
Alloc PE / Size
9540 / 37,27 GB
Free
9538 / 37,26 GB
V této chvíli můžeme vytvořit úplně nový svazek na 9538 volných PE, ale o to nám zase až tak nejde, protože nám momentálně chybí místo na svazku připojeném v /báze. Po spuštění příkazu df -h aktuálně máme: /dev/mapper/IDE_disky-databáze 14G
Následně rozšíříme o nové zařízení:
skupinu
PE / Size
13G
397M
98% /báze
svazků Abychom všech 9538 volných PE přidali tomuto svazku, zadáme příkaz:
# vgextend IDE_disky /dev/sda3 Volume group "IDE_disky"
S
successfully extended
# lvextend -l +9538
S
/dev/IDE_disky/ databáze
www.lpmagazine.org
61
hardware
Tímto způsobem jsme zvětšili logický svazek, o čemž se můžeme přesvědčit příkazem lvscan. Nyní musíme zvětšit souborový systém, aby zabral místo na celém LV. Existují speciální záplaty na jádro, které umožňují provedení této operace bez odpojení souborového systému, ale my si na chvíli proveďme umount /báze/ a zadejme příkaz resize2fs -p /dev/IDE_disky/databáze. Program nás může požádat o kontrolu souborového systému před jeho změnou velikosti, proto v tomto případě napište: e2fsck -f /dev/IDE_disky/databáze a znovu zopakujte příkaz resize2fs. Nyní už zbývá jen připojit znovu LV a podívat se, co zobrazí df -h. Já jsem dostal: /dev/mapper/IDE_disky-databáze 51G
13G
36G
27% /báze
Operace trvala velmi krátce a skončila úspěchem. Bez LVM by byla nutná úprava tabulky oddílů na přinejmenším jednom disku a následně krkolomné přenášení dat. Všechno tohle by způsobilo o mnoho delší přestávku ve fungování systému. Zvětšování souborového systému je možné nejenom na ext2/ext3. Pokud používáme reiserfs, můžeme analogicky využít příkaz resize_reiserfs -f. V případě xfs máme program xfs_growfs, ale jistý rozdíl je v tom že systém souborů musíme nechat připojený a jako parametr tohoto programu zadat přípojný bod (např. xfs_growfs /báze).
Jiné manipulace s disky V případě, že chceme ze systému odstranit jeden disk (např. hdb) a máme na ostatních discích tolik místa, že se na ně vejdou všechna data, může použít příkaz: pvmove /dev/hdb. Nyní byla všechna data z hdb přenesena na zbylé disky v rámci stejné skupiny svazků (VG). Následné vgreduce jméno_VG /dev/hdb způsobí, že disk již není členem VG se jménem jméno_VG. Když jsme do systému přidali nový disk (např. sdf ), na který chceme přenést data ze starého (např. hdb), zadáme příkazy: # pvcreate /dev/sdf # vgextend dev /dev/sdf # pvmove /dev/hdb /dev/sdf # vgreduce dev /dev/hdb
Před nějakou chvílí jsme zvětšovali logický svazek. Samozřejmě je možné i stejně jed-
62
leden 1/2005
noduché zmenšování. Problém se objevuje při zmenšování souborových systémů, protože pokud vím tak pouze ext2/ext3 a reiserfs tuto operaci umožňují. Ukázkový příklad by mohl vypadat takto:
Pokud používáme systém souborů xfs musí být příkaz o něco delší:
S S
# xfs_freeze -f /home; lvcreate -L200M -s -n nase_zaloha /dev/IDE_disky/ domovské_adresáře
# umount /home
S
# resize2fs /dev/IDE_disky/
domovské_adresáře 524288 # lvreduce -L-1G
S
/dev/IDE_disky/
domovské_adresáře
V této chvíli můžeme připojit (jen ke čtení) logický svazek se jménem „nase_ zaloha”, který obsahuje kopii svazku „domovské_adresáře”:
# mount /home
S
# mount /dev/IDE_disky/nase_zaloha
V tomto případě jsme jako parametr programu resize2fs museli zadat novou velikost souborového systému. LVM obsahuje také nástroje na přesouvání skupiny svazků (VG) na jiné počítače, když nemůžeme provést obvyklé přeložení disků. Musíme, po odpojení souborového systému a deaktivaci VG (vgchange --activate n jméno_VG), spustit příkaz vgexport jméno_VG a následně po přeložení disku do nového počítače – vgimport jméno_VG.
Snapshot Provádění bezpečnostní zálohy trvá dosti dlouho a ne každý si může dovolit úplné zastavení systému na tuto dobu. tehdy jsou největším problémem soubory, které byly v době provádění zálohy změněny. LVM nám zpřístupňuje speciální mechanismus, který nám umožní tento problém obejít. Můžeme vytvořit snapshot aktuálního stavu některého z našich logických svazků. Snapshot je pro správce systému dalším logickým svazkem, obsahujícím kopie některého LV. Tato kopie se nemění i když se na originále provádí operace zápisu. Samozřejmě, že při vytváření snapshotu nejsou data v něm obsažená fyzicky kopírována na nový logický svazek. Na daném VG potřebujeme trochu místa, aby bylo kam zapsat informace o souborech, které se změnily od doby vytvoření stavu logického svazku. Pokud máme adresář /home ve kterém se nachází 20 GB dat, pak víme, že vytvoření bezpečnostní zálohy bude trvat 10 minut. Předpokládejme, že uživatelé v průběhu těchto 10 minut na oddíle s /home vytvoří nebo změní ne více než 200 MB dat. Tolik místa proto musíme mít na dané skupině svazků. Snapshot vytvoříme příkazem:
S
# lvcreate -L200M -s -n nase_zaloha
/dev/IDE_disky/domovské_adresáře
/mnt/backup/
Po skončení provádění záložní kopie zadáme příkaz : lvremove -f /dev/IDE_ disky/nase_zaloha. Musíme však dávat pozor na to, aby do této chvíle veškeré změny na svazku nepřekročily velikost snapshotu – v tomto příkladě 200 MB. Po naplnění se stává neužitečným a stejně je zapotřebí se chovat k datům z něj zkopírovaným.
Shrnutí Využití RAID a LVM může velmi ulehčit práci správci a zvětšit bezpečnost a výkonnost systému. Toto řešení někdy způsobí, že některé obvykle jednoduché činnosti (např. přenášení disku do jiného počítače) se stávají velmi komplikovanými a ve chvíli, kdy již dojde k havárii některého disku je získání dat z něj těžší. Je nutné se vybavit patřičnými nástroji pro obnovu systému, které si budou umět poradit se souborovými systémy na těchto zařízeních, např. minidistribuce (R)ecovery (I)s (P)ossible Linux. Jinými slovy, pokud vyřešíte jisté problémy, často se objeví celá řada nových.
Na Internetu: •
•
•
•
LVM HOWTO: http://www.tldp.org/HOWTO/ LVM-HOWTO/ Softwarový RAID HOWTO: http://www.tldp.org/HOWTO/ Software-RAID-HOWTO.html Záchranná distribuce, mj. pro RAID a LVM: http://www.tux.org/pub/people/ kent-robotti/looplinux/rip/ Domovská stránka distribuce (R)ecovery (I)s (P)ossible Linux: http://www.tux.org/pub/people/ kent-robotti/looplinux/rip/