↩️️ O mdadm
mdadm („Multiple Device Admin“) je nástroj v Linuxu, sloužící k vytváření, správě a monitorování softwarových RAID polí („Redundant Array of Independent Disks“). Nejvýznamnější vlastností je bezvýpadkové zabezpečení dat při závadě disku.
😎 Už se mi několikrát vyplatilo. Nedokážu si představit, že bych provozoval počítače bez tohoto diskového zabezpečení.
mdadm je nástroj pro správu Softwarových RAID polí, realizovaných jádrem Linuxu pomocí subsystému md („Multiple Devices“). Tento subsystém spojuje několik fyzických disků nebo oddílů do jednoho logického disku, které se systému tváří jako běžný disk.
| RAID 0 (sporný RAID typ) | 👉 striping (data napříč disky)
👉 nezabezpečené proti selhání disku ⚠️ |
| RAID 1 | 👉 mirroring (zrcadlení) |
| RAID 4 | 👉 striping s paritou na jednom disku |
| RAID 5 | 👉 striping s jednou paritou napříč disky |
| RAID 6 | 👉 striping se dvěma paritami napříč disky |
| RAID 10 (1+0) | 👉 mirroring + striping (Kombinace RAID 1 a RAID 0) |
| RAID 01 (0+1) | 👉 striping + mirroring (Kombinace RAID 0 a RAID 1)
👉 od r. 2023 odstraněný z Linuxového jádra ⚠️ |
| Linear mode (funkce) | 👉 spojení disků bez stripingu (prosté seřazení disků)
👉 nezabezpečené proti selhání disku ⚠️ |
| Multipath (funkce) | 👉 pouze nabízí více cest k fyzickému nebo logickému disku
👉 neošetřuje selhání disku, ale výpadek cesty k němu ⚠️ |
| Faulty (funkce) | 👉 nejde o opravdové selhání disku, ale nasimulování jeho vady v RAID poli
👉 slouží pro testování chování RAID při selhání disku |
Jelikož RAID podpora je přímo v Linuxovém jádru, pro moderní vícejádrové procesory není zátěž softwarovým RAID moc znatelná. Samozřejmě, pokud nejde o extrémní zatížení zápisy do RAIDů s dopočítávanou paritou. Zatížení závisí na typu RAID:
| RAID 0, RAID 1 | 🟢 minimální zátěž (jde jen o striping nebo zrcadlení) |
| RAID 10 | 🟡 střední zátěž (současně striping a zrcadlení) |
| RAID 4, RAID 5, RAID 6 | 🟠 vyšší zátěž (dopočítávání parity) |
Jelikož při závadě disku převezme jeho funkci disk zástupný, tak uživatel výpadek nepozná a je nutné mít zprovozněné oznamování závady e-mailem.
↩️️ Obecné
mdadm je obvykle dostupný v repozitářích Linux distribucí a dá se rovnou instalovat:
- 💻
sudo apt install mdadm - potvrzení instalace

