Výměna vadného disku v mdadm Array na Ubuntu
Vydáno: 15. února 2025 v 22:01:12 UTC
Poslední aktualizace: 12. ledna 2026 v 8:49:51 UTC
Pokud se nacházíte v obávané situaci, kdy se vám v poli RAID mdadm selže disk, tento článek vysvětluje, jak jej správně vyměnit v systému Ubuntu.
Replacing a Failed Drive in an mdadm Array on Ubuntu
Informace v tomto příspěvku jsou založeny na Ubuntu 18.04 a verzi mdadm obsažené v jeho repozitářích; v době psaní tohoto článku v4.1-rc1. Pro jiné verze mohou, ale nemusí být platné.
Nedávno mi náhle selhal disk na mém domácím souborovém serveru, který se skládá z devíti disků v poli RAID-6 od mdadm. To je vždycky děsivé, ale naštěstí se mi podařilo rychle sehnat náhradní disk, který byl doručen již následující den, takže jsem mohl začít s obnovou.
Přiznávám, že jsem byl při původní instalaci souborového serveru trochu moc lakomý; pouze dva z disků jsou skutečné NAS disky (Seagate IronWolf), zatímco zbytek jsou stolní disky (Seagate Barracuda). Není divu, že to byl jeden ze stolních disků, který se vzdal (i když po téměř třech letech služby). Byl úplně mrtvý; po jeho přesunutí do stolního USB boxu jsem z něj vydával jen znepokojivý cvakavý zvuk a ani Ubuntu 20.04, ani Windows 10 ho nedokázaly detekovat.
No nic, teď k náhradnímu dílu (a ano, nový disk, který jsem si koupil, byl IronWolf, poučení) - jakkoli je děsivé ztratit disk v běžícím poli, je to ještě děsivější, pokud neznáte správný postup pro jeho výměnu. Není to poprvé, co jsem musel vyměnit vadný disk v poli mdadm, ale naštěstí je to tak vzácné, že si obvykle musím vyhledat správné příkazy. Tentokrát jsem se rozhodl sepsat si vlastního malého průvodce pro budoucí použití.
Takže v první řadě, když od mdadm dostanete obávaný e-mail s upozorněním na selhání, musíte zjistit, který disk selhal. Jistě, mdadm vám sdělí název zařízení (v mém případě /dev/sdf), ale pravděpodobně není zřejmé, o jaký fyzický disk se skutečně jedná, protože tyto názvy se mohou při spuštění počítače změnit.
Pokud si nejste jisti ani tím, který název zařízení selhal, můžete to zjistit pomocí následujícího příkazu (nahraďte /dev/md0 vaším RAID zařízením):
Jak už bylo zmíněno, v mém případě to byl /dev/sdf, takže v tom pokračujme.
Pak se můžete pokusit najít sériové číslo vadného disku spuštěním tohoto příkazu:
(pokud smartctl není nalezen, je třeba nainstalovat balíček smartmontools v Ubuntu)
Sériové číslo lze poté porovnat se sériovými čísly na fyzickém štítku na discích, aby se zjistilo, který z nich selhal.
Tentokrát jsem ale takové štěstí neměl. Disk byl úplně mrtvý a dokonce odmítal poskytnout SMART nebo jiná data, včetně sériového čísla.
Protože jsem měl fyzický přístup k serveru (což je asi opravdu potřeba, pokud si chcete fyzický disk vyměnit sami ;-)) a server v době selhání disku skutečně běžel (a díky redundanci RAID-6 běžel bez problémů), zvolil jsem si opravdu primitivní, ale ve skutečnosti velmi efektivní a zřejmou metodu – jednoduše jsem zkopíroval velký soubor na server a sledoval, která kontrolka pevného disku nebliká. Během několika sekund jsem identifikoval viníka.
Než vytáhnete fyzický disk, je dobré formálně informovat mdadm o tomto záměru vydáním tohoto příkazu (v případě potřeby nahraďte názvy zařízení vlastními):
V případě úspěchu mdadm odpoví zprávou, že disk byl „hot removal“, zřejmě proto, že v danou chvíli běží virtuální RAID.
Pokud selže s chybovou zprávou podobnou „zařízení nebo zdroj je zaneprázdněn“, je možné, že mdadm ve skutečnosti nezaregistroval disk jako zcela selhaný. Aby to provedl, zadejte tento příkaz (opět nezapomeňte podle potřeby nahradit názvy zařízení vlastními):
Poté byste měli být schopni zařízení z pole odebrat pomocí předchozího příkazu.
Teď je čas disk skutečně vyměnit. Pokud jste si opravdu, ale opravdu – jako, opravdu – jistí, že váš počítač a řadič podporují výměnu za chodu, můžete to udělat bez vypnutí počítače. To by byl správný postup na kritických produkčních systémech běžících na skutečném, správném serverovém hardwaru, o kterém s jistotou víte, že ho zvládne. Můj domácí souborový server je založen na základní desce pro stolní počítače spotřební třídy s několika poloautomatickými SATA řadiči v PCIe slotech, které poskytují více SATA portů.
Ačkoli by SATA obecně mělo podporovat výměnu disku za provozu, v tomto nastavení jsem nehodlal nic riskovat, a tak jsem se rozhodl počítač při výměně disku vypnout.
Než to uděláte, je dobré zakomentovat zařízení RAID v souboru /etc/fstab, aby se Ubuntu nepokoušel o jeho automatické připojení při dalším spuštění, protože by se mohl kvůli degradovanému RAID poli zasect a vynutit vám přechod do režimu obnovy. To nemusí být velký problém, pokud se jedná o stolní systém, ale já tento server spouštím bez připojeného monitoru nebo klávesnice, takže by to bylo trochu otravné.
Po spuštění počítače s nainstalovaným novým diskem jej identifikujte pomocí příkazu lsblk nebo nějakým jiným způsobem. Pokud jste nic jiného nezměnili, pravděpodobně (ale ne nutně) dostane stejný název jako disk, který jste vyměnili. V mém případě ano, takže se nový disk také nazývá /dev/sdf.
Protože je moje pole založeno na oddílech, nikoli na fyzických zařízeních, musel jsem zkopírovat tabulku oddílů z funkčního disku na nový disk, abych se ujistil, že jsou úplně stejné. Pokud místo toho spouštíte pole na fyzických zařízeních, můžete tento krok přeskočit.
Pro tento účel jsem použil sgdisk, zkopíroval jsem tabulku oddílů z /dev/sdc do /dev/sdf. Nezapomeňte podle potřeby nahradit názvy zařízení tak, aby odpovídaly vašim vlastním.
Všimněte si pořadí: jako první uvádíte disk „do“! To je pro mě trochu neintuitivní, ale ujistěte se, že to uděláte správně, abyste v poli nedostali další selhání disku ;-)
Abyste se vyhnuli konfliktům UUID, vygenerujte pro nový disk nové UUID:
A teď konečně nastal čas přidat do pole nový disk a začít s obnovou! (Dobře, není to vlastně žádná oslava, je to vlastně docela pomalý a stresující proces, protože opravdu, ale opravdu nechcete, aby v tuto chvíli selhal další disk. Pivo by ale mohlo pomoci.)
Každopádně, chcete-li přidat nový disk do pole, zadejte tento příkaz (opět nezapomeňte podle potřeby nahradit názvy zařízení vlastními):
Pokud vše půjde dobře, disk bude do pole přidán bez problémů. Myslím, že je ve výchozím nastavení přidán jako „horká náhrada“, ale protože v tomto poli chybí disk (ten, který selhal), je okamžitě uveden do provozu a spustí se proces obnovy.
Můžete to sledovat takto:
To bude pravděpodobně chvíli trvat; na mém skromném serveru (založeném převážně na spotřebitelském hardwaru a desktopových discích, samozřejmě) byl schopen dosáhnout rychlosti necelých 100 MB/s. Mějte na paměti, že se jedná o RAID-6, takže s přestavbou je spojeno mnoho výpočtů parity; RAID-10 by byl mnohem rychlejší. Tento konkrétní stroj má čtyřjádrový procesor AMD A10 9700E („E“ znamená, že se jedná o energeticky úsporný model s nízkým taktem, tj. ne o superrychlý), jen abyste měli představu, co můžete očekávat. S devíti 8TB disky v mé sestavě trvala kompletní přestavba něco málo přes 24 hodin.
Během rebuildu můžete souborový systém připojit k poli a používat ho normálně, pokud chcete, ale já raději nechávám rebuild, dokud nebude hotový. Mějte na paměti, že pokud jeden disk selže, může brzy následovat další, takže chcete, aby rebuild proběhl co nejrychleji, protože opravdu nechcete, aby během něj selhal další disk. Proto jej nezatěžujte dalšími I/O operacemi, které nejsou nezbytně nutné.
Jakmile to bude hotové, přidejte jej zpět do souboru /etc/fstab, restartujte počítač a užívejte si své soubory :-)
