Linux: Kniha kouzel, 2.15 (1. března 2025)
Veškerá moc příkazové řádky/příkazového řádku přehledně, pro začátečníky i pokročilé

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'
@seznam dílů připojeného pole (pro skript)#5
@zjistit UUID pole#6
@zjistit název pole#7
@zjistit číslo pole#8

3/2 Všechny typy polí: změny

@odpojit pole#1
sudo mdadm --stop md-pole
@ručně připojit existující pole#2 (1)
sudo mdadm -A md-pole /dev/oddíl
@označit díl jako selhavší#3 (2)
sudo mdadm --manage md-pole -f /dev/oddíl
@přejmenovat pole#4 (3)
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ů
@učinit z některých základních oddílů záložní#6
@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
@přidat záložní/základní díl#3 (4)
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
@odebrat základní díl#5
@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ů
@učinit z některých základních oddílů záložní#7
@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í

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
[BY-SA]

Veškerý obsah této stránky (text, obrázky, zdrojový kód) je možno upravovat a šířit pod podmínkami licence Creative Commons Attribution-ShareAlike 4.0 International. Upozorňuji, že uvedená licence vyžaduje uvedení seznamu autorů, licence a zdroje a poskytnutí stejné či kompatibilní licence k provedeným změnám, jsou-li nějaké. Příslušné údaje jsou dostupné na stránce „Přehled autorů“. Šíření obsahu bez těchto údajů nebo šíření upravené verze bez poskytnutí adekvátní licence k provedeným úpravám je pravděpodobně porušení licenčních podmínek a může být postihováno. Poskytování zdrojového kódu při šíření není touto licencí vyžadováno.

Pro nové verze, další informace, aktuální zdrojový kód a možnost se zapojit do projektu „Linux: Kniha kouzel“ navštivte jeho repozitář na GitHubu.