Miklix

Zamjena pokvarenog pogona u mdadm polju na Ubuntuu

Objavljeno: 15. veljače 2025. u 22:05:33 UTC
Zadnje ažuriranje: 12. siječnja 2026. u 08:50:18 UTC

Ako se nalazite 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 Ubuntuu 18.04 i verziji mdadm-a uključenoj u njegove repozitorije; u vrijeme pisanja ovog teksta v4.1-rc1. Mogu, ali i ne moraju biti valjane za druge verzije.

Nedavno mi je iznenada došlo do kvara diska na mom kućnom datotečnom poslužitelju, 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ći dan, tako da sam mogao započeti obnovu.

Moram priznati da sam bio malo previše škrt kada sam izvorno postavljao datotečni poslužitelj; samo dva diska su pravi NAS diskovi (Seagate IronWolf), dok su ostali stolni diskovi (Seagate Barracuda). Nije iznenađujuće da je to bio jedan od stolnih diskova koji je otkazao (nakon gotovo tri godine rada). Bio je potpuno mrtav; nakon što sam ga premjestio u USB kućište za stolno računalo, sve što sam iz njega dobio bio je uznemirujući zvuk klikanja, a ni Ubuntu 20.04 ni Windows 10 nisu ga mogli otkriti.

E, dobro, idemo na zamjenski dio (i da, novi disk koji sam kupio bio je IronWolf, lekcija naučena) - koliko god je strašno izgubiti disk u radnom nizu, još je strašnije ako ne znate ispravan postupak 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 napisati vlastiti mali vodič za buduću upotrebu.

Dakle, prije svega, kada primite e-poruku o strašnom kvaru od mdadm-a, morate identificirati koji je disk neispravan. 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 računalo pokrene.

Ako niste sigurni ni koji je naziv uređaja propao, možete to saznati sljedećom naredbom (zamijenite /dev/md0 s vašim 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 neispravnog pogona izdavanjem ove naredbe:

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

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

Serijski broj se zatim može usporediti sa serijskim brojevima na fizičkoj naljepnici na diskovima kako bi se utvrdilo koji je neispravan.

Ovaj put nisam imao toliko sreće. Disk je bio potpuno neispravan 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 ćete sami zamijeniti fizički disk, pretpostavljam ;-)) i poslužitelj je zapravo radio kada je disk otkazao (i nastavio je raditi dobro zahvaljujući RAID-6 redundanciji), odlučio sam se za doista primitivnu, ali zapravo vrlo učinkovitu i očitu metodu jednostavnog kopiranja velike datoteke na poslužitelj i gledanja koja lampica tvrdog diska ne treperi. U roku od nekoliko sekundi identificirao sam krivca.

Sada, prije nego što izvadite fizički disk, dobra je ideja formalno obavijestiti mdadm o toj namjeri izdavanjem ove naredbe (zamijenite imena uređaja svojima prema potrebi):

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

U slučaju uspjeha, mdadm će odgovoriti porukom da je "vruće uklonio" disk, očito zato što virtualni RAID uređaj zapravo radi u tom trenutku.

Ako ne uspije s porukom o pogrešci sličnoj "uređaj ili resurs zauzet", moguće je da mdadm zapravo nije registrirao pogon kao potpuno neuspješan. Da biste to učinili, izdajte ovu naredbu (ponovno, ne zaboravite zamijeniti imena uređaja vlastitima prema potrebi):

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

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

Sada je vrijeme za zamjenu pogona. Ako ste stvarno, stvarno - kao, stvarno - sigurni da vaše računalo i kontroler podržavaju vruću zamjenu, to možete učiniti bez gašenja računala. To bi bio način na koji se to radi na kritičnim produkcijskim sustavima koji rade na pravom, ispravnom serverskom hardveru za koji znate da to može podnijeti. Moj kućni datotečni poslužitelj temelji se na matičnoj ploči za stolna računala potrošačke klase s nekoliko polu-noname SATA kontrolera u PCIe utorima kako bi se osiguralo više SATA priključaka.

Iako bi SATA općenito trebao podržavati vruću zamjenu, nisam htio riskirati ništa u ovoj postavci, pa sam se odlučio isključiti računalo dok sam zamjenjivao disk.

Prije toga, dobra je ideja komentirati RAID uređaj u datoteci /etc/fstab kako Ubuntu ne bi pokušao automatski montirati uređaj pri sljedećem pokretanju, jer bi se mogao zamrznuti i prisiliti vas da uđete u način rada za oporavak zbog degradiranog RAID polja. To možda neće biti veliki problem ako se radi o stolnom sustavu, ali ja ovaj poslužitelj pokrećem bez priključenog monitora ili tipkovnice, pa bi to bilo malo gnjavaže.

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

Budući da je moj niz baziran na particijama, a ne na fizičkim uređajima, morao sam kopirati tablicu particija s radnog diska na novi disk kako bih bio siguran 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 tablicu particija iz /dev/sdc u /dev/sdf. Obavezno zamijenite nazive uređaja kako bi odgovarali vašima.

Primijetite redoslijed ovdje: prvo navodite pogon "do"! Ovo mi je malo nelogično, ali samo pazite da to učinite kako ne biste dobili još jedan kvar pogona u nizu ;-)

sgdisk -R /dev/sdf /dev/sdc

Zatim, kako 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 disk u niz i započne zabava s obnovom! (U redu, nije to baš zabava, zapravo je prilično spor i uznemirujući proces jer stvarno, stvarno 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 polje, izdajte ovu naredbu (opet, obavezno zamijenite imena uređaja svojima prema potrebi):

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

Ako sve prođe u redu, disk će biti dodan u niz bez problema. Mislim da je zapravo dodan kao "vruća rezerva" prema zadanim postavkama, ali budući da ovom nizu nedostaje disk (onaj koji je otkazao), odmah se stavlja u upotrebu i započet će proces obnove.

Možete to pratiti ovako:

watch cat /proc/mdstat

Ovo će vjerojatno potrajati; na mom skromnom serveru (uglavnom baziranom na hardveru potrošačke klase i desktop diskovima, imajte na umu) uspio je dosegnuti nešto manje od 100 MB/s. Imajte na umu da je ovo RAID-6, tako da je potrebno puno izračuna pariteta za obnovu; RAID-10 bi bio puno brži. Ovaj konkretni stroj ima četverojezgreni AMD A10 9700E CPU ("E" znači da je energetski učinkovit model s niskim taktom, tj. nije super brz), samo da vam dam ideju što možete očekivati. S devet diskova od 8 TB u mojoj konfiguraciji, potpuna obnova 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 prepuštam ponovnu izgradnju dok se ne završi. Imajte na umu da ako jedan disk zakaže, uskoro bi mogao uslijediti i drugi, stoga želite da se ponovna izgradnja obavi što je brže moguće jer stvarno ne želite da drugi disk zakaže tijekom toga. Stoga ga nemojte opterećivati drugim IO-ima koji nisu strogo potrebni.

Nakon što je gotovo, dodajte ga natrag u svoju /etc/fstab datoteku, ponovno pokrenite računalo i uživajte u svojim datotekama :-)

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

Mikkel Christensen

O autoru

Mikkel 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.