6.3.
Diskové oddíly / Softwarový RAID
Vývoj vanilkové příchuti Linuxu: Knihy kouzel byl 1. března 2025
ukončen. Tento text je zachován jako historický, ale chyby již nejsou
opravovány. Odnože projektu pod kompatibilní licencí jsou vítány.
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ří).
zpět do textu
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.
zpět do textu
3 Přejmenováním pole se nezmění jeho UUID, může se však změnit číslo md-zařízení.
zpět do textu
4 Po přidání základního dílu neprovádějte další zásadní operace s polem, dokud se neuklidní.
zpět do textu