Portál AbcLinuxu, 30. dubna 2025 14:35
Cíl: Vytvořit RAID na naší workstation, aby byla zajištěna ochrana dat při havárii jednoho z disků a aby se po havárii dalo okamžitě pokračovat v práci.
RAID neboli Redundant Array of Inexpensive Disks, česky snad pole s nadbytečnými levnými disky, je takový způsob zápisu dat, aby se zaručila jejich bezpečnost i při havárii disků, anebo aby se zvýšila rychlost zápisu a čtení. V nejlepším případě obojí. Bez hardwarového řadiče lze úspěšně provozovat Linear RAID, RAID 0, RAID 1, případně RAID 10, které CPU prakticky nezatěžují. RAID 5 a podobné s počítáním XOR bitů kladou při výpočtu parity už vyšší nároky na CPU a pravděpodobně bych upřednostňoval hardwarové řešení.
Než se budeme věnovat jednotlivým typům RAID, zdůrazním, co RAID neumí. RAID neochrání vaše data ani před uživatelovou neopatrností, ani před chybně napsaným software, ani před zlým úmyslem. RAID pomůže jen při havárii disku, takže svá data musíte stále pravidelně zálohovat. Jak zálohovat si povíme příště.
Disky jsou logicky přidávány za sebe, čímž vznikne jeden velký logický disk. Disková kapacita tak zůstane zachována, ale data se ukládají stále v jedné kopii, takže při havárii alespoň o část z nich přijdeme.
Alespoň dva disky jsou zkombinovány do jednoho velkého disku. Data jsou na ně zapisována střídavě v pruzích (stripes). Disková kapacita tak zůstává zachována a zvýší se rychlost čtení i zápisu. Data jsou však zapisována jen v jedné kopii a navíc v pruzích, takže při havárii jednoho disku přijdeme o všechna data. Pravděpodobnost havárie s množstvím takto zapojených disků přirozeně roste.
Na alespoň dva disky se zapisují stejná data. Disková kapacita se tak sníží v nejlepším případě na polovinu, za to jsou všechna data ukládána ve více kopiích. Rychlost čtení se zvýší, neboť stejná data mohou být čtena z více disků zároveň.
RAID 10 vyžaduje alespoň čtyři disky, přičemž kombinuje výhody RAID 1 a RAID 0. Data jsou zapisována do RAID 0 pole (stripping), jehož jednotlivé disky jsou tvořeny RAID 1 poli (mirroring). Zapojení RAID 1+0 je výhodnější než zapojení RAID 0+1. Pokuste se zamyslet proč.
Toliko obecné teorie a nyní přejdeme k praxi. Co budeme pro začátek potřebovat? Dva SATA disky a fukční v jádře zprovozněný SATA řadič. Analogicky lze postupovat i s PATA disky. Co naopak potřebovat nebudeme? Podporu RAID od základní desky.
Poznámka: Na většině moderních desek bývá integrován RAID řadič. V naprosté většině případů se však nejedná o pravý hardwarový RAID, ale o softwarový RAID se softwarem uloženým v BIOS. Linux si s některými takovými RAID řadiči rozumí díky projektu dmraid, přesto vám doporučuji použít nativní RAID Linuxu. Vezměte v potaz třeba skutečnost, že jednou budete měnit základní desku, ať již dobrovolně, či z donucení (po havárii). Jistě si dokážete představit, v jaké situaci se pak ocitnete při používání integrovaného řadiče na RAID. V případě nativního RAID Linuxu žádné potíže nehrozí. Výkonostně jsou obě řešení srovnatelná.
Do softwarového RAID budou zapojeny dva SATA disky Hitachi Deskstar 160 GB. První věc, kterou musíme s disky provést, je vytvoření tabulky oddílů (partition table). RAID se totiž vytváří nad jednotlivými oddíly. Z mnoha důvodů, které vysvětlím nakonci článku, jsem se rozhodl pro rozdělení ukázané ve výpisu. Vaše rozdělení se může lišit podle vašich možností a potřeb. Oba disky (sda a sdb) však musí být rozděleny naprosto stejně. U všech oddílů až na swap nastavíme typ FD (Linux raid auto), u oddílů se swapem typ 82 (Linux swap). Označení oddílů typem FD místo 83 (Linux) je pro správnou funkci RAID nezbytné. Jádro totiž při startu automaticky sestavuje z takto označených oddílů RAID zařízení.
sda1 /boot 40 MB RAID 1 sda2 / 500 MB RAID 1 sda3 swap 2 GB -- sda5 /usr 16 GB RAID 1 sda6 /tmp 3 GB RAID 0 sda7 /var 6 GB RAID 1 sda8 /home 40 GB RAID 1 sda9 /mnt/backup 15 GB RAID 0 sda10 /mnt/media 78 GB RAID 0
Teď je nejvhodnější doba pro instalaci mdadm (multiple device admin), nástroje, umožňujícího správu RAID zařízení v Linuxu.
Hned po instalaci se můžeme pustit do vytváření vlastních RAID zařízení:
mdadm -C /dev/md0 -l 1 -n 2 -c 32 /dev/sda1 /dev/sdb1 mdadm -C /dev/md1 -l 1 -n 2 -c 32 /dev/sda3 /dev/sdb3 mdadm -C /dev/md2 -l 1 -n 2 -c 32 /dev/sda5 /dev/sdb5 mdadm -C /dev/md3 -l 0 -n 2 -c 32 /dev/sda6 /dev/sdb6 mdadm -C /dev/md4 -l 1 -n 2 -c 32 /dev/sda7 /dev/sdb7 mdadm -C /dev/md5 -l 1 -n 2 -c 32 /dev/sda8 /dev/sdb8 mdadm -C /dev/md6 -l 0 -n 2 -c 32 /dev/sda9 /dev/sdb9 mdadm -C /dev/md7 -l 0 -n 2 -c 32 /dev/sda10 /dev/sdb10
Aby jádro mohlo s RAID zařízeními pracovat, musí být pro ně zakompilována podpora (Device Drivers / Multi-device support (RAID and LVM)). Já jsem ji měl zakompilovanou přímo v jádře, vy ji můžete mít jako modul md. Po natažení modulu či rebootu (je-li podpora zakompilovaná přímo v jádře), by se měly v /dev objevit zařízení md0, md1… Jádro automaticky a ve správném pořadí sdruží všechny oddíly, které mají nastavený typ FD. Za správné sdružení odpovídá tzv. persistent-superblock, který je zapsán na každém zařízení tvořícím RAID.
Pro jistotu zkontrolujeme, jestli běží vše, jak má:
cat /proc/mdstat
. Je-li vše v pořádku, můžeme
vytvořit na zařízeních /dev/md0, /dev/md1… souborové systémy
podle našich preferencí obvyklým způsobem,
např. mkfs.ext2 /dev/md0
. Na sda3 a sdb3
nezapomeneme vytvořit swap příkazem
mkswap /dev/sda3
,
resp. mkswap /dev/sdb3
.
md0 /boot 40 MB RAID 1 ext2 ... samé výhody a sociální jistoty md1 / 500 MB RAID 1 xfs ... spolehlivý fs md2 /usr 16 GB RAID 1 xfs ... spolehlivý fs md3 /tmp 6 GB RAID 0 reiserfs ... časté vytváření a mazání malých souborů md4 /var 6 GB RAID 1 reiserfs ... časté vytváření a mazání malých souborů md5 /home 40 GB RAID 1 xfs ... spolehlivý fs md6 /mnt/backup 30 GB RAID 0 xfs ... velké soubory md7 /mnt/media 156 GB RAID 0 xfs ... velké soubory
Zařízení md0 připojíme třeba do /mnt/tmp-boot
a
nainstalujeme na něj jádro, které podporuje RAID (Device Drivers /
Multi-device support (RAID and LVM)). Z pochopitelných důvodů
(adresář /
je v RAID) musí být tato podpora zakompilována přímo do
jádra, modul nestačí.
Dále na stejné místo nainstalujeme grub a zavaděč zapíšeme do MBR obou disků. K tomu použijeme následující příkazy v grub-shellu:
grub>device (hd0) /dev/sda grub>root (hd0,0) grub>setup (hd0) grub>device (hd1) /dev/sdb grub>root (hd1,0) grub>setup (hd1)
Upravíme parametry předávané jádru v grub.conf
:
title Gentoo Linux 2.6 RAID root (hd0,0) kernel /boot/vmlinuz root=/dev/md1 vga=788
Zbytek systému jsem překopíroval na příslušné oddíly ze starého
disku příkazy cp -ax
. Pokud se vám stane jako mě, že
jádro naběhne, ale ještě před initem se systém resetuje, zapomněli
jste vytvořit adresář /dev a v něm základní soubory pro
zařízení. Před rebootem musíme ještě adekvátně upravit nový
/etc/fstab
.
Tak a rebootujeme do nového RAID pole. Pokud jsme na nic nezapomněli, tak systém naběhne hned na první pokus.
Chceme-li se přesvědčit, že se nám podařil splnit cíl, tedy že po havárii jednoho z disků jsme schopni okamžitě pokračovat v práci, tak jeden disk odpojíme a pokusíme se nabootovat.
Objeví se množství chybových hlášek, ale systém
nabootuje. Z /etc/fstab
vyřadíme automatické
připojení oddílů, na kterých je RAID 0, stejně nám jsou nyní
k ničemu, a pokusíme se nabootovat znovu. Počet chybových hlášení
by měl klesnout a systém by měl naběhnout bez problémů.
Disk opět připojíme a nabootujeme. Jádro hlásí, že oddíly nejsou
synchronizovány. Výpisem /proc/mdstat
zjistíme, kteréže
oddíly se používají a ostatní se s nimi pokusíme
synchronizovat. K tomu použijeme příkaz
mdadm /dev/md1 -a /dev/sda2
. Takhle přidáme
do příslušných RAID 1 zařízeních všechny chybějící oddíly. Mezitím
můžeme výpisem /proc/mdstat
sledovat, jak postupuje
synchronizace.
Oddíl s /boot
musí být v RAID 1,
aby se z něj dalo nabootovat. Nebo musí být z RAID úplně
vyjmut, ale pak bychom se připravili o možnost rychle nabootovat,
pokud by havaroval první disk. Souborový systém ext2 je jistota, se
kterou si zavaděče poradí.
Oddíly pro swap
nemá smysl dávat do RAID 0,
neboť jádro je umí samo dobře využívat. Jistý smysl by mělo použití
RAID 1, pokud bychom chtěli, aby systém za běhu přestál havárii
jednoho disku, ale k tomu není hardware na workstation obvykle
uzpůsoben a ani jsme takové ambice na počátku neměli.
Adresář /usr
instaluji na jiný oddíl než
/
z prostého důvodu – takhle obsahuje oddíl
s kořenovým adresářem méně souborů, takže pravděpodobnost
poškození souborového systému je menší a pravděpodobnost úspěšné
obnovy, pokud už k poškození dojde, větší. Se souborovým systémem
XFS mám však ty nejlepší zkušenosti a mohu jej doporučit jako
univerzální souborový systém na workstation.
Oddíl s /tmp
je v RAID 0
(stripping), neboť neobsahuje žádná důležitá data a naopak se nám hodí
rychlejší zápis a čtení, které RAID 0 přináší. Souborový systém
reiserfs byl zvolen, protože poskytuje větší výkon při práci
s malými soubory (vytváření, mazání).
Oddíl s /var
obsahuje webroot, databáze, ldap
a jiná pro mě důležitá data. Souborový systém reiserfs byl zvolen ze
stejného důvodu jako u /tmp
.
Snad nemusím více komentovat ani typ RAID, ani typ souborového
systému na /home
. Snad jen poznámku, že i kdybych
měl Linux instalovat na co nejméně oddílů, tak /home
bude
vždy na samostatném.
Oddíl s /mnt/backup
obsahuje tar archivy
s průběžnými zálohami, které jsou vypalovány rovněž na
DVD-RAM, proto jsem si jej mohl dovolit dát jako RAID 0
(stripping). Souborový systém XFS je zde velice vhodný, neboť se
zachází s opravdu velkými soubory – desítky a stovky
MB.
Oddíl s /mnt/media
je nachystán na hudbu a
filmy. Více než o bezpečnost těchto dat jde o diskovou
kapacitu, proto byl zvolen RAID 0 (stripping). Jako souborový
systém byl vybrán XFS, neboť multimediální soubory obvykle několik MB
mají.
Před rokem jsem si užíval pořádné trable s diskem. Už nikdy nechci zažít tu nejistotu, pokusy o záchranu dat a opakované instalace a konfigurace systému. Od té doby jsem se naučil zálohovat a nyní jsem investoval i do dalšího disku, abych mohl vytvořit RAID. Necelých 2700 Kč je myslím si dobrá investice, i když doufám, že se o její potřebnosti nebudu muset přesvědčovat. Data totiž skutečně patří k tomu nejcennějšímu, co v počítači mám.
Článek si rozhodně nedělal ambice být podrobným průvodcem mezi
RAID. Ukázal tu nejjednodušší možnost, jak si na workstation
v Linuxu postavit RAID a snad vás i přesvědčil, abyste tak
učinili. Článek cudně zamlčel konfiguraci RAID 5, nezmínil
se o hot-spare, ani nevyčerpal manuálové stránky
man mdadm
. Ale to jistě napraví zvídavý čtenář
sám.
Tiskni
Sdílej:
DEVICE /dev/sda* /dev/sdb* ARRAY /dev/md2 level=raid0 num-devices=2 UUID=bb559ba2:d2e1589e:8986872e:5f8ed4b9 devices=/dev/sda5,/dev/sdb5 ARRAY /dev/md1 level=raid1 num-devices=2 UUID=73fd3e1f:045eccb4:656dc484:d7b5a1ef devices=/dev/sda3,/dev/sdb3 ARRAY /dev/md0 level=raid1 num-devices=2 UUID=072208f8:3a9860c3:104e539d:3428df1e devices=/dev/.static/dev/sda1,/dev/.static/dev/sdb1(ty radky devices=neco jsou uz asi zastarale) viz. vypis
mdadm --detail --scan
/etc/mdadm.conf
zapsat řádekDEVICE /dev/sda* /dev/sdb*
mdadm -C /dev/md0 -l 1 -n 2 -c 32 /dev/sda1 /dev/sdb1
,mdadm -s -d >> /etc/mdadm.conf
,A proč jo?protoze je raidtab zastaraly?
Grub je takhle správně. Když jsem odpojil disk sda, tak jsem bez potíží naběhl na sdb, které v té době bylo sda. Do MBR grubu zapisuju „bootuj ze svého disku”, takže by to fungovat vážně mělo.ok, diky za info, az se dostanu k tomu stroji, tak to zkusim ;)
/mnt/media
a o /mnt/backup
a o pohnutkách píšu v předposledním odstavci. RAID 1 je na ně naprosto zbytečný, raději uvítám více místa, tak jsem se rozhodl pro RAID 0.
V podobné konfiguraci (méně místa pro backup a media) jsem používal starý disk skoro rok a místo nedocházelo, takže si myslím, že jsem rozdělení rozvrhl rozumně. Až mně místo bude docházet, obávám se, že běžné kapacity disků se budou blížit 1 TB, takže nové přerozdělení se bude konat na nových discích. Nechci rychlý systém, chci bezpečný systém, který půjde v případě havárie disku rychle zprovoznit.
Nástroj mdadm nastuduji a případně článek aktualizuji.
tar c . | { cd /mnt/kamchcikopirovat ; tar x }protoze buhvi jak se takovy cp tvari na hardlinky a tak. Dobry je taky si to pole parkrat resyncnout kdyz se instaluje, aby se ty disky synchronizovaly treba petkrat - zabere to hodne casu, ale je to skvelej zatezovej test a kdyz ten disk prezije petkrat zkopirovani 200 GB sem a tam, tak pravdepodobne prezije par let provozu :) Tak, a ted by to chtelo tohle vsechno tady kolem shrnout a dat do clanku ... a honorar venovat na maturitni vecirek Ivana Novakova :)
tar c . | tar x -d /mnt/cokoliale mne se to s tema zavorkama libi vic :) Ze gnutar neumi zpracovat acl je prava, ale nepouzivam je, takze mne to nejak nenapadlo :) ale star pouziva malicko jinou hlavicku nez gnutar, coz se projevuje tim ze to starovyho archivu se neda v mc vstoupit a ja byl vzdycky linej to resit.
tar cf - adresar/ | (cd /kam/to/chci/poslat/; tar xf - )
/home
a jiná uživatelská data na zvláštním oddílu. Obnova je pak o něco snazší. Jak píšu už ve článku, pro /home
dělám zvláštní oddíl vždy. Již několikrát mě to uchránilo před ztrátou dat (souborový systém na /
nepoužitelný, /home
netknutý). Debian nepraktikuji a 90 GB ušetřeného místa pro mě není zanedbatelných.
tar cl
vs. cp -ax
by mělo být naprosto rovnocené a je otázkou osobní oblíbenosti. Oboje to správně zachází s hardlinky, právy, časy, atd. a ACL to neumí ani jedno.
Článek určitě ještě upravím a rozšířím, třeba raidtools nahradím mdadm. Jsem rád, že se v diskuzi dozvídám spoustu nových postřehů. Ostatně napsat článek je celkově pozitivní věc – člověk si udělá pořádek ve svých znalostech, z diskuze se dozví nové věci a náhodný čtenář je snad také obohacen.
Zvědavý dotaz: tohle jsou sw konfigurace, ne? Mam fyzický řadič (Kouwel 571), co zvládá taky fyzický raid - asi jen 0/1, ale neni výkonově lepší?
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.