Zamena neuspelog diska u mdadm nizu na Ubuntu
Objavio: 19. mart 2025. 21:34:01 UTC
Poslednje izmene: 19. mart 2025. 22:06:16 UTC
Ako ste u zastrašujućoj situaciji da imate kvar na disku u mdadm RAID nizu, ovaj članak objašnjava kako da ga pravilno zamenite na Ubuntu sistemu.
Replacing a Failed Drive in an mdadm Array on Ubuntu
Informacije u ovom postu zasnovane su na Ubuntu 18.04 i verziji mdadm koja je uključena u njegove repozitorijume; u vreme pisanja to je bila v4.1-rc1. Može biti da je validno ili nije za druge verzije.
Skoro sam imao iznenadni kvar diska na svom kućnom fajl serveru, koji se sastoji od devet diskova u mdadm RAID-6 konfiguraciji. To je uvek zastrašujuće, ali srećom sam uspeo brzo da nabavim zamenski disk koji je već sledećeg dana bio dostavljen, pa sam mogao da započnem obnovu.
Priznajem da sam bio malo previše štedljiv 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 jedan od desktop diskova otkazao (nakon skoro tri godine rada, doduše). Potpuno je otkazao; nakon što sam ga prebacio u desktop USB kućište, sve što sam dobio od njega bila je neprijatna zvučna kucanje i ni Ubuntu 20.04 ni Windows 10 nisu uspeli da ga detektuju.
Pa dobro, pređimo na zamenski deo (i da, novi disk koji sam kupio bio je IronWolf, lekcija naučena) - koliko god zastrašujuće bilo gubiti disk u aktivnoj konfiguraciji, još je zastrašujuće ako ne znaš ispravan postupak za njegovu zamenu. Nije prvi put da moram da zamenim neispravan disk u mdadm konfiguraciji, ali srećom to je toliko retko da obično moram da potražim odgovarajuće komande. Ovog puta sam odlučio da napišem svoj mali vodič za buduću referencu.
Prvo i najvažnije, kada dobijete zastrašujući e-mail o grešci od mdadm, morate da identifikujete koji je disk otkazao. Naravno, reći će vam ime uređaja (u mom slučaju /dev/sdf), ali verovatno nije očigledno koji fizički disk to zapravo jeste, jer se ta imena mogu promeniti kada se računar podigne.
Ako niste sigurni koji uređaj je otkazao, možete koristiti sledeću komandu da saznate (zamenite /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 sa tim.
Zatim, možete pokušati da pronađete serijski broj otkazalog diska pomoću ove komande:
(ako smartctl nije pronađen, potrebno je da instalirate paket smartmontools na Ubuntu)
Serijski broj se zatim može uporediti sa serijskim brojevima na fizičkoj etiketi na diskovima kako bi se utvrdilo koji je otkazao.
Ovog puta nisam imao toliko sreće. Disk je bio potpuno mrtav i čak je odbio da pruži SMART ili druge podatke, uključujući serijski broj.
Pošto sam imao fizički pristup serveru (što vam zaista treba ako ćete sami zameniti fizički disk, pretpostavljam ;-)) i server je zapravo radio kada je disk otkazao (i nastavio da radi bez problema zahvaljujući RAID-6 redundantnosti), odlučio sam da koristim zaista primitivnu, ali zapravo vrlo efikasnu i očiglednu metodu - jednostavno sam kopirao veliki fajl na server i posmatrao koji HDD indikator nije trepnuo. Za nekoliko sekundi sam identifikovao krivca.
Sada, pre nego što izvadite fizički disk, dobra je ideja formalno obavestiti mdadm o ovoj nameri, izdajući ovu komandu (zamenite nazive uređaja sa svojim odgovarajućim):
U slučaju uspeha, mdadm će odgovoriti porukom koja kaže da je "vruće uklonio" disk, očigledno zato što je virtuelni RAID uređaj zapravo u toku rada u tom trenutku.
Ako ne uspe sa porukom o grešci sličnom "uređaj ili resurs je zauzet", možda mdadm nije registrovao da je disk potpuno otkazao. Da biste to postigli, izdajte ovu komandu (ponovo, ne zaboravite da zamenite nazive uređaja sa svojim odgovarajućim):
Nakon toga, trebalo bi da budete u mogućnosti da uklonite uređaj iz niza sa prethodnom komandom.
Sada je vreme da zapravo zamenite disk. Ako ste zaista, zaista - kao, stvarno - sigurni da vaš računar i kontroler podržavaju hot swapping, mogli biste ovo da uradite bez gašenja računara. To bi bio način rada na kritičnim produkcijskim sistemima koji rade na pravom, ozbiljnom server hardveru za koji znate da sigurno može da izdrži. Moj kućni fajl server je zasnovan na desktop matičnoj ploči potrošačkog kvaliteta sa nekoliko semi-namenjenih SATA kontrolera u PCIe slotovima kako bi obezbedio više SATA portova, međutim.
Iako SATA generalno trebalo bi da podržava hot swapping, nisam želeo da rizikujem bilo šta u ovoj konfiguraciji, pa sam odlučio da isključim računar dok zamenjujem disk.
Pre nego što to uradite, dobra ideja je da komentarišete RAID uređaj u /etc/fstab fajlu, kako Ubuntu ne bi pokušao da ga montira automatski prilikom sledećeg pokretanja, jer bi mogao da se zablokira i natera vas u režim oporavka zbog degradiranog RAID niza. To možda nije veliki problem ako je u pitanju desktop sistem, ali ja koristim ovaj server bez monitora i tastature, pa bi ovo moglo da bude pomalo naporno.
Posle pokretanja mašine sa novim hard diskom, koristite lsblk ili neki drugi način da ga identifikujete. Ako niste promenili ništa drugo, on će verovatno (ali ne nužno) dobiti isto ime kao i disk koji ste zamenili. U mom slučaju to je bilo tako, pa se novi disk takođe zove /dev/sdf.
Pošto je moj niz zasnovan na particijama, a ne fizičkim uređajima, morao sam da kopiram tabelu particija sa radnog diska na novi disk kako bih bio siguran da su potpuno identični. Ako koristite fizičke uređaje, možete preskočiti ovaj korak.
Za ovo sam koristio sgdisk, kopirajući tabelu particija sa /dev/sdc na /dev/sdf. Obavezno zamenite imena uređaja sa vašim, kako je to odgovarajuće.
Napomena na redosled: prvo navedite uređaj na koji prebacujete podatke ! Ovo mi je pomalo kontraintuitivno, ali samo se potrudite da uradite to ispravno kako ne biste doživeli još jedan kvar diska u nizu ;-)
Zatim, kako biste izbegli UUID konflikte, generišite nove UUID-ove za novi disk:
I sada je konačno došlo vreme da dodate novi disk u niz i započnete proces rekonstrukcije! (U redu, to nije baš zabava, zapravo je to prilično spor i nervozan proces, jer zaista, zaista ne želite da se još jedan disk pokvari u ovom trenutku. Ipak, pivo može pomoći)
U svakom slučaju, da biste dodali novi disk u niz, izdajete ovu komandu (ponovo, obavezno zamenite imena uređaja sa vašim, kako je to odgovarajuće):
Ako sve prođe u redu, disk će biti dodat u niz bez problema. Verujem da je on zapravo dodat kao "vrući rezervni" po default-u, ali pošto ovom nizu nedostaje disk (onaj koji je otkazao), odmah će biti stavljen u upotrebu i proces rekonstrukcije će početi.
Možete da pratite napredak kao tako:
Verovatno će ovo potrajati neko vreme; na mom skromnom serveru (koji je uglavnom zasnovan na potrošačkom hardveru i desktop hard diskovima, da napomenem) postigao je brzinu od nešto manje od 100 MB/s. Imajte na umu da je ovo RAID-6, tako da je mnogo paritetnih proračuna uključeno u proces rekonstrukcije; RAID-10 bi bio mnogo brži. Ova mašina ima AMD A10 9700E četvorojezgarni CPU (slovo "E" označava da je to energetski efikasan model sa smanjenim taktom, tj. nije super brz), samo da biste imali predstavu o tome šta možete da očekujete. Sa devet 8 TB diskova u mom sistemu, cela rekonstrukcija je trajala nešto više od 24 časa.
Tokom rekonstrukcije, možete montirati fajl sistem na nizu i koristiti ga kao obično ako želite, ali ja više volim da ostavim rekonstrukciju da završi pre nego što ga koristim. Imajte na umu da ako jedan disk otkaže, drugi može uskoro da otkaže, pa želite da rekonstrukcija bude završena što je brže moguće, jer zaista ne želite da još jedan disk otkaže tokom toga. Zbog toga, nemojte opterećivati sistem sa drugim I/O zadacima koji nisu strogo neophodni.
Kada se završi, dodajte ga ponovo u svoj /etc/fstab fajl, reboot-ujte mašinu i uživajte u svojim fajlovima :-)