Замена неисправног диска у мдадм низу на Убунту-у
Објављено: 15. фебруар 2025. 22:09:08 UTC
Последње ажурирано: 12. јануар 2026. 08:50:21 UTC
Ако се налазите у страшној ситуацији квара диска у mdadm RAID низу, овај чланак објашњава како га правилно заменити на Ubuntu систему.
Replacing a Failed Drive in an mdadm Array on Ubuntu
Информације у овом посту су базиране на Ubuntu 18.04 и верзији mdadm-а која је укључена у његове репозиторијуме; у време писања овог текста v4.1-rc1. Можда важи, али и не важи за друге верзије.
Недавно ми се изненада десио квар диска на кућном фајл серверу, који се састоји од девет дискова у mdadm RAID-6 низу. То је увек застрашујуће, али срећом сам успео брзо да нађем резервни диск који је испоручен већ следећег дана, тако да сам могао да започнем реконструкцију.
Морам признати да сам био мало превише шкрт када сам првобитно подешавао фајл сервер; само два диска су прави NAS дискови (Seagate IronWolf), док су остали десктоп дискови (Seagate Barracuda). Није изненађујуће да је то био један од десктоп дискова који је отказао (ипак, након скоро три године употребе). Био је потпуно мртав; након што сам га преместио у десктоп USB кућиште, све што сам из њега извукао био је узнемирујући звук кликтања и ни Ubuntu 20.04 ни Windows 10 нису могли да га детектују.
Па добро, да пређемо на резервни део (и да, нови диск који сам купио је био IronWolf, лекција је научена) - колико год је страшно изгубити диск у радном низу, још је страшније ако не знате исправну процедуру за његову замену. Није први пут да сам морао да заменим неисправни диск у mdadm низу, али срећом то је толико ретко да обично морам да тражим одговарајуће команде. Овог пута сам одлучио да направим свој мали водич за будуће потребе.
Дакле, пре свега, када добијете страшну имејл поруку о квара од mdadm-а, потребно је да идентификујете који је диск отказао. Наравно, рећи ће вам име уређаја (у мом случају /dev/sdf), али вероватно није очигледно који је то физички диск, јер се та имена могу променити када се машина покрене.
Ако нисте сигурни ни који назив уређаја није успео, можете користити следећу команду да бисте то сазнали (замените /dev/md0 са вашим RAID уређајем):
Као што је већ поменуто, у мом случају то је био /dev/sdf, па хајде да наставимо са тим.
Затим, можете покушати да пронађете серијски број неисправног диска издавањем ове команде:
(ако smartctl није пронађен, потребно је да инсталирате smartmontools пакет на Ubuntu)
Серијски број се затим може упоредити са серијским бројевима на физичкој етикети на дисковима како би се утврдило који је отказао.
Овог пута, међутим, нисам имао те среће. Диск је био потпуно мртав и чак је одбијао да пружи SMART или друге податке, укључујући серијски број.
Пошто сам имао физички приступ серверу (што вам је заиста потребно ако ћете сами заменити физички диск, претпостављам ;-)) и сервер је заправо радио када је диск отказао (и наставио је да ради без проблема захваљујући RAID-6 редундантности), одлучио сам се за заиста примитивну, али заправо веома ефикасну и очигледну методу једноставног копирања велике датотеке на сервер и гледања која лампица HDD-а не трепери. У року од неколико секунди сам идентификовао кривца.
Сада, пре него што извадите физички диск, добра је идеја да формално обавестите mdadm о овој намери, издавањем ове команде (замените имена уређаја својима по потреби):
У случају успеха, mdadm ће одговорити поруком да је „вруће уклонио“ диск, очигледно зато што је виртуелни RAID уређај заправо покренут у том тренутку.
Ако не успе са поруком о грешци сличном „уређај или ресурс заузет“, могуће је да mdadm заправо није регистровао да је диск потпуно отказао. Да бисте то урадили, издајте ову команду (поново, не заборавите да замените имена уређаја својима по потреби):
Након тога, требало би да будете у могућности да уклоните уређај из низа помоћу претходне команде.
Сада је време да заправо замените диск. Ако сте заиста, заиста - као, заиста - сигурни да ваша машина и контролер подржавају брзу замену, можете то урадити без искључивања машине. То би био прави начин за критичне производне системе који раде на правом, исправном серверском хардверу за који поуздано знате да може да га поднесе. Мој кућни фајл сервер је базиран на матичној плочи за десктоп рачунаре широке потрошње са неколико полу-номиналних SATA контролера у PCIe слотовима како би се обезбедило више SATA портова.
Иако би SATA генерално требало да подржава брзу замену диска, нисам хтео ништа да ризикујем у овој поставци, па сам се одлучио да искључим машину док мењам диск.
Пре него што то урадите, добра је идеја да коментаришете RAID уређај у датотеци /etc/fstab како Ubuntu не би покушао да га аутоматски монтира при следећем покретању, јер би се могао заглавити и присилити вас да уђете у режим опоравка због деградираног RAID низа. То можда неће бити велики проблем ако је у питању десктоп систем, али ја покрећем овај сервер без прикљученог монитора или тастатуре, тако да би ово било мало муке.
Након покретања машине са инсталираним новим диском, користите команду lsblk или неки други начин да га идентификујете. Ако нисте ништа друго променили, вероватно ће (али не нужно) добити исто име као и диск који сте заменили. У мом случају јесте, па се нови зове и /dev/sdf.
Пошто је мој низ базиран на партицијама, а не на физичким уређајима, морао сам да копирам табелу партиција са радног диска на нови диск како бих се уверио да су потпуно исте. Ако уместо тога покрећете низ на физичким уређајима, можете прескочити овај корак.
Користио сам sgdisk за ову сврху, копирајући табелу партиција из /dev/sdc у /dev/sdf. Обавезно замените имена уређаја тако да одговарају вашим.
Обратите пажњу на редослед овде: прво наводите диск „до“! Ово је мало контраинтуитивно за мене, али само се побрините да то урадите како не бисте добили још један квар диска у низу ;-)
Затим, да бисте избегли сукобе UUID-ова, генеришите нове UUID-ове за нови диск:
И сада је коначно дошло време да се дода нови диск у низ и започне журка поновне изградње! (У реду, није баш журка, већ је прилично спор и узнемирујући процес јер заиста, заиста не желите да вам још један диск откаже у овом тренутку. Пиво би можда могло помоћи)
У сваком случају, да бисте додали нови диск у низ, издајте ову команду (поново, обавезно замените имена уређаја својима по потреби):
Ако све буде у реду, диск ће бити додат у низ без проблема. Верујем да је заправо подразумевано додат као „врућа резерва“, али пошто овом низу недостаје диск (онај који је отказао), он се одмах ставља у употребу и процес обнове ће почети.
Можете то пратити овако:
Ово ће вероватно потрајати; на мом скромном серверу (заснованом углавном на хардверу потрошачког квалитета и десктоп дисковима, имајте на уму) успео је да достигне нешто мање од 100 МБ/с. Имајте на уму да је ово RAID-6, тако да је потребно много прорачуна паритета приликом реконструкције; RAID-10 би био много бржи. Ова машина има четворојезгарни AMD A10 9700E процесор („E“ значи да је енергетски ефикасан модел са ниским тактом, тј. није супер брз), само да бисте стекли представу шта можете очекивати. Са девет дискова од 8 ТБ у мојој конфигурацији, потпуна реконструкција је трајала нешто више од 24 сата.
Током реконструкције, можете монтирати фајл систем на низ и користити га као и обично ако желите, али ја више волим да то оставим реконструкцији док се не заврши. Имајте на уму да ако један диск откаже, други може ускоро да следи, тако да желите да се реконструкција обави што је брже могуће јер заиста не желите да други диск откаже током тога. Стога, немојте га оптерећивати другим У/И операцијама које нису строго неопходне.
Када је то завршено, додајте га назад у датотеку /etc/fstab, поново покрените систем и уживајте у својим датотекама :-)
