Miklix

Zamjena pokvarenog pogona u mdadm polju na Ubuntuu

Objavljeno: 15. veljače 2025. u 22:05:33 UTC

Ako ste u strašnoj situaciji kvara diska u mdadm RAID polju, ovaj članak objašnjava kako ga ispravno zamijeniti na Ubuntu sustavu.


Ova je stranica strojno prevedena s engleskog kako bi bila dostupna što većem broju ljudi. Nažalost, strojno prevođenje još nije usavršena tehnologija pa se mogu pojaviti pogreške. Ako želite, izvornu englesku verziju možete pogledati ovdje:

Replacing a Failed Drive in an mdadm Array on Ubuntu

Informacije u ovom postu temelje se na Ubuntu 18.04 i verziji mdadm-a uključenoj u njegova spremišta; u vrijeme pisanja v4.1-rc1. Može, ali i ne mora vrijediti za druge verzije.

Nedavno sam imao iznenadni kvar na svom kućnom datotečnom poslužitelju koji se sastoji od devet pogona u mdadm RAID-6 polju. To je uvijek zastrašujuće, ali srećom sam uspio brzo nabaviti zamjenski disk koji je isporučen već sljedeći dan kako bih mogao započeti obnovu.

Doduše, bio sam previše jeftin kada sam prvotno postavio poslužitelj datoteka; samo dva pogona su pravi NAS pogoni (Seagate IronWolf), dok su ostali pogoni za stolna računala (Seagate Barracuda). Nije iznenađujuće da je to bio jedan od pogona za stolna računala koji je odustao (doduše, nakon gotovo tri godine rada). Bilo je potpuno mrtvo; nakon što sam ga premjestio na stolno USB kućište, sve što sam izvukao bio je uznemirujući zvuk škljocanja, a ni Ubuntu 20.04 ni Windows 10 nisu ga mogli otkriti.

Dobro, prijeđimo na zamjenski dio (i da, novi pogon koji sam kupio bio je IronWolf, naučena lekcija) - koliko god je strašno izgubiti pogon u radnom polju, još je strašnije ako ne znate ispravan postupak za njegovu zamjenu. Nije prvi put da moram zamijeniti pokvareni disk u mdadm nizu, ali srećom to je tako rijetko da obično moram potražiti ispravne naredbe. Ovaj put sam odlučio napraviti svoj mali vodič za buduću upotrebu.

Dakle, prije svega, kada od mdadm-a dobijete e-poruku o strašnom događaju kvara, trebate identificirati koji je disk pokvaren. Naravno, reći će vam naziv uređaja (u mom slučaju /dev/sdf), ali vjerojatno nije očito koji je to zapravo fizički disk jer se ta imena mogu promijeniti kada se stroj pokrene.

Ako čak niste sigurni koji naziv uređaja nije uspio, možete upotrijebiti sljedeću naredbu da to saznate (zamijenite /dev/md0 svojim RAID uređajem):

mdadm -–query -–detail /dev/md0

Kao što je spomenuto, u mom slučaju to je bio /dev/sdf, pa nastavimo s tim.

Zatim možete pokušati pronaći serijski broj pokvarenog pogona izdavanjem ove naredbe:

smartctl -–all /dev/sdf | grep -i 'Serial'

(ako smartctl nije pronađen, trebate instalirati paket smartmontools na Ubuntu)

Serijski broj se tada može usporediti sa serijskim brojevima na fizičkoj naljepnici na pogonima kako bi se otkrilo koji je pokvaren.

Ovaj put, doduše, nisam imao sreće. Pogon je bio potpuno mrtav i čak je odbijao dati SMART ili druge podatke, uključujući serijski broj.

Budući da sam imao fizički pristup poslužitelju (što vam stvarno treba ako sami namjeravate zamijeniti fizički pogon, pretpostavljam ;-)) i poslužitelj je zapravo bio pokrenut kad je disk pokvario (i nastavio je dobro raditi zahvaljujući redundanciji RAID-6), odlučio sam se za stvarno primitivnu, ali zapravo vrlo učinkovitu i očitu metodu jednostavnog kopiranja velike datoteke na poslužitelj i gledanja koje svjetlo HDD-a ne treperi. U roku od nekoliko sekundi identificirao sam krivca.

Sada, prije izvlačenja fizičkog pogona, dobra je ideja službeno obavijestiti mdadm o ovoj namjeri, izdavanjem ove naredbe (zamijenite nazive uređaja svojima prema potrebi):

mdadm -–manage /dev/md0 -–remove /dev/sdf1

Nakon uspjeha, mdadm će odgovoriti porukom da je "vruće uklonio" pogon, očito zato što je virtualni raid uređaj zapravo pokrenut u to vrijeme.

Ako ne uspije s porukom o pogrešci sličnoj "uređaj ili resurs zauzeti", može biti da mdadm zapravo nije registrirao pogon kao potpuni kvar. Da biste to učinili, izdajte ovu naredbu (ponovno, ne zaboravite zamijeniti nazive uređaja svojima prema potrebi):

mdadm --manage /dev/md0 --fail /dev/sdf

Nakon toga, trebali biste moći ukloniti uređaj iz niza s prethodnom naredbom.

