Výmena zlyhaného disku v poli mdadm na Ubuntu
Publikované: 15. februára 2025 o 22:02:33 UTC
Ak sa nachádzate v obávanej situácii zlyhania disku v poli mdadm RAID, tento článok vysvetľuje, ako ho správne nahradiť v systéme Ubuntu.
Replacing a Failed Drive in an mdadm Array on Ubuntu
Informácie v tomto príspevku sú založené na Ubuntu 18.04 a verzii mdadm zahrnutej v jeho úložiskách; v čase písania verzie 4.1-rc1. Môže a nemusí platiť pre iné verzie.
Nedávno som mal náhle zlyhanie disku na mojom domácom súborovom serveri, ktorý pozostáva z deviatich diskov v poli mdadm RAID-6. To je vždy desivé, ale našťastie sa mi podarilo rýchlo získať náhradný disk, ktorý mi bol doručený už na druhý deň, aby som mohol začať s prestavbou.
Bol som síce trochu príliš lacný, keď som pôvodne nastavoval súborový server; iba dva z diskov sú skutočné disky NAS (Seagate IronWolf), zatiaľ čo zvyšok sú disky pre stolné počítače (Seagate Barracuda). Nie je prekvapením, že to bol jeden z diskov pre stolné počítače, ktoré to vzdali (po takmer troch rokoch služby). Bolo to úplne mŕtve; po premiestnení do skrinky USB na stolnom počítači som z neho dostal iba znervózňujúci zvuk kliknutia a ani Ubuntu 20.04 ani Windows 10 ho nedokázali rozpoznať.
Ach, poďme k náhradnému dielu (a áno, nový disk, ktorý som si kúpil, bol IronWolf, ponaučenie) - je to tak desivé, ako strata disku v bežiacom poli, je to ešte desivejšie, ak nepoznáte správny postup na jeho výmenu. Nie je to prvýkrát, čo som musel vymeniť neúspešný disk v poli mdadm, ale našťastie je to také zriedkavé, že zvyčajne musím hľadať správne príkazy. Tentokrát som sa rozhodol pripraviť si vlastného malého sprievodcu pre budúce použitie.
Takže v prvom rade, keď dostanete e-mail s obávaným zlyhaním od mdadm, musíte zistiť, ktorý disk zlyhal. Iste, povie vám názov zariadenia (v mojom prípade /dev/sdf), ale pravdepodobne nie je jasné, ktorý fyzický disk to vlastne je, pretože tieto názvy sa môžu zmeniť pri zavádzaní počítača.
Ak si nie ste istí, ktorý názov zariadenia zlyhal, môžete to zistiť pomocou nasledujúceho príkazu (nahraďte /dev/md0 vaším zariadením RAID):
Ako už bolo spomenuté, v mojom prípade to bol /dev/sdf, takže v tom pokračujme.
Potom sa môžete pokúsiť nájsť sériové číslo chybnej jednotky zadaním tohto príkazu:
(ak sa smartctl nenájde, musíte si nainštalovať balík smartmontools na Ubuntu)
Sériové číslo potom možno porovnať so sériovými číslami na fyzickom štítku na jednotkách, aby ste zistili, ktorý z nich zlyhal.
Tentoraz som však také šťastie nemal. Disk bol úplne mŕtvy a dokonca odmietol poskytnúť SMART alebo iné údaje vrátane sériového čísla.
Keďže som mal fyzický prístup k serveru (ktorý skutočne potrebujete, ak sa chystáte vymeniť fyzický disk sami, predpokladám ;-)) a server bol v skutočnosti spustený, keď disk zlyhal (a naďalej fungoval dobre vďaka redundancii RAID-6), zvolil som skutočne primitívnu, ale v skutočnosti vysoko efektívnu a zrejmú metódu jednoduchého kopírovania veľkého súboru na server a sledovania, ktorý indikátor HDD nebliká. V priebehu niekoľkých sekúnd som identifikoval vinníka.
Teraz, pred vytiahnutím fyzického disku, je dobré formálne informovať mdadm o tomto zámere vydaním tohto príkazu (podľa potreby nahraďte názvy zariadení vlastnými):
Po úspechu mdadm odpovie správou, že „horúce odstránil“ disk, zrejme preto, že virtuálne raidové zariadenie práve beží.
Ak zlyhá s chybovým hlásením podobným ako „zariadenie alebo zdroj je zaneprázdnený“, je možné, že mdadm v skutočnosti nezaregistroval, že disk úplne zlyhal. Aby ste to dosiahli, zadajte tento príkaz (opäť nezabudnite nahradiť názvy zariadení svojimi vlastnými):
Potom by ste mali byť schopní odstrániť zariadenie z poľa pomocou predchádzajúceho príkazu.
Teraz je čas skutočne vymeniť disk. Ak ste si naozaj, naozaj – akože naozaj – istý, že váš počítač a ovládač podporujú výmenu za chodu, môžete to urobiť bez vypnutia stroja. To by bol spôsob, ako pokračovať v kritických produkčných systémoch bežiacich na skutočnom, správnom serverovom hardvéri, o ktorom viete, že to zvládne. Môj domáci súborový server je založený na základnej doske pre stolné počítače s niekoľkými semi-noname SATA radičmi v slotoch PCIe, ktoré poskytujú viac portov SATA.
Hoci SATA by vo všeobecnosti mala podporovať výmenu za chodu, v tomto nastavení som nechcel nič riskovať, a tak som sa rozhodol vypnúť počítač pri výmene disku.
Predtým, ako to urobíte, je dobré zakomentovať zariadenie raid v súbore /etc/fstab, aby sa ho Ubuntu nepokúsilo automaticky pripojiť pri ďalšom spustení, pretože by sa mohlo zablokovať a prinútiť vás prejsť do režimu obnovenia kvôli degradovanému poľu RAID. To nemusí byť veľký problém, ak ide o stolný systém, ale tento server prevádzkujem bez hlavy bez pripojeného monitora alebo klávesnice, takže by to bol trochu problém.
Po spustení počítača s nainštalovaným úplne novým diskom použite lsblk alebo iné prostriedky na jeho identifikáciu. Ak ste nezmenili nič iné, pravdepodobne (ale nie nevyhnutne ) dostane rovnaký názov ako jednotka, ktorú ste vymenili. V mojom prípade áno, takže nový sa tiež nazýva /dev/sdf.
Keďže moje pole je založené skôr na oddieloch ako na fyzických zariadeniach, potreboval som skopírovať tabuľku oddielov z pracovného disku na nový disk, aby som sa uistil, že sú úplne rovnaké. Ak namiesto toho spúšťate pole na fyzických zariadeniach, môžete tento krok preskočiť.
Na tento účel som použil sgdisk, skopíroval tabuľku oddielov z /dev/sdc do /dev/sdf. Nezabudnite nahradiť názvy zariadení tak, aby sa zhodovali s vašimi vlastnými.
Všimnite si poradie tu: najprv uveďte „do“ jazdy! Toto je pre mňa trochu neintuitívne, ale uistite sa, že ste to pochopili správne, aby ste v poli nespôsobili ďalšie zlyhanie disku ;-)
Potom, aby ste sa vyhli konfliktom UUID, vygenerujte nové UUID pre nový disk:
A teraz konečne nastal čas pridať nový disk do poľa a začať s prestavbou! (Dobre, v skutočnosti to nie je večierok, v skutočnosti je to dosť pomalý a znepokojujúci proces, pretože naozaj, naozaj nechcete, aby v tejto chvíli zlyhal ďalší disk. Pivo vám však môže pomôcť)
Ak chcete pridať nový disk do poľa, zadajte tento príkaz (znova nezabudnite nahradiť názvy zariadení svojimi vlastnými):
Ak všetko pôjde dobre, disk sa pridá do poľa bez zaseknutia. Domnievam sa, že je v predvolenom nastavení skutočne pridané ako „horúca náhrada“, ale keďže tomuto poli chýba disk (ten, ktorý zlyhal), okamžite sa uvedie do prevádzky a spustí sa proces prestavby.
Môžete to sledovať takto:
Pravdepodobne to chvíľu potrvá; na mojom skromnom serveri (založenom prevažne na spotrebiteľskom hardvéri a jednotkách pre stolné počítače, uvedomte si to) bol schopný dosiahnuť necelých 100 MB/s. Majte na pamäti, že toto je RAID-6, takže s prestavbou je spojených veľa paritných výpočtov; RAID-10 by bol oveľa rýchlejší. Tento konkrétny stroj má štvorjadrový procesor AMD A10 9700E („E“, čo znamená, že ide o podtaktovaný energeticky efektívny model, teda nie super rýchly), len aby ste mali predstavu, čo môžete očakávať. S deviatimi 8 TB diskami v mojom nastavení trvala úplná prestavba niečo vyše 24 hodín.
Počas prestavby môžete pripojiť súborový systém na pole a použiť ho ako normálne, ak si to želáte, ale radšej to nechám na prebudovanie, kým to nebude hotové. Majte na pamäti, že ak zlyhá jeden disk, môže čoskoro nasledovať ďalší, takže chcete, aby prestavba prebehla čo najrýchlejšie, pretože naozaj nechcete, aby počas toho zlyhal ďalší disk. Preto ho nezaťažujte inými IO, ktoré nie sú nevyhnutne potrebné.
Po dokončení ho pridajte späť do súboru /etc/fstab, reštartujte počítač a užívajte si súbory :-)