4.3. Diskové oddíly / Softwarový RAID
Řada 2.x vanilkové příchuti Linuxu: Knihy kouzel je od 15. července 2022
do 1. března 2025 ve stavu dlouhodobé pasivní údržby;
nahlášené chyby budou opravovány, ale aktivní vývoj se již věnuje jiným
projektům. Máte-li zájem pokračovat v tvorbě Linuxu: Knihy kouzel
pro novější verze linuxových operačních systémů,
kontaktujte autora nebo rovnou vytvořte odnož.
1. Úvod
Tato kapitola se zabývá softwarovým RAID (prokládání, zrcadlení a RAID s paritou).
2. Definice
- Pole (array) je skupina disků nebo jejich oddílů skombinovaná softwarovým RAID do jednoho blokového zařízení.
- Dílem pole (device) se v RAIDu rozumí jednotlivý oddíl disku či celý disk tvořící pole spolu s dalšími takovými díly. Obvykle se každý díl nachází na jiném fyzickém disku.
- Díly pole jsou dvou druhů — základní díly (active devices) tvoří pole a jsou aktivně používány; záložní díly (spare devices) nejsou používány, ale v případě výpadku některého ze základních dílů se jeden záložní díl stane základním a RAID na něj postupně „nasynchronizuje“ data. Díl pole může být také ve stavech „F“ (selhavší), „R“ (k nahrazení) a možná i dalších.
- Pole je v degradovaném stavu, pokud je počet jeho fungujících základních dílů nižší než deklarovaný.
V této kapitole budou pokryty tyto režimy softwarového RAID: prokládání (stripe, RAID0), zrcadlení (mirror, RAID1) a RAID s paritou (RAID5).
Kde máte v zaklínadlech zadat md-pole, můžete svoje pole identifikovat těmito způsoby:
- Pomocí UUID (např. „/dev/disk/by-uuid/ec2c7d38-“ atd.). Ve skriptech doporučuji preferovat tento způsob.
- Názvem pole (např. „/dev/md/mujraid“). Tento způsob označování doporučuji pro ruční použití; většinou je spolehlivý, ale může způsobit problémy, pokud při vytváření zapomenete parametr „--homehost=any“ nebo pokud dojde ke konfliktu názvů (typicky po připojení výměnných médií s RAID-polem).
- Číslem md-zařízení (např. „/dev/md127“). Toto číslo se může změnit při každém připojení pole, ale může být potřeba v případě práce s neúplně sestaveným polem.
- Jakýmkoliv symbolickým odkazem na jednu z výše uvedených cest.
3. Zaklínadla
3/1 Všechny typy polí: zjišťování údajů
@dynamické informace o připojených polích#1
cat /proc/mdstat
@podrobné statické informace o některém poli#2
sudo mdadm --detail md-pole
@statické informace o dílu pole (stručné/podrobné)#3
sudo mdadm --query /dev/díl
sudo mdadm --examine /dev/díl
@seznam připojených polí (pro skript)#4
find /dev/disk/by-uuid -type l -xtype b -printf '%f %l\n' | sed -nE '/\/md[0-9]+$/s!(\.\.\/){2}!/dev/!;T;p'
3/2 Všechny typy polí: změny
@odpojit pole#1
sudo mdadm --stop md-pole
sudo mdadm --detail md-pole
Bezpečně si uschovejte seznam dílů pole.
sudo mdadm --stop md-pole && sudo mdadm -A /dev/md/nový-název --update=name --name=nový-název --homehost=any /dev/všechny-díly
3/3 Prokládané pole (RAID0)
@vytvořit#1
for x in /dev/oddíl; do sudo wipefs -a "$x"; done
sudo mdadm -Cv /dev/md/název --homehost=any -l stripe -n počet-oddílů /dev/první-oddíl /dev/další-oddíl
@smazat#2
Odpojte pole (madm --stop)
for x in /dev/oddíl; do sudo mdadm --zero-superblock "$x"; done
3/4 Zrcadlené pole (RAID1)
@vytvořit#1
for x in /dev/oddíl; do sudo wipefs -a "$x"; done
sudo mdadm -Cv /dev/md/název --homehost=any -l mirror -n počet-zákl-dílů [-x počet-záložních-dílů] /dev/první-oddíl /dev/další-oddíl
@smazat#2
Odpojte pole (madm --stop)
for x in /dev/oddíl; do sudo mdadm --zero-superblock "$x"; done
@přidat záložní/základní díl#3
sudo mdadm --manage md-pole -va /dev/nový-oddíl
sudo mdadm --grow md-pole -va /dev/nový-oddíl -n nový-počet-zákl-oddílů
@odebrat záložní/základní díl#4
sudo mdadm --manage md-pole -vr /dev/nový-oddíl
sudo mdadm --manage -vf /dev/díl -r /dev/díl && sudo mdadm --grow -n nový-počet-zákl-oddílů
@zvýšit počet základních dílů na úkor záložních#5
sudo mdadm --grow md-pole -n nový-počet-zákl-dílů
@ručně spustit/ukončit kontrolu konzistence pole#7
sudo tee /sys/devices/virtual/block/$(basename $(realpath md-pole ))/md/sync_action <<<check
sudo tee /sys/devices/virtual/block/$(basename $(realpath md-pole ))/md/sync_action <<<idle
3/5 Pole s paritou (RAID5)
@vytvořit#1
for x in /dev/oddíl; do sudo wipefs -a "$x"; done
sudo mdadm -Cv /dev/md/název --homehost=any -l raid5 -n počet-zákl-dílů [-x počet-záložních-dílů] /dev/oddíl
Před dalšími operacemi s polem počkejte, než se uklidní (lze sledovat pomocí „watch -n 1 cat /proc/mdstat“).
@smazat#2
Odpojte pole (madm --stop)
for x in /dev/oddíl; do sudo mdadm --zero-superblock "$x"; done
sudo mdadm --manage md-pole -va /dev/nový-oddíl
sudo mdadm --grow md-pole -va /dev/nový-oddíl [-a /dev/další-nový-oddíl] -n nový-počet-zákl-dílů
@odebrat záložní díl#4
sudo mdadm --manage md-pole -vr /dev/nový-oddíl
@zvýšit počet základních dílů na úkor záložních#6
sudo mdadm --grow md-pole -n nový-počet-zákl-dílů
@nahradit díl za běhu jiným oddílem#8
sudo mdadm --manage md-pole -v --replace /dev/díl-k-odstranění -a /dev/nový-oddíl
Počkejte, než se pole uklidní (lze sledovat pomocí „watch -n 1 cat /proc/mdstat“)
sudo mdadm --manage md-pole -vr /dev/díl-k-odstranění
4. Instalace na Ubuntu
Podporu softwarového RAID je nutno doinstalovat:
sudo apt-get install mdadm
5. Tipy a zkušenosti
- RAID5 nedoporučuji používat na otočných pevných discích s kapacitou nad 1 TB (což je dnes většina). Doba obnovy pole po selhání jednoho z disků je velmi dlouhá (u šestiterabajtových disků víc než 24 hodin, u dvanáctiterabajtových to může být několik dní), což se projevuje dvěma nevýhodami: pravděpodobnost selhání druhého disku během obnovy je relativně vysoká a je tím vyšší, čím víc disků je do pole zapojeno. Druhou nevýhodou je velké množství elektřiny spotřebované během obnovy pole.
- Prokládaný RAID nemá redundanci, nemá záložní díly a počet jeho dílů není možné měnit. Pokud přijdete o data na kterémkoliv z jeho dílů, přijdete o data v celém poli.
- Ve všech popsaných druzích RAIDu mají všechny díly pole stejnou velikost. Pokud se je pokusíte umístit na různě velké oddíly, RAID z nich použije jen části odpovídající velikosti nejmenšího z nich.
- Máte-li v systému zrcadlené RAID pole, pravděpodobně jednou za měsíc se na něm automaticky spustí kontrola konzistence. Možná to dělá i pole typu RAID5, ale nevím jistě.
6. Další zdroje informací
- YouTube: Combining Drives Together (anglicky)
- How to create RAID arrays with mdadm... (anglicky)
- A guide to mdadm (anglicky)
7. Zákulisí kapitoly
V této verzi kapitoly chybí:
- RAID6
- RAID10
Tato kapitola záměrně nepokrývá:
- nic
1 Toto zaklínadlo budete obvykle potřebovat jen po ručním odpojení pole; jinak systém pole připojuje automaticky, jakmile ho zaregistruje, a stejně automaticky ho rozšiřuje, když narazí na nový díl, který do něj patří).
2 Díl označený jako „selhavší“ pole okamžitě přestane používat a bude počítat se ztrátou všech dat na něm uložených.
3 Přejmenováním pole se nezmění jeho UUID, může se však změnit číslo md-zařízení.
4 Po přidání základního dílu neprovádějte další zásadní operace s polem, dokud se neuklidní.
Líbí se vám tento projekt a chcete, aby byl ještě lepší? Můžete mi s tím pomoci. Zmiňte se o něm technicky zdatným přátelům, opravte překlepy a nahlašte nefunkční zaklínadla, aby mohla být opravena; poskytněte mi zpětnou vazbu nebo se zapojte do vývoje nových kapitol. Další informace na GitHubu v dokumentu Jak se zapojit.