💻 sudo parted -l
💻 sudo blkid
💻 lsblk -a df
Podrobný výpis všech RAIDů:
💻 sudo mdadm -D /dev/md?*
RAID stav jednorázově:
💻 cat /proc/mdstat
RAID stav cyklicky po 2 sec.:
💻 watch -n 2 cat /proc/mdstat
Předpokladem pro odeslání emailu při závadě v RAID je mít nainstalován sendmail
Povolit „monitor daemon sends email notifications“:
💻 sudo dpkg-reconfigure mdadm
Test funkce posláním z mdadm RAID statusů na e-mail:
💻 sudo mdadm --monitor --scan --test -1
Prevence na zřídka používaná místa disku. Prověří úplným přečtením všech diskových oddílů RAIDu. Jde-li o zadání kontroly více RAID najednou v rámci disku, běh je po jednom [===> ]. Ostatní RAID čekají v pořadí s příznakem resync=DELAYED. Tento proces běží na pozadí a je-li přerušen například rebootem počítače, pak opět naváže, pokračuje v pořadí.
Z příkazové řádky pro dva RAIDy
Příklad kontrol RAIDů /dev/md0 , /dev/md1 :
💻 echo check | sudo tee /sys/block/md0/md/sync_action
💻 echo check | sudo tee /sys/block/md1/md/sync_action
Bash skript pro všechny RAIDy
💻 vi raid_check.bash
Vložit:
#!/bin/bash for _Raid in /sys/block/md?*/md/sync_action do echo check | sudo tee $_Raid done
Kontrola služeb automatické kontroly konzistence RAIDů
💻 sudo systemctl status mdcheck_start.timer
💻 sudo systemctl status mdcheck_continue.timer
Zakázání služeb automatické kontroly konzistence RAIDů
Pokud se kontrola konzistence provádí v cyklu vlastním skriptem, lze RAID kontrolu systémem deaktivovat:
💻 sudo systemctl stop mdcheck_start.timer
💻 sudo systemctl disable mdcheck_start.timer
💻 sudo systemctl stop mdcheck_continue.timer
💻 sudo systemctl disable mdcheck_continue.timer
Povolení služeb automatické kontroly konzistence RAIDů
Pokud se kontrola konzistence provádí v cyklu vlastním skriptem, lze RAID kontrolu systémem deaktivovat:
💻 sudo systemctl start mdcheck_start.timer
💻 sudo systemctl enable mdcheck_start.timer
💻 sudo systemctl start mdcheck_continue.timer
💻 sudo systemctl enable mdcheck_continue.timer
Přidáním Spare disku s diskovým oddílem o stejné velikosti jako ostatní v daném RAIDu, umožňuje automaticky okamžité zastoupení vadného disku. Jinak je neaktivní. V příkladu Spare disk s oddílem /dev/sdc1 přidaný do RAIDu /dev/md0
💻 sudo mdadm --zero-superblock /dev/sdc1
💻 sudo mdadm -a /dev/md0 /dev/sdc1
Je-li tento Spare diskový oddíl /dev/sdc1 stále volný, indikovaný jako (S) , dá se i odebrat
💻 sudo mdadm -r /dev/md0 /dev/sdc1
Simulace poškození a to označením diskového oddílu v daném RAID jako vadný. Použitelné i při opravdové závadě disku, poškození RAIDu.
💻 sudo mdadm -f /dev/md0 /dev/sda1
… příznaky: faulty, u diskového oddílu příznak (F) a místo [...U...] je [..._...]
Vadný diskový oddíl na disku je prezentován jako faulty a je nutné ho z konfigurace odebrat (nejde-li o simulaci, tak i fyzicky):
💻 sudo mdadm -r /dev/md0 /dev/sda1
… příznaky: removed, zmizí daný diskový oddíl a je stále [..._...]
⚠️ Vymazání záznamu o případném předchozím jiném RAIDu. Použít pouze nejde-li o simulaci. ⚠️
💻 sudo mdadm --zero-superblock /dev/sda1
Začlenění oddílu, ať už zpět po simulaci a nebo nového po závadě:
💻 sudo mdadm -a /dev/md0 /dev/sda1
… příznaky: spare rebuilding, přibude daný diskový oddíl, začne synchronizace [===> ]
… nakonec: active sync, opět [...U...].
Tento proces běží na pozadí a je-li přerušen například rebootem počítače, pak opět naváže, pokračuje.
Po HW závadě může se disk RAIDu prezentovat jako Spare disk, RAID0.
Zjištění stavu:
💻 cat /proc/mdstat
Deaktivace RAID:
💻 sudo mdadm --stop /dev/md0
Regenerace RAID:
💻 sudo mdadm --assemble --scan
Zjištění stavu:
💻 cat /proc/mdstat
Uvolnění RAIDu
Odpojení od adresáře:
💻 sudo umount /dev/md0
Stopnutí RAIDu:
💻 sudo mdadm --stop /dev/md0
Zobrazení aktuální konfigurace RAIDu
💻 sudo mdadm --detail /dev/md0
Výpis ukáže v tomto příkladu přidělené disky /dev/sda1 a /dev/sdb1
Přejmenování md0 na md11
Před naskenováním aktuální RAIDu konfigurace je dobré odebrat a z konfiguračního souboru tu předešlou:
💻 sudo vi /etc/mdadm/mdadm.conf
Přejmenování RAIDu
💻 sudo mdadm --assemble /dev/md11 --name=11 --update=name /dev/sda1 /dev/sdb1
Kontrola přejmenování
💻 sudo mdadm -Db /dev/md11
Uložení aktuální konfigurace RAIDu
Naskenování konfigurace RAIDu a přidání záznamů do konfiguračního souboru:
💻 sudo mdadm --examine --scan |sudo tee -a /etc/mdadm/mdadm.conf
💻 sudo update-initramfs -u
Připojení RAID zpět k adresáři
💻 sudo mount /dev/md11 /data
☝️ Je-li automatické připojení dle device file (nikoli např. dle LABELu či UUID), tak upravit definici mountu v /etc/fstab
↩️️ RAID 1
Nakonfigurování oddílů disků pro RAID1
Vytvoření shodných oddílů na /dev/sda1 a /dev/sdd1 .
💻 sudo gdisk /dev/sda
💻 sudo gdisk /dev/sdb
Mají-li být i jako bootovací, tak je nastavit: MBR: protective a GPT: pressent mód x→n→m, pak vytvořit oddíl a nastavit RAID typ oddílu, je-li pro bootování systému: EF02 , jiank: FD00
Smazání případné pozůstalé RAID konfigurace
💻 sudo mdadm --zero-superblock /dev/sda1
💻 sudo mdadm --zero-superblock /dev/sdb1
Vytvoření RAID1
Vytvoření RAID1 /dev/md0 (parametrem -l 1) se dvěma zrcadlenými diskovými oddíly /dev/sda1 /dev/sdb1 (parametrem -n 2) :
💻 sudo mdadm -v --create /dev/md0 -l 1 -n 2 /dev/sda1 /dev/sdb1
Uložení RAID konfigurace
Odebrat předešlou RAID konfiguraci… :
💻 sudo vi /etc/mdadm/mdadm.conf
Uložení aktuální RAID konfiguraci:
💻 sudo mdadm --examine --scan |sudo tee -a /etc/mdadm/mdadm.conf
💻 sudo update-initramfs -u
Zobrazení stavu a konfigurace RAID1
Zobrazení stavu:
💻 cat /proc/mdstat
Zobrazení konfigurace:
💻 sudo mdadm -D /dev/md0
Migrace disku bez RAID do výsledného dvou diskového RAID1 s přidáním jednoho disku.
Nakonfigurování nového disku pro RAID1
Vytvoření oddílu /dev/sdb1 na přidaném disku, který nemusí mít stejnou velikost jako zdrojový /dev/sda1 .
💻 sudo gdisk /dev/sdb
Má-li být i jako bootovací, tak nastavit: MBR: protective a GPT: pressent mód x→n→m, pak vytvořit oddíl a nastavit RAID typ oddílu, je-li pro bootování systému: EF02 , jiank: FD00
Smazání případné pozůstalé RAID konfigurace
💻 sudo mdadm --zero-superblock /dev/sdb1
Vytvoření degradovaného RAID1
Vytvoření pouze s jedním diskem /dev/sdb1 , kdy druhý disk bude konfigurován jako chybějící.
💻 sudo mdadm -v --create /dev/md0 -l 1 -n 2 missing /dev/sdb1
Uložení RAID konfigurace
Odebrat předešlou RAID konfiguraci… :
💻 sudo vi /etc/mdadm/mdadm.conf
Uložení aktuální RAID konfiguraci:
💻 sudo mdadm --examine --scan |sudo tee -a /etc/mdadm/mdadm.conf
💻 sudo update-initramfs -u
Naformátování degradovaného RAID1
Filesystém, v mém případě ext4 a pojmenovaným DATA-MD0
💻 sudo mke2fs -jt ext4 -L DATA-MD0 /dev/md0
Překopírování dat do degradovaného RAID1
💻 sudo mount /dev/md0 /mnt
💻 sudo cp -pr /data/. /mnt/
Přemontování adresáře /data na RAID /dev/md0
💻 sudo umount /data
💻 sudo umount /mnt
💻 sudo mount /dev/md0 /data
Pro trvalé přemontování upravit mount definici v:
💻 sudo vi /etc/fstab
Nakonfigurování původního disku pro RAID1
Přenastavení původního diskového oddílu /dev/sda1 pro přidání k diskovému oddílu /dev/sdb1 v RAID1 /dev/md0 :
💻 sudo gdisk /dev/sda
v něm nastavit MBR: protective a GPT: pressent mód x→n→m, pak uzpůsobit oddíl, aby měl stejnou velikost jako oddíl disku v RAIDu a stejně nastavit i typ. Je-li pro bootování systému: EF02 , jiank: FD00
Začlenění původního disku do RAID1
Začlenění do RAID1 :
💻 sudo mdadm --zero-superblock /dev/sda1
💻 sudo mdadm -a /dev/md0 /dev/sda1
Po skončení procesu přičlenění se stane degradovaný RAID plnohodnotným.
Zobrazení stavu a konfigurace RAID1
Zobrazení stavu:
💻 cat /proc/mdstat
Zobrazení konfigurace:
💻 sudo mdadm -D /dev/md0
Přidáním disku do RAID1 se nezvýší jeho kapacita, ale posílí se redundance a rychlost čtení. Přidá se /dev/sdc1 k ostatním /dev/sda1 , /dev/sdb1 .
💻 sudo mdadm --zero-superblock /dev/sdc1
💻 sudo mdadm -a /dev/md0 /dev/sdc1
💻 sudo mdadm --grow /dev/md0 -n 3
Nejde-li o simulaci, vymazání záznamu o případném předchozím jiném RAIDu.
💻 sudo mdadm --zero-superblock /dev/sda1
Začlenění
💻 sudo mdadm -a /dev/md0 /dev/sda1
… příznaky: spare rebuilding, přibude daný diskový oddíl, začne synchronizace [===> ]
… nakonec: active sync, opět [...U...].
Tento proces běží na pozadí a je-li přerušen například rebootem počítače, pak opět naváže, pokračuje.
↩️️ RAID 5
Nakonfigurování nových disků pro RAID5
Vytvoření shodných oddílů na /dev/sda1 , /dev/sdd1 a /dev/sdc1 .
💻 sudo gdisk /dev/sda
💻 sudo gdisk /dev/sdb
💻 sudo gdisk /dev/sdc
Mají-li být i jako bootovací, tak je nastavit: MBR: protective a GPT: pressent mód x→n→m, pak vytvořit oddíl a nastavit RAID typ oddílu, je-li pro bootování systému: EF02 , jiank: FD00
Smazání případné pozůstalé RAID konfigurace
💻 sudo mdadm --zero-superblock /dev/sda1
💻 sudo mdadm --zero-superblock /dev/sdb1
💻 sudo mdadm --zero-superblock /dev/sdc1
Vytvoření RAID5
Vytvoření RAID5 /dev/md0 (parametrem -l 5) se dvěma zrcadlenými diskovými oddíly /dev/sda1 , /dev/sdb1 , /dev/sdc1 (parametrem -n 3) :
💻 sudo mdadm -v --create /dev/md0 -l 5 -n 3 /dev/sda1 /dev/sdb1 /dev/sdc1
Uložení RAID konfigurace
Odebrat předešlou RAID konfiguraci… :
💻 sudo vi /etc/mdadm/mdadm.conf
Uložení aktuální RAID konfiguraci:
💻 sudo mdadm --examine --scan |sudo tee -a /etc/mdadm/mdadm.conf
💻 sudo update-initramfs -u
Zobrazení stavu a konfigurace RAID5
Zobrazení stavu:
💻 cat /proc/mdstat
Zobrazení konfigurace:
💻 sudo mdadm -D /dev/md0
Migrace disku bez RAID do výsledného tří-diskového RAID5 s přidáním dvou disků.
Nakonfigurování nových disků pro RAID5
Vytvoření shodných oddílů na /dev/sdb1 a /dev/sdc1 na nových discích, které ale nemusí mít stejnou velikost jako zdrojový /dev/sda1 .
💻 sudo gdisk /dev/sdb
💻 sudo gdisk /dev/sdc
Májí-li být i jako bootovací, tak nastavit: MBR: protective a GPT: pressent mód x→n→m, pak vytvořit oddíl a nastavit RAID typ oddílu, je-li pro bootování systému: EF02 , jiank: FD00
Smazání případné pozůstalé RAID konfigurace
💻 sudo mdadm --zero-superblock /dev/sdb1
💻 sudo mdadm --zero-superblock /dev/sdc1
Vytvoření degradovaného RAID5
Vytvoření pouze se dvěma disky /dev/sdb1 , /dev/sdc1 , kdy třetí disk bude konfigurován jako chybějící.
💻 sudo mdadm -v --create /dev/md0 -l 5 -n 3 missing /dev/sdb1 /dev/sdc1
Uložení RAID konfigurace
Odebrat předešlou RAID konfiguraci… :
💻 sudo vi /etc/mdadm/mdadm.conf
Uložení aktuální RAID konfiguraci:
💻 sudo mdadm --examine --scan |sudo tee -a /etc/mdadm/mdadm.conf
💻 sudo update-initramfs -u
Naformátování degradovaného RAID5
Filesystém, v mém případě ext4 a pojmenovaným DATA-MD0
💻 sudo mke2fs -jt ext4 -L DATA-MD0 /dev/md0
Překopírování dat do degradovaného RAID5
💻 sudo mount /dev/md0 /mnt
💻 sudo cp -pr /data/. /mnt/
Přemontování adresáře /data na RAID /dev/md0
💻 sudo umount /data
💻 sudo umount /mnt
💻 sudo mount /dev/md0 /data
Pro trvalé přemontování upravit mount definici v:
💻 sudo vi /etc/fstab
Nakonfigurování původního disku pro RAID5
Přenastavení oddílu /dev/sda1 původního disku pro přidání k diskovým oddílům /dev/sdb1 , /dev/sdc1 v RAID5 /dev/md0 :
💻 sudo gdisk /dev/sda
Má-li být i jako bootovací, tak nastavit: MBR: protective a GPT: pressent mód x→n→m, pak vytvořit oddíl a nastavit RAID typ oddílu, je-li pro bootování systému: EF02 , jiank: FD00
Smazání případné pozůstalé RAID konfigurace
💻 sudo mdadm --zero-superblock /dev/sda1
Začlenění původního disku do RAID5
Začlenění do RAID5 :
💻 sudo mdadm -a /dev/md0 /dev/sda1
Po skončení procesu přičlenění se stane degradovaný RAID plnohodnotným.
Zobrazení stavu a konfigurace RAID5
Zobrazení stavu:
💻 cat /proc/mdstat
Zobrazení konfigurace:
💻 sudo mdadm -D /dev/md0
Příklad navýšení kapacity RAID5 /dev/md0 začleněním čtvrtého diskového oddílu /dev/sdd1 k ostatním /dev/sda1 , /dev/sdb1 , /dev/sdc1 .
💻 sudo mdadm --zero-superblock /dev/sdd1
💻 sudo mdadm -a /dev/md0 /dev/sdd1
💻 sudo mdadm --grow /dev/md0 --size max
Kontrola a zvětšení souborového systému ext4
💻 sudo fsck /dev/md0
💻 sudo resize2fs /dev/md
