Miklix

Замена на неуспешен диск во mdadm низа на Ubuntu

Објавено: 5 март 2025, во 19:53:41 UTC
Последно ажурирано: 12 јануари 2026, во 08:50:25 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 уред):

mdadm -–query -–detail /dev/md0

Како што споменав, во мојот случај тоа беше /dev/sdf, па да продолжиме со тоа.

Потоа, можете да се обидете да го пронајдете серискиот број на неуспешниот диск со издавање на оваа команда:

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

(ако smartctl не е пронајден, треба да го инсталирате пакетот smartmontools на Ubuntu)

Серискиот број потоа може да се спореди со сериските броеви на физичката етикета на дисковите за да се утврди кој од нив откажал.

Овој пат, сепак, немав толку среќа. Дискот беше целосно мртов и дури одбиваше да обезбеди SMART или други податоци, вклучувајќи го и серискиот број.

Бидејќи имав физички пристап до серверот (што навистина ви е потребно ако планирате сами да замените физички диск, претпоставувам ;-)) и серверот всушност работеше кога дискот откажа (и продолжи да работи добро благодарение на RAID-6 редундантноста), се одлучив за навистина примитивен, но всушност многу ефикасен и очигледен метод, едноставно копирање голема датотека на серверот и набљудување кое светло на HDD не трепка. За неколку секунди го идентификував виновникот.

Сега, пред да го извадите физичкиот диск, добра идеја е формално да го известите mdadm за оваа намера, со издавање на оваа команда (заменете ги имињата на уредите со вашите, по потреба):

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

Доколку е успешно, mdadm ќе одговори со порака дека дискот „е отстранет“, очигледно затоа што виртуелниот уред за рација всушност работи во тој момент.

Ако не успее со порака за грешка слична на „уред или ресурс зафатен“, можно е mdadm всушност да не го регистрирал дискот како целосно откажан. За да го направите тоа, извршете ја оваа команда (повторно, не заборавајте да ги замените имињата на уредите со вашите, по потреба):

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

После тоа, треба да можете да го отстраните уредот од низата со претходната команда.

Сега е време навистина да го замените дискот. Ако сте навистина, навистина - како, навистина - сигурни дека вашата машина и контролер поддржуваат замена на батерии, можете да го направите ова без да ја исклучите машината. Тоа би бил начинот на кој треба да се постапува со критични производствени системи што работат на вистински, соодветен серверски хардвер за кој знаете дека може да го поддржи. Мојот домашен датотечен сервер е базиран на матична плоча за широка потрошувачка со неколку полу-ноимени SATA контролери во PCIe слотови за да се обезбедат повеќе SATA порти.

Иако SATA генерално треба да поддржува hot swap, не сакав да ризикувам ништо во ова поставување, па затоа се одлучив да го исклучам уредот додека го заменувам дискот.

Пред да го направите тоа, добра идеја е да го коментирате raid уредот во датотеката /etc/fstab за Ubuntu да не се обиде автоматски да го монтира при следното стартување, бидејќи може да се заглави и да ве принуди да влезете во режим за обновување поради деградираната RAID низа. Тоа можеби не е голем проблем ако е десктоп систем, но јас го користам овој сервер без headless без поврзан монитор или тастатура, па затоа ова би било малку мачно.

Откако ќе го стартувате компјутерот со инсталиран сјаен нов диск, користете lsblk или некој друг начин за да го идентификувате. Ако не сте промениле ништо друго, веројатно (но не мора) ќе го добие истото име како и дискот што го заменивте. Во мојот случај, го стори тоа, па затоа новиот се нарекува и /dev/sdf.

Бидејќи мојот низа е базиран на партиции, а не на физички уреди, требаше да ја копирам табелата со партиции од работен диск на новиот диск за да бидам сигурен дека се потполно исти. Ако го стартувате вашиот низа на физички уреди, можете да го прескокнете овој чекор.

За оваа намена користев sgdisk, копирајќи ја табелата со партиции од /dev/sdc во /dev/sdf. Погрижете се да ги замените имињата на уредите за да се совпаѓаат со вашите, како што е соодветно.

Забележете го редоследот овде: прво го наведувате дискот „до“! Ова е малку контраинтуитивно за мене, но само осигурајте се дека сте го направиле правилно за да не добиете уште еден дефект на дискот во низата ;-)

sgdisk -R /dev/sdf /dev/sdc

Потоа, за да избегнете конфликти со UUID, генерирајте нови UUID-а за новиот диск:

sgdisk -G /dev/sdf

И сега конечно дојде време да го додадеме новиот диск во низата и да започнеме со процесот на обнова! (Добро, не е вистинска забава, всушност е прилично бавен и вознемирувачки процес бидејќи навистина, навистина не сакате друг диск да откаже во овој момент. Пивото можеби ќе помогне, сепак)

Како и да е, за да го додадете новиот диск во низата, извршете ја оваа команда (повторно, не заборавајте да ги замените имињата на уредите со вашите, како што е соодветно):

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

Ако сè оди добро, дискот ќе биде додаден во низата без проблеми. Верувам дека всушност е додаден како „жешка резервна“ по дифолт, но бидејќи на оваа низа ѝ недостасува диск (оној што откажа), тој веднаш се става во употреба и ќе започне процесот на обнова.

Можете да го следите вака:

watch cat /proc/mdstat

Ова веројатно ќе потрае; на мојот скромен сервер (главно базиран на хардвер од потрошувачка класа и десктоп дискови, имајте предвид) успеа да достигне нешто помалку од 100 MB/сек. Имајте на ум дека ова е RAID-6, па затоа има многу пресметки на паритет вклучени при реконструкцијата; RAID-10 би бил многу побрз. Оваа конкретна машина има AMD A10 9700E четиријадрен процесор („E“ значи дека е енергетски ефикасен модел со недоволно тактирање, т.е. не е супер брз), само за да ви дадам идеја што да очекувате. Со деветте дискови од 8 TB во мојата инсталација, целосното реконструкција траеше нешто повеќе од 24 часа.

За време на обновата, можете да го монтирате датотечниот систем на низата и да го користите како и обично ако сакате, но јас претпочитам да го оставам на обновата додека не заврши. Имајте на ум дека ако еден диск откаже, наскоро може да следи друг, па затоа сакате обновата да се изврши што е можно побрзо бидејќи навистина не сакате друг диск да откаже за време на тоа. Затоа, не го оптоварувајте со други влезни влезови што не се строго неопходни.

Откако ќе завршите, додадете го назад во вашата датотека /etc/fstab, рестартирајте го и уживајте во вашите датотеки :-)

Споделете на BlueskyСподелете на ФејсбукСподелете на LinkedInСподелете на TumblrСподелете на XСподелете на LinkedInЗакачи на Pinterest

Микел Кристенсен

За авторот

Микел Кристенсен
Микел е креатор и сопственик на miklix.com. Тој има над 20 години искуство како професионален компјутерски програмер/развивач на софтвер и моментално е вработен со полно работно време во голема европска ИТ корпорација. Кога не пишува блог, тој го поминува своето слободно време на широк спектар на интереси, хоби и активности, кои до одреден степен може да се рефлектираат во разновидните теми опфатени на оваа веб-локација.