Výměna vadného disku v mdadm Array na Ubuntu
Vydáno: 15. února 2025 v 22:01:12 UTC
Pokud se nacházíte v obávané situaci selhání disku v poli mdadm RAID, tento článek vysvětluje, jak jej správně nahradit 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ženou v jeho úložištích; v době psaní verze 4.1-rc1. Může a nemusí platit pro jiné verze.
Nedávno jsem měl náhlou poruchu disku na mém domácím souborovém serveru, který se skládá z devíti disků v poli mdadm RAID-6. To je vždy děsivé, ale naštěstí jsem byl schopen rychle získat náhradní disk, který byl dodán již druhý den, abych mohl začít s přestavbou.
Byl jsem sice trochu příliš levný, když jsem původně nastavoval souborový server; pouze dva z disků jsou skutečné disky NAS (Seagate IronWolf), zatímco zbytek jsou disky pro stolní počítače (Seagate Barracuda). Není divu, že to byl jeden z disků pro stolní počítače, které to vzdaly (po téměř třech letech služby). Bylo to úplně mrtvé; poté, co jsem jej přesunul do stolního USB krytu, jediné, co jsem z něj dostal, byl znepokojující zvuk kliknutí a ani Ubuntu 20.04 ani Windows 10 ho nedokázaly detekovat.
No, k náhradnímu dílu (a ano, nový disk, který jsem si koupil, byl IronWolf, poučení) - jak děsivé je ztráta disku 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 obvykle musím hledat správné příkazy. Tentokrát jsem se rozhodl vytvořit svého vlastního malého průvodce pro budoucí použití.
Takže za prvé, když dostanete e-mail s obávaným selháním od mdadm, musíte zjistit, který disk selhal. Jistě, řekne vám název zařízení (v mém případě /dev/sdf), ale pravděpodobně není zřejmé, která fyzická jednotka to ve skutečnosti je, protože tato jména se mohou změnit při spuštění počítače.
Pokud si ani nejste jisti, který název zařízení selhal, můžete to zjistit pomocí následujícího příkazu (nahraďte /dev/md0 vaším zařízením RAID):
Jak již bylo zmíněno, v mém případě to byl /dev/sdf, takže v tom pokračujme.
Poté se můžete pokusit najít sériové číslo vadného disku zadáním tohoto příkazu:
(pokud smartctl není nalezen, musíte nainstalovat balíček smartmontools na Ubuntu)
Sériové číslo pak lze porovnat se sériovými čísly na fyzickém štítku na jednotkách a zjistit, který z nich selhal.
Tentokrát jsem ale takové štěstí neměl. Disk byl zcela mrtvý a dokonce odmítl poskytnout SMART nebo jiná data včetně sériového čísla.
Vzhledem k tomu, že jsem měl fyzický přístup k serveru (který opravdu potřebujete, pokud se chystáte vyměnit fyzický disk sami, předpokládám ;-)) a server skutečně běžel, když disk selhal (a nadále běžel dobře díky redundanci RAID-6), zvolil jsem opravdu primitivní, ale ve skutečnosti vysoce efektivní a zřejmý způsob, jak jednoduše zkopírovat velký soubor na server a sledovat, který indikátor HDD nebliká. Během několika sekund jsem identifikoval viníka.
Nyní, před vytažením fyzické jednotky, je dobré formálně informovat mdadm o tomto záměru vydáním tohoto příkazu (názvy zařízení nahraďte podle potřeby svými):
V případě úspěchu mdadm odpoví zprávou, že „hot odstranil“ disk, zřejmě proto, že virtuální raid zařízení v tu chvíli skutečně běží.
Pokud selže s chybovou zprávou podobnou „zařízení nebo prostředek zaneprázdněn“, může to být tím, že mdadm ve skutečnosti nezaregistroval, že disk zcela selhal. Chcete-li to provést, zadejte tento příkaz (opět nezapomeňte podle potřeby nahradit názvy zařízení svými):
Poté byste měli být schopni odebrat zařízení z pole pomocí předchozího příkazu.
Nyní je čas skutečně vyměnit disk. Pokud jste si opravdu, opravdu - jako, opravdu - jisti, že váš počítač a řadič podporují výměnu za chodu, můžete to udělat bez vypínání stroje. To by byl způsob, jak pokračovat v kritických produkčních systémech běžících na skutečném, správném serverovém hardwaru, o kterém víte, že to zvládne. Můj domácí souborový server je založen na základní desce pro stolní počítače pro spotřebitele s několika semi-noname SATA řadiči ve slotech PCIe, které poskytují více portů SATA.
Ačkoli by SATA obecně mělo podporovat výměnu za chodu, nehodlal jsem v tomto nastavení nic riskovat, takže jsem se rozhodl pro vypnutí počítače při výměně disku.
Než to uděláte, je dobré okomentovat raidové zařízení v souboru /etc/fstab, aby se jej Ubuntu nepokusilo připojit automaticky při příštím spuštění, protože by se mohlo zablokovat a vynutit si režim obnovy kvůli degradovanému poli RAID. To nemusí být velký problém, pokud se jedná o stolní systém, ale tento server provozuji bez hlavy bez připojeného monitoru nebo klávesnice, takže by to byl trochu problém.
Po nabootování počítače s nainstalovaným zbrusu novým diskem použijte lsblk nebo jiný způsob k jeho identifikaci. Pokud jste nic jiného nezměnili, bude pravděpodobně (ale ne nutně ) mít stejný název jako jednotka, kterou jste vyměnili. V mém případě ano, takže nový se také nazývá /dev/sdf.
Protože moje pole je založeno na oddílech spíše než na fyzických zařízeních, potřeboval jsem zkopírovat tabulku oddílů z funkčního disku na nový disk, abych se ujistil, že jsou přesně 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 tabulku oddílů z /dev/sdc do /dev/sdf. Nezapomeňte nahradit názvy zařízení tak, aby odpovídaly vašim vlastním.
Všimněte si pořadí zde: jako první uveďte „do“ jízdy! To je pro mě trochu neintuitivní, ale ujistěte se, že jste to udělali správně, abyste nedostali další selhání disku v poli ;-)
Poté, abyste se vyhnuli konfliktům UUID, vygenerujte nové UUID pro nový disk:
A nyní konečně nastal čas přidat nový disk do pole a zahájit přestavbu! (Dobře, ve skutečnosti to není večírek, ve skutečnosti je to docela pomalý a znepokojující proces, protože v tuto chvíli opravdu nechcete, aby další disk selhal. Pivo by však mohlo pomoci)
Chcete-li přidat nový disk do pole, zadejte tento příkaz (znovu nezapomeňte nahradit názvy zařízení svými vlastními):
Pokud vše půjde dobře, bude disk přidán do pole bez škytavky. Domnívám se, že je ve výchozím nastavení ve skutečnosti přidáno jako „hot spare“, ale protože tomuto poli chybí disk (ten, který selhal), je okamžitě uvedeno do provozu a začne proces přestavby.
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 jednotkách pro stolní počítače, mějte na paměti) byl schopen dosáhnout těsně pod 100 MB/s. Mějte na paměti, že se jedná o RAID-6, takže s přestavbou je spojeno mnoho paritních výpočtů; RAID-10 by byl mnohem rychlejší. Tento konkrétní stroj má čtyřjádrový procesor AMD A10 9700E („E“, což znamená, že jde o podtaktovaný energeticky účinný model, tedy ne super rychlý), jen abyste měli představu, co můžete očekávat. S devíti 8TB disky v mém nastavení trvala úplná přestavba něco málo přes 24 hodin.
Během přestavby můžete připojit souborový systém na pole a používat jej jako normálně, pokud chcete, ale raději to nechávám na přestavbě, dokud nebude hotovo. Mějte na paměti, že pokud selže jeden disk, může brzy následovat další, takže chcete, aby byla přestavba provedena co nejrychleji, protože opravdu nechcete, aby během toho selhal další disk. Proto jej nezatěžujte jinými IO, které nejsou nezbytně nutné.
Jakmile je hotovo, přidejte jej zpět do svého souboru /etc/fstab, restartujte a užívejte si soubory :-)