Výmena zlyhaného disku v poli mdadm na Ubuntu
Publikované: 15. februára 2025 o 22:02:33 UTC
Posledná aktualizácia: 12. januára 2026 o 8:50:03 UTC
Ak sa nachádzate v obávanej situácii, kedy sa vám v poli RAID mdadm pokazí disk, tento článok vysvetľuje, ako ho správne vymeniť 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, ktorá je v čase písania tohto článku zahrnutá v jeho repozitároch; v čase písania tohto článku v4.1-rc1. Pre iné verzie môžu, ale nemusia byť platné.
Nedávno sa mi náhle vyskytla porucha disku na mojom domácom súborovom serveri, ktorý pozostáva z deviatich diskov v poli RAID-6 od spoločnosti mdadm. To je vždy desivé, ale našťastie sa mi podarilo rýchlo zohnať náhradný disk, ktorý mi bol doručený už na druhý deň, takže som mohol začať s rekonštrukciou.
Priznávam, že keď som pôvodne nastavoval súborový server, bol som trochu príliš lakomý; iba dva z diskov sú skutočné NAS disky (Seagate IronWolf), zatiaľ čo zvyšok sú stolné disky (Seagate Barracuda). Nie je prekvapujúce, že to bol jeden z diskov pre stolné počítače, ktorý sa vzdal (hoci po takmer troch rokoch služby). Bol úplne mŕtvy; po jeho presunutí do USB externého disku pre stolné počítače som z neho počul len znepokojujúci cvakavý zvuk a ani Ubuntu 20.04, ani Windows 10 ho nedokázali rozpoznať.
No dobre, k náhradnému dielu (a áno, nový disk, ktorý som si kúpil, bol IronWolf, poučenie) - hoci je to desivé, stratiť disk 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ť chybný disk v poli mdadm, ale našťastie je to také zriedkavé, že si zvyčajne musím vyhľadať správne príkazy. Tentoraz som sa rozhodol vytvoriť si vlastný malý návod pre budúce použitie.
Takže v prvom rade, keď dostanete obávaný e-mail s upozornením na zlyhanie od mdadm, musíte identifikovať, ktorý disk zlyhal. Iste, mdadm vám oznámi názov zariadenia (v mojom prípade /dev/sdf), ale pravdepodobne nie je zrejmé, o aký fyzický disk ide, pretože tieto názvy sa môžu pri spustení počítača zmeniť.
Ak si nie ste istí ani názvom zariadenia, ktoré zlyhalo, 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 môžete skúsiť nájsť sériové číslo chybného disku zadaním tohto príkazu:
(ak sa smartctl nenájde, musíte si na Ubuntu nainštalovať balík smartmontools)
Sériové číslo sa potom dá porovnať so sériovými číslami na fyzickom štítku na diskoch, aby sa zistilo, ktorý z nich zlyhal.
Tentoraz som však také šťastie nemal. Disk bol úplne mŕtvy a dokonca odmietal poskytnúť SMART alebo iné údaje vrátane sériového čísla.
Keďže som mal fyzický prístup k serveru (čo naozaj potrebujete, ak si chcete fyzický disk vymeniť sami, predpokladám ;-)) a server v čase zlyhania disku bežal (a vďaka redundancii RAID-6 bežal bez problémov), zvolil som naozaj primitívnu, ale v skutočnosti veľmi účinnú a zrejmú metódu - jednoducho som skopíroval veľký súbor na server a sledoval, ktorá kontrolka HDD nebliká. V priebehu niekoľkých sekúnd som identifikoval vinníka.
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):
V prípade úspechu mdadm odpovie správou, že disk „odstránil za chodu“, zrejme preto, že v danom čase beží virtuálne RAID zariadenie.
Ak zlyhá s chybovým hlásením podobným hláseniu „zariadenie alebo zdroj je zaneprázdnený“, je možné, že mdadm v skutočnosti nezaregistroval disk ako úplne zlyhaný. Ak to chcete urobiť, zadajte tento príkaz (opäť nezabudnite podľa potreby nahradiť názvy zariadení 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, naozaj – istí, že váš počítač a ovládač podporujú výmenu za chodu, môžete to urobiť bez vypnutia počítača. To by bol spôsob, ako postupovať na kritických produkčných systémoch bežiacich na skutočnom, správnom serverovom hardvéri, o ktorom s istotou viete, že ho zvládne. Môj domáci súborový server je však založený na základnej doske pre stolné počítače spotrebiteľskej triedy s niekoľkými polo-noname SATA ovládačmi v PCIe slotoch, ktoré poskytujú viac SATA portov.
Hoci by SATA vo všeobecnosti malo podporovať výmenu disku za chodu, v tomto nastavení som nechcel nič riskovať, a tak som sa rozhodol vypnúť počítač počas výmeny disku.
Predtým je dobré zakomentovať zariadenie RAID v súbore /etc/fstab, aby sa Ubuntu nepokúsil o jeho automatické pripojenie pri ďalšom spustení, pretože by sa mohlo zaseknúť a prepnúť vás do režimu obnovy kvôli poškodenému poľu RAID. To nemusí byť veľký problém, ak ide o stolný systém, ale ja tento server prevádzkujem bez pripojeného monitora alebo klávesnice, takže by to bolo trochu nepríjemné.
Po spustení počítača s nainštalovaným úplne novým diskom ho identifikujte pomocou príkazu lsblk alebo iným spôsobom. Ak ste nič iné nezmenili, pravdepodobne (ale nie nevyhnutne) dostane rovnaký názov ako disk, ktorý ste vymenili. V mojom prípade áno, takže nový disk sa tiež nazýva /dev/sdf.
Keďže moje pole je založené na oddieloch a nie na fyzických zariadeniach, musel som skopírovať tabuľku oddielov z funkčného disku na nový disk, aby som sa uistil, že sú úplne rovnaké. Ak pole spúšťate na fyzických zariadeniach, tento krok môžete preskočiť.
Na tento účel som použil sgdisk, pričom som skopíroval tabuľku oddielov z /dev/sdc do /dev/sdf. Uistite sa, že ste podľa potreby nahradili názvy zariadení tak, aby sa zhodovali s vašimi vlastnými.
Všimnite si poradie: najprv uvádzate disk „do“! Pre mňa je to trochu neintuitívne, ale uistite sa, že to urobíte správne, aby ste v poli nedostali ďalšiu poruchu disku ;-)
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, nie je to žiadna oslava, je to vlastne dosť pomalý a stresujúci proces, pretože naozaj, naozaj nechcete, aby v tejto chvíli zlyhal ďalší disk. Pivo by však mohlo pomôcť.)
Každom prípade, ak chcete pridať nový disk do poľa, zadajte tento príkaz (opäť nezabudnite podľa potreby nahradiť názvy zariadení vlastnými):
Ak všetko pôjde dobre, disk bude pridaný do poľa bez problémov. Myslím, že je štandardne pridaný ako „horúca náhrada“, ale keďže tomuto poľu chýba disk (ten, ktorý zlyhal), okamžite sa použije a spustí sa proces obnovy.
Môžete to sledovať takto:
Toto bude pravdepodobne chvíľu trvať; na mojom skromnom serveri (založenom prevažne na spotrebiteľskom hardvéri a stolových diskoch, samozrejme) sa mu podarilo dosiahnuť tesne pod 100 MB/s. Majte na pamäti, že ide o RAID-6, takže s prestavbou je spojených veľa výpočtov parity; RAID-10 by bol oveľa rýchlejší. Tento konkrétny stroj má štvorjadrový procesor AMD A10 9700E („E“ znamená, že ide o energeticky úsporný model s nízkym taktom, t. j. nie je super rýchly), len aby ste mali predstavu, čo môžete očakávať. S deviatimi 8 TB diskami v mojej zostave trvala úplná prestavba niečo vyše 24 hodín.
Počas prestavby môžete súborový systém pripojiť k poľu a používať ho normálne, ak chcete, ale ja radšej nechám prestavbu na jej dokončenie. Majte na pamäti, že ak jeden disk zlyhá, môže čoskoro nasledovať ďalší, takže chcete, aby prestavba prebehla čo najrýchlejšie, pretože naozaj nechcete, aby počas nej zlyhal ďalší disk. Preto ho nezaťažujte ďalšími I/O operáciami, ktoré nie sú nevyhnutne potrebné.
Keď je to hotové, pridajte ho späť do súboru /etc/fstab, reštartujte a užívajte si súbory :-)
