Zamjena neispravnog pogona u mdadm nizu na Ubuntu
Objavljeno: 15. februar 2025. u 22:04:14 UTC
Ako ste u strašnoj situaciji da imate kvar diska u mdadm RAID nizu, ovaj članak objašnjava kako ga ispravno zamijeniti na Ubuntu sistemu.
Replacing a Failed Drive in an mdadm Array on Ubuntu
Informacije u ovom postu su zasnovane na Ubuntu 18.04 i verziji mdadm-a koja je uključena u njegova spremišta; u vrijeme pisanja v4.1-rc1. Može, ali i ne mora biti važeće za druge verzije.
Nedavno sam imao iznenadni kvar diska na mom kućnom serveru datoteka, koji se sastoji od devet diskova u mdadm RAID-6 nizu. To je uvijek zastrašujuće, ali srećom sam uspio brzo nabaviti zamjenski disk koji je isporučen već sljedećeg dana kako bih mogao započeti obnovu.
Doduše, bio sam malo previše jeftin kada sam prvobitno postavio fajl server; samo dva diska su stvarni NAS diskovi (Seagate IronWolf), dok su ostali desktop diskovi (Seagate Barracuda). Nije iznenađujuće da je to bio jedan od desktop drajvova koji je odustao (ipak nakon skoro tri godine rada). Bio je potpuno mrtav; nakon što sam ga premjestio u desktop USB kućište, sve što sam dobio bio je uznemirujući zvuk klikanja i ni Ubuntu 20.04 ni Windows 10 nisu ga mogli otkriti.
Pa dobro, što se tiče zamjenskog dijela (i da, novi disk koji sam kupio je bio IronWolf, naučena lekcija) - koliko god da je zastrašujuće da izgubite disk u nizu koji radi, još je strašnije ako ne znate ispravnu proceduru za njegovu zamjenu. Nije prvi put da moram zamijeniti neispravan disk u nizu mdadm, ali srećom je toliko rijedak da obično moram tražiti odgovarajuće komande. Ovaj put sam odlučio da napravim svoj mali vodič za buduću upotrebu.
Dakle, prije svega, kada od mdadm-a dobijete strašnu e-poštu o neuspjehu, trebate identificirati koji je pogon pokvario. Naravno, reći će vam ime uređaja (u mom slučaju /dev/sdf), ali vjerovatno nije očigledno koji je to fizički disk jer se ta imena mogu promijeniti kada se mašina pokrene.
Ako čak niste sigurni koji naziv uređaja nije uspio, možete koristiti sljedeću naredbu da saznate (zamijenite /dev/md0 sa svojim RAID uređajem):
Kao što je spomenuto, u mom slučaju je to bio /dev/sdf, pa nastavimo s tim.
Zatim možete pokušati pronaći serijski broj neispravnog diska izdavanjem ove naredbe:
(ako smartctl nije pronađen, potrebno je da instalirate smartmontools paket na Ubuntu)
Serijski broj se zatim može uporediti sa serijskim brojevima na fizičkoj naljepnici na disk jedinicama kako bi se utvrdilo koji je pokvario.
Ovaj put, međutim, nisam bio te sreće. Disk je bio potpuno mrtav i čak je odbio dati SMART ili druge podatke, uključujući serijski broj.
Budući da sam imao fizički pristup serveru (koji vam je zaista potreban ako ćete sami zamijeniti fizički disk, pretpostavljam ;-)) i server je zapravo radio kada je disk otkazao (i nastavio da radi dobro zahvaljujući redundanciji RAID-6), koristio sam zaista primitivnu, ali zapravo vrlo efikasnu i očiglednu metodu jednostavnog kopiranja velike datoteke na server i gledanje koje HDlicker nije palio. U roku od nekoliko sekundi identifikovao sam krivca.
Sada, prije nego što izvadite fizički disk, dobra je ideja da službeno obavijestite mdadm o ovoj namjeri, izdavanjem ove naredbe (zamijenite imena uređaja svojim vlastitim prema potrebi):
U slučaju uspjeha, mdadm će odgovoriti porukom da je "vruće uklonio" disk, očigledno zato što je virtuelni raid uređaj zapravo pokrenut u to vrijeme.
Ako ne uspije s porukom o grešci sličnoj "uređaj ili resurs zauzet", može biti da mdadm zapravo nije registrirao disk da je potpuno otkazao. Da biste to učinili, izdajte ovu naredbu (opet, ne zaboravite zamijeniti nazive uređaja svojim vlastitim prema potrebi):
Nakon toga, trebali biste moći ukloniti uređaj iz niza prethodnom komandom.
Sada je vrijeme da zaista zamijenite disk. Ako ste stvarno, stvarno - kao, stvarno - sigurni da vaša mašina i kontroler podržavaju zamjenu u vrućoj fazi, to možete učiniti bez isključivanja stroja. To bi bio način da se ide na kritične proizvodne sisteme koji rade na stvarnom, odgovarajućem serverskom hardveru za koji sigurno znate da to može podnijeti. Moj kućni fajl server je baziran na desktop matičnoj ploči potrošačkog kvaliteta sa nekoliko polu-noname SATA kontrolera u PCIe slotovima da bi se obezbedilo više SATA portova.
Iako bi SATA općenito trebao podržavati hot swaping, nisam namjeravao ništa riskirati u ovoj postavci, pa sam se odlučio za gašenje mašine dok sam zamijenio disk.
Prije nego što to učinite, dobra je ideja prokomentirati raid uređaj u /etc/fstab datoteci kako Ubuntu ne bi pokušao da ga automatski montira pri sljedećem pokretanju, jer bi mogao da se zaglavi i prisili vas u način oporavka zbog degradiranog RAID niza. To možda nije veliki problem ako je u pitanju desktop sistem, ali ovaj server pokrećem bez glave bez priključenog monitora ili tastature, tako da bi ovo bilo malo gnjavaža.
Nakon što pokrenete mašinu sa instaliranim sjajnim novim diskom, koristite lsblk ili neki drugi način da ga identifikujete. Ako ništa drugo niste promijenili, vjerovatno će (ali ne nužno ) dobiti isto ime kao disk koji ste zamijenili. U mom slučaju jeste, tako da se novi takođe zove /dev/sdf.
Kako je moj niz baziran na particijama, a ne na fizičkim uređajima, morao sam da kopiram tabelu particija sa radnog diska na novi disk kako bih se uverio da su potpuno iste. Ako umjesto toga pokrenete svoj niz na fizičkim uređajima, možete preskočiti ovaj korak.
Koristio sam sgdisk za ovu svrhu, kopirajući particijsku tabelu iz /dev/sdc u /dev/sdf. Pobrinite se da zamijenite nazive uređaja tako da odgovaraju vašim vlastitim.
Obratite pažnju na redoslijed ovdje: prvo navodite "do" vožnje! Ovo je malo kontraintuitivno za mene, ali samo se pobrinite da to uradite kako treba kako ne biste dobili još jedan kvar diska u nizu ;-)
Zatim da biste izbjegli sukobe UUID-a, generirajte nove UUID-ove za novi disk:
I sada je konačno došlo vrijeme da dodate novi disk u niz i započnete zabavu za obnovu! (U redu, to nije baš zabava, to je zapravo prilično spor i uznemirujući proces jer stvarno, stvarno ne želite da još jedan pogon propadne u ovom trenutku. Pivo bi ipak moglo pomoći)
U svakom slučaju, da dodate novi disk u niz, izdajte ovu naredbu (opet, obavezno zamijenite nazive uređaja svojim vlastitim prema potrebi):
Ako sve prođe kako treba, disk će biti dodan u niz bez problema. Vjerujem da je zapravo dodat kao "hot spare" po defaultu, ali pošto ovom nizu nedostaje disk (onaj koji nije uspio), odmah se stavlja u upotrebu i proces rekonstrukcije će početi.
Možete ga pratiti na sljedeći način:
Ovo će vjerovatno potrajati; na mom skromnom serveru (zasnovanom uglavnom na hardveru potrošačke klase i desktop drajvovima, imajte na umu) bio je u mogućnosti da dostigne nešto ispod 100 MB/sec. Imajte na umu da je ovo RAID-6, tako da postoji mnogo kalkulacija pariteta uključenih u rekonstrukciju; RAID-10 bi bio mnogo brži. Ova konkretna mašina ima AMD A10 9700E četvorojezgarni CPU ("E" znači da je energetski efikasan model sa niskim taktom, tj. nije super brz), samo da vam dam ideju šta možete očekivati. Sa devet diskova od 8 TB u mojoj postavci, potpuna obnova trajala je nešto više od 24 sata.
Tokom rekonstrukcije, možete montirati sistem datoteka na niz i koristiti ga kao normalno ako želite, ali ja radije to prepustim ponovnoj izgradnji dok se ne završi. Imajte na umu da ako jedan disk pokvari, uskoro može uslijediti drugi, tako da želite da se rekonstrukcija obavi što je brže moguće jer zaista ne želite da drugi disk otkaže tokom toga. Stoga ga nemojte opterećivati drugim IO koji nije striktno neophodan.
Kada završite, dodajte ga nazad u /etc/fstab datoteku, restartujte i uživajte u svojim fajlovima :-)