Zamjena neispravnog pogona u mdadm nizu na Ubuntu
Objavljeno: 15. februar 2025. u 22:04:14 UTC
Posljednje ažurirano: 12. januar 2026. u 08:50:17 UTC
Ako se nalazite u strašnoj situaciji kvara diska u mdadm RAID nizu, ovaj članak objašnjava kako ga pravilno 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 uključenoj u njegove repozitorije; u vrijeme pisanja ovog teksta v4.1-rc1. Moguće je da važi i za druge verzije, ali i da ne.
Nedavno mi je iznenada došlo do kvara diska na mom kućnom datotečnom serveru, koji se sastoji od devet diskova u mdadm RAID-6 nizu. To je uvijek zastrašujuće, ali srećom sam uspio brzo pronaći zamjenski disk koji je isporučen već sljedećeg dana, tako da sam mogao započeti obnovu.
Moram priznati da sam bio malo previše škrt kada sam prvobitno postavljao datotečni server; samo dva diska su pravi NAS diskovi (Seagate IronWolf), dok su ostali desktop diskovi (Seagate Barracuda). Nije iznenađujuće da je to bio jedan od desktop diskova koji je otkazao (nakon skoro tri godine rada). Bio je potpuno mrtav; nakon što sam ga premjestio u USB kućište za desktop računar, sve što sam iz njega čuo bio je uznemirujući zvuk klikanja, a ni Ubuntu 20.04 ni Windows 10 nisu ga mogli detektovati.
Eh, dobro, da se prebacimo na zamjenski dio (i da, novi disk koji sam kupio bio je IronWolf, lekcija je naučena) - koliko god strašno bilo izgubiti disk u radnom nizu, još je strašnije ako ne znate ispravnu proceduru za njegovu zamjenu. Nije prvi put da sam morao zamijeniti neispravan disk u mdadm nizu, ali srećom to je toliko rijetko da obično moram tražiti odgovarajuće naredbe. Ovaj put sam odlučio da sastavim svoj mali vodič za buduće potrebe.
Dakle, prije svega, kada dobijete strašnu e-poruku o kvaru od mdadm-a, morate identificirati koji je disk otkazao. Naravno, reći će vam naziv uređaja (u mom slučaju /dev/sdf), ali vjerovatno nije očigledno koji je to fizički disk zapravo jer se ta imena mogu promijeniti kada se mašina pokrene.
Ako niste sigurni ni koji je naziv uređaja otkazao, možete koristiti sljedeću naredbu da to saznate (zamijenite /dev/md0 sa vašim RAID uređajem):
Kao što je spomenuto, u mom slučaju to je bio /dev/sdf, pa hajde da nastavimo s tim.
Zatim možete pokušati pronaći serijski broj neispravnog diska izdavanjem ove naredbe:
(ako smartctl nije pronađen, potrebno je instalirati smartmontools paket na Ubuntu)
Serijski broj se zatim može uporediti sa serijskim brojevima na fizičkoj naljepnici na diskovima kako bi se utvrdilo koji je neispravan.
Ovaj put, međutim, nisam imao toliko sreće. Disk je bio potpuno neispravan i čak je odbijao da pruži SMART ili druge podatke, uključujući serijski broj.
Pošto sam imao fizički pristup serveru (što vam je zaista potrebno ako ćete sami mijenjati fizički disk, pretpostavljam ;-)) i server je zapravo radio kada je disk otkazao (i nastavio je raditi bez problema zahvaljujući RAID-6 redundanciji), odlučio sam se za zaista primitivnu, ali zapravo vrlo efikasnu i očiglednu metodu jednostavnog kopiranja velike datoteke na server i gledanja koja lampica HDD-a ne treperi. U roku od nekoliko sekundi sam identificirao krivca.
Sada, prije nego što izvadite fizički disk, dobra je ideja formalno obavijestiti mdadm o ovoj namjeri izdavanjem ove naredbe (zamijenite imena uređaja svojima po 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 tom trenutku.
Ako ne uspije s porukom o grešci sličnoj "uređaj ili resurs zauzet", moguće je da mdadm zapravo nije registrovao disk kao potpuno neuspješan. Da biste to učinili, izdajte ovu naredbu (ponovo, ne zaboravite zamijeniti imena uređaja svojim vlastitim prema potrebi):
Nakon toga, trebali biste moći ukloniti uređaj iz niza pomoću prethodne naredbe.
Sada je vrijeme da se disk zamijeni. Ako ste zaista, zaista - kao, zaista - sigurni da vaša mašina i kontroler podržavaju zamjenu diskova tokom rada, to možete učiniti bez gašenja mašine. To bi bio pravi način za kritične produkcijske sisteme koji rade na pravom, ispravnom serverskom hardveru za koji znate da to može podnijeti. Moj kućni datotečni server je zasnovan na matičnoj ploči za desktop računare široke potrošnje s nekoliko polu-noname SATA kontrolera u PCIe slotovima kako bi se obezbijedilo više SATA portova.
Iako bi SATA generalno trebao podržavati zamjenu diska tokom rada, nisam htio ništa riskirati u ovoj konfiguraciji, pa sam se odlučio isključiti mašinu dok sam zamjenjivao disk.
Prije nego što to uradite, dobra je ideja komentirati RAID uređaj u datoteci /etc/fstab kako Ubuntu ne bi pokušao automatski da ga montira pri sljedećem pokretanju, jer bi se mogao zaglaviti i prisiliti vas da uđete u recovery mod zbog degradiranog RAID niza. To možda neće biti veliki problem ako se radi o desktop sistemu, ali ja ovaj server pokrećem bez priključenog monitora ili tastature, tako da bi ovo moglo biti malo gnjavaže.
Nakon pokretanja mašine sa instaliranim potpuno novim diskom, koristite lsblk ili neki drugi način da ga identifikujete. Ako niste ništa drugo promijenili, vjerovatno će (ali ne nužno) dobiti isto ime kao i disk koji ste zamijenili. U mom slučaju jeste, pa se novi zove i /dev/sdf.
Pošto je moj niz zasnovan na particijama, a ne na fizičkim uređajima, morao sam kopirati tabelu particija sa radnog diska na novi disk kako bih se uvjerio da su potpuno iste. Ako umjesto toga pokrećete svoj niz na fizičkim uređajima, možete preskočiti ovaj korak.
U tu svrhu sam koristio sgdisk, kopirajući tabelu particija iz /dev/sdc u /dev/sdf. Obavezno zamijenite imena uređaja kako bi odgovarala vašima.
Obratite pažnju na redoslijed ovdje: prvo navodite disk "do"! Ovo mi je malo nelogično, ali samo pazite da to uradite kako ne biste dobili još jedan kvar diska u nizu ;-)
Zatim, da biste izbjegli konflikte UUID-ova, generirajte nove UUID-ove za novi disk:
I sada je konačno došlo vrijeme da se doda novi disk u niz i započne proces obnove! (U redu, nije to baš zabava, to je zapravo prilično spor i uznemirujući proces jer zaista, zaista ne želite da vam još jedan disk otkaže u ovom trenutku. Pivo bi možda moglo pomoći)
Svakom slučaju, da biste dodali novi disk u niz, izdajte ovu naredbu (ponovo, obavezno zamijenite imena uređaja svojim vlastitim prema potrebi):
Ako sve prođe u redu, disk će biti dodan u niz bez problema. Mislim da je zapravo dodan kao "vruća rezerva" po defaultu, ali budući da ovom nizu nedostaje disk (onaj koji je otkazao), odmah se stavlja u upotrebu i proces obnove će započeti.
Možete to pratiti na sljedeći način:
Ovo će vjerovatno potrajati; na mom skromnom serveru (uglavnom zasnovanom na hardveru potrošačke klase i desktop diskovima, imajte na umu) uspio je dostići nešto manje od 100 MB/s. Imajte na umu da je ovo RAID-6, tako da je potrebno mnogo proračuna parnosti prilikom ponovne izgradnje; RAID-10 bi bio mnogo brži. Ova konkretna mašina ima AMD A10 9700E četverojezgreni 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 konfiguraciji, potpuna ponovna izgradnja je trajala nešto više od 24 sata.
Tokom ponovne izgradnje, možete montirati datotečni sistem na niz i koristiti ga kao i obično ako želite, ali ja radije ostavljam ponovnu izgradnju dok se ne završi. Imajte na umu da ako jedan disk otkaže, uskoro može uslijediti i drugi, tako da želite da se ponovna izgradnja 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 operacijama koje nisu striktno neophodne.
Kada je završeno, dodajte ga nazad u vašu /etc/fstab datoteku, ponovo pokrenite računar i uživajte u svojim datotekama :-)