Sada je vrijeme da zapravo zamijenite pogon. Ako ste stvarno, stvarno - kao, stvarno - sigurni da vaš stroj i kontroler podržavaju vruću zamjenu, mogli biste to učiniti bez gašenja stroja. To bi bio način da idete na kritične proizvodne sustave koji rade na stvarnom, ispravnom hardveru poslužitelja za koji pouzdano znate da to može podnijeti. Moj kućni datotečni poslužitelj temelji se na matičnoj ploči za stolna računala široke potrošnje s nekoliko polu-noname SATA kontrolera u PCIe utorima za pružanje više SATA priključaka.

Iako bi SATA općenito trebao podržavati vruću zamjenu, nisam namjeravao ništa riskirati u ovom postavljanju, pa sam odlučio isključiti stroj dok mijenjam pogon.

Prije nego što to učinite, dobra je ideja komentirati raid uređaj u /etc/fstab datoteci kako ga Ubuntu ne bi pokušao automatski montirati prilikom sljedećeg pokretanja, jer bi mogao zastati i prisiliti vas na način oporavka zbog degradiranog RAID polja. To možda i nije veliki problem ako se radi o stolnom sustavu, ali ovaj poslužitelj pokrećem bezglavo bez priključenog monitora ili tipkovnice, pa bi ovo predstavljalo malu gnjavažu.

Nakon pokretanja stroja s instaliranim sjajnim novim pogonom, upotrijebite lsblk ili neki drugi način da ga identificirate. Ako niste promijenili ništa drugo, vjerojatno će (ali ne nužno ) dobiti isto ime kao pogon koji ste zamijenili. U mom slučaju jest, tako da se novi također zove /dev/sdf.

Budući da se moj niz temelji na particijama, a ne na fizičkim uređajima, morao sam kopirati tablicu particija s radnog pogona na novi pogon kako bih bio siguran da su potpuno isti. Ako umjesto toga svoj niz izvodite na fizičkim uređajima, možete preskočiti ovaj korak.

Koristio sam sgdisk za ovu svrhu, kopirajući particijsku tablicu iz /dev/sdc u /dev/sdf. Obavezno zamijenite nazive uređaja kako bi odgovarali vašima prema potrebi.

Primijetite redoslijed ovdje: prvi navodite pogon "do"! Ovo mi je pomalo kontraintuitivno, ali samo pazite da dobro shvatite kako ne biste dobili još jedan kvar pogona u nizu ;-)

sgdisk -R /dev/sdf /dev/sdc

Zatim da biste izbjegli sukobe UUID-ova, generirajte nove UUID-ove za novi pogon:

sgdisk -G /dev/sdf

I sada je konačno došlo vrijeme da se doda novi pogon nizu i započne zabava obnove! (U redu, to zapravo nije zabava, to je zapravo prilično spor i neugodan proces jer stvarno, stvarno ne želite da još jedna vožnja ne uspije u ovom trenutku. Pivo bi ipak moglo pomoći)

U svakom slučaju, da biste dodali novi pogon u niz, izdajte ovu naredbu (ponovno, svakako zamijenite nazive uređaja svojima prema potrebi):

mdadm -–manage /dev/md0 -–add /dev/sdf1

Ako sve bude u redu, pogon će biti dodan u polje bez zastoja. Vjerujem da je zapravo dodan kao "hot spare" prema zadanim postavkama, ali budući da ovom nizu nedostaje disk (onaj koji je pokvaren), odmah se stavlja u upotrebu i započet će proces obnove.

Možete ga pratiti ovako:

watch cat /proc/mdstat

Ovo će vjerojatno potrajati; na mom skromnom poslužitelju (zasnovanom uglavnom na hardveru potrošačke kvalitete i pogonima stolnih računala, pazite na to) uspio je doseći nešto ispod 100 MB/s. Imajte na umu da je ovo RAID-6, tako da postoji mnogo paritetnih izračuna uključenih u ponovnu izgradnju; RAID-10 bi bio puno brži. Ovaj određeni stroj ima AMD A10 9700E četverojezgreni CPU ("E" znači da je to energetski učinkovit model s niskim taktom, tj. nije super brz), samo da vam da ideju što možete očekivati. S devet diskova od 8 TB u mom postavu, potpuna ponovna izgradnja trajala je nešto više od 24 sata.

Tijekom ponovne izgradnje, možete montirati datotečni sustav na polje i koristiti ga kao i obično ako želite, ali ja radije to prepuštam ponovnoj izgradnji dok ne završi. Imajte na umu da ako jedan disk zakaže, drugi bi mogao uskoro uslijediti, tako da želite da se ponovna izgradnja obavi što je brže moguće jer stvarno ne želite da drugi pogon zakaže tijekom toga. Stoga ga nemojte opterećivati ​​drugim IO-ima koji nisu nužno potrebni.

Kada završi, dodajte ga natrag u svoju datoteku /etc/fstab, ponovno pokrenite sustav i uživajte u datotekama :-)

Podijeli na BlueskyPodijelite na FacebookuPodijelite na LinkedInuPodijelite na TumblrPodijeli na XPodijelite na LinkedInuPrikvači na Pinterest

Mikkel Bang Christensen

O autoru

Mikkel Bang Christensen
Mikkel je kreator i vlasnik miklix.com. Ima više od 20 godina iskustva kao profesionalni računalni programer/razvijač softvera i trenutno je zaposlen na puno radno vrijeme za veliku europsku IT korporaciju. Kada ne piše blog, svoje slobodno vrijeme provodi na široku lepezu interesa, hobija i aktivnosti, što se u određenoj mjeri može odraziti na različite teme obrađene na ovoj web stranici.