Nepavykusio disko pakeitimas mdadm masyve Ubuntu
Paskelbta: 2025 m. vasario 15 d. 22:02:25 UTC
Paskutinį kartą atnaujinta: 2026 m. sausio 12 d. 08:49:58 UTC
Jei susiduriate su baisia situacija, kai „mdadm RAID“ masyve sugenda diskas, šiame straipsnyje paaiškinama, kaip teisingai jį pakeisti „Ubuntu“ sistemoje.
Replacing a Failed Drive in an mdadm Array on Ubuntu
Šiame įraše pateikta informacija yra pagrįsta „Ubuntu 18.04“ ir „mdadm“ versija, esančia jos saugyklose; rašymo metu ji buvo v4.1-rc1. Ji gali tikti arba netikti kitoms versijoms.
Neseniai mano namų failų serveryje, kurį sudaro devyni diskai „mdadm RAID-6“ masyve, staiga sugedo diskas. Tai visada baugina, bet, laimei, man pavyko greitai rasti pakaitinį diską, kuris buvo pristatytas jau kitą dieną, todėl galėjau pradėti atstatymą.
Pripažįstu, kad iš pradžių diegdamas failų serverį buvau šiek tiek per šykštus; tik du diskai yra tikri NAS diskai („Seagate IronWolf“), o likę – stacionarių kompiuterių diskai („Seagate Barracuda“). Nenuostabu, kad tai buvo vienas iš tų stacionarių kompiuterių diskų, kuris sugedo (nors po beveik trejų metų naudojimo). Jis buvo visiškai neveikiantis; perkėlęs jį į stacionaraus kompiuterio USB korpusą, girdėjau tik nerimą keliantį spragsėjimo garsą, ir nei „Ubuntu 20.04“, nei „Windows 10“ jo neaptiko.
Na, o dabar apie keičiamą dalį (taip, naujas diskas, kurį nusipirkau, buvo „IronWolf“, pamoka išmokta) – kad ir kaip baisu prarasti diską veikiančiame masyve, dar baisiau, jei nežinai teisingos jo keitimo procedūros. Tai ne pirmas kartas, kai man tenka keisti sugedusį diską mdadm masyve, bet, laimei, tai nutinka taip retai, kad dažniausiai turiu ieškoti tinkamų komandų. Šį kartą nusprendžiau parašyti savo nedidelį vadovą ateičiai.
Taigi, visų pirma, gavę baisųjį gedimo el. laišką iš „mdadm“, turite nustatyti, kuris diskas sugedo. Žinoma, bus nurodytas įrenginio pavadinimas (mano atveju /dev/sdf), bet tikriausiai nėra akivaizdu, kuris fizinis diskas tai iš tikrųjų, nes šie pavadinimai gali pasikeisti paleidžiant kompiuterį.
Jei net nesate tikri, kuris įrenginio pavadinimas nepavyko, galite jį sužinoti naudodami šią komandą (pakeiskite /dev/md0 savo RAID įrenginio pavadinimu):
Kaip minėta, mano atveju tai buvo /dev/sdf, tad tęskime nuo to.
Tada galite pabandyti rasti sugedusio disko serijos numerį, išleisdami šią komandą:
(jei „smartctl“ nerandama, „Ubuntu“ sistemoje reikia įdiegti „smartmontools“ paketą)
Tada serijos numerį galima palyginti su serijos numeriais, esančiais ant fizinės diskų etiketės, kad išsiaiškintumėte, kuris iš jų sugedo.
Šį kartą man taip nepasisekė. Diskas buvo visiškai išsikrovęs ir netgi atsisakė pateikti SMART ar kitus duomenis, įskaitant serijos numerį.
Kadangi turėjau fizinę prieigą prie serverio (kurios tikrai reikia, jei ketinate patys keisti fizinį diską, manau ;-)) ir serveris iš tikrųjų veikė, kai diskas sugedo (ir toliau veikė gerai dėl RAID-6 perteklinio saugojimo), pasirinkau tikrai primityvų, bet iš tikrųjų labai veiksmingą ir akivaizdų metodą – tiesiog nukopijavau didelį failą į serverį ir stebėjau, kuris standžiojo disko indikatorius nemirksi. Per kelias sekundes nustatiau kaltininką.
Prieš ištraukiant fizinį diską, pravartu oficialiai informuoti „mdadm“ apie šį ketinimą, išleidžiant šią komandą (jei reikia, įrenginių pavadinimus pakeiskite savais):
Sėkmingai pašalinus diską, „mdadm“ atsakys pranešimu, kad jis „karštai pašalino“ jį, matyt, todėl, kad tuo metu veikia virtualus RAID įrenginys.
Jei nepavyksta ir pateikiamas klaidos pranešimas, panašus į „įrenginys arba išteklius užimtas“, gali būti, kad „mdadm“ neužregistravo disko kaip visiškai sugedusio. Norėdami tai padaryti, vykdykite šią komandą (vėlgi nepamirškite pakeisti įrenginių pavadinimų savais):
Po to turėtumėte galėti pašalinti įrenginį iš masyvo naudodami ankstesnę komandą.
Dabar laikas pakeisti diską. Jei esate tikrai, tikrai – tikrai – tikri, kad jūsų kompiuteris ir valdiklis palaiko karštąjį keitimą, galite tai padaryti neišjungdami kompiuterio. Taip reikėtų elgtis su kritinėmis gamybinėmis sistemomis, veikiančiomis ant tikros, tinkamos serverio įrangos, kuri, kaip tikrai žinote, gali tai atlikti. Mano namų failų serveris pagrįstas vartotojams skirtos stalinių kompiuterių pagrindinės plokštės su pora pusiau nežinomų SATA valdiklių PCIe lizduose, kad būtų daugiau SATA prievadų.
Nors SATA paprastai turėtų palaikyti karštąjį keitimą, šioje konfigūracijoje nesiruošiau rizikuoti, todėl nusprendžiau išjungti kompiuterį, keisdamas diską.
Prieš tai darant, pravartu iškomentuoti RAID įrenginį faile /etc/fstab, kad Ubuntu nebandytų jo automatiškai prijungti kito paleidimo metu, nes dėl sugedusio RAID masyvo sistema gali užstrigti ir būti priverstas įjungti atkūrimo režimą. Tai gali būti ne didelė problema, jei tai darbalaukio sistema, bet aš šį serverį paleidžiu be galvų, be prijungto monitoriaus ar klaviatūros, todėl tai būtų šiek tiek vargo.
Paleidus kompiuterį su įdiegtu nauju disku, naudokite komandą „lsblk“ arba kitas priemones jam identifikuoti. Jei nieko daugiau nepakeitėte, jis tikriausiai (bet nebūtinai) gaus tą patį pavadinimą kaip ir pakeistas diskas. Mano atveju taip ir buvo, todėl naujasis diskas taip pat vadinamas /dev/sdf.
Kadangi mano masyvas pagrįstas skaidiniais, o ne fiziniais įrenginiais, turėjau nukopijuoti skaidinių lentelę iš veikiančio disko į naują diską, kad įsitikinčiau, jog jie visiškai sutampa. Jei masyvą paleisite fiziniuose įrenginiuose, šį veiksmą galite praleisti.
Šiam tikslui panaudojau komandą „sgdisk“, nukopijuodamas skaidinių lentelę iš /dev/sdc į /dev/sdf. Nepamirškite pakeisti įrenginių pavadinimų, kad jie atitiktų jūsų.
Atkreipkite dėmesį į tvarką: pirmiausia išvardijamas diskas „į“! Man tai šiek tiek nelogiška, bet tiesiog įsitikinkite, kad viską padarėte teisingai, kad masyve nekiltų dar vieno disko gedimo ;-)
Tada, norėdami išvengti UUID konfliktų, sugeneruokite naujus UUID naujam diskui:
Ir pagaliau atėjo laikas pridėti naują diską prie masyvo ir pradėti atstatymo vakarėlį! (Gerai, tai ne visai vakarėlis, tai iš tikrųjų gana lėtas ir varginantis procesas, nes tikrai nenorite, kad šiuo metu sugestų dar vienas diskas. Tačiau alus galbūt padėtų.)
Bet kuriuo atveju, norėdami pridėti naują diską prie masyvo, vykdykite šią komandą (vėlgi, būtinai pakeiskite įrenginių pavadinimus savais):
Jei viskas klostysis gerai, diskas bus pridėtas prie masyvo be jokių trikdžių. Manau, kad pagal numatytuosius nustatymus jis pridedamas kaip „karštas atsarginis diskas“, bet kadangi šiame masyve trūksta disko (to, kuris sugedo), jis iš karto pradedamas naudoti ir prasidės atkūrimo procesas.
Galite tai stebėti taip:
Tai tikriausiai užtruks; mano kukliame serveryje (daugiausia paremtame vartotojų klasės įranga ir stacionarių kompiuterių diskais) jis galėjo pasiekti kiek mažiau nei 100 MB/sek. Turėkite omenyje, kad tai RAID-6, todėl perkūrus reikia atlikti daug pariteto skaičiavimų; RAID-10 būtų buvęs daug greitesnis. Šis konkretus kompiuteris turi AMD A10 9700E keturių branduolių procesorių („E“ reiškia, kad tai per mažai taktuotas energiją taupantis modelis, t. y. ne itin greitas), kad susidarytumėte vaizdą, ko tikėtis. Su devyniais 8 TB diskais mano sistemoje, visiškas perkūrimas užtruko kiek daugiau nei 24 valandas.
Atkūrimo metu galite prijungti failų sistemą prie masyvo ir naudoti ją kaip įprasta, jei norite, bet aš verčiau palikti tai atkūrimo komandai, kol jis bus baigtas. Turėkite omenyje, kad jei vienas diskas sugenda, netrukus gali sugesti kitas, todėl norite, kad atkūrimas būtų atliktas kuo greičiau, nes tikrai nenorite, kad tuo metu sugestų kitas diskas. Todėl neapkraukite jo kita nebūtina įvestimi.
Kai tai bus baigta, pridėkite jį atgal į savo /etc/fstab failą, paleiskite sistemą iš naujo ir mėgaukitės savo failais :-)
