Подмяна на неуспешно устройство в mdadm масив на Ubuntu
Публикувано: 15 февруари 2025 г. в 22:01:11 ч. 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 ще отговори със съобщение, в което се казва, че е „премахнал горещо“ устройството, очевидно защото виртуалното устройство за нападение действително работи по това време.
Ако не успее със съобщение за грешка, подобно на „устройството или ресурсът е зает“, може да се окаже, че mdadm всъщност не е регистрирал устройството като напълно неуспешно. За да направите това, издайте тази команда (отново не забравяйте да замените имената на устройствата с вашите собствени, както е подходящо):
След това трябва да можете да премахнете устройството от масива с предишната команда.
Сега е време действително да смените устройството. Ако сте наистина, наистина - като, наистина - сигурни, че вашата машина и контролер поддържат гореща смяна, можете да направите това, без да изключвате машината. Това би бил начинът да продължите с критични производствени системи, работещи на истински, подходящ сървърен хардуер, за който със сигурност знаете, че може да се справи. Моят домашен файлов сървър е базиран на дънна платка за настолни компютри от потребителски клас с няколко SATA контролера с полу-безименни имена в PCIe слотовете, за да осигуря все пак повече SATA портове.
Въпреки че SATA като цяло трябва да поддържа гореща смяна, нямах намерение да рискувам нещо в тази настройка, така че избрах да изключа машината, докато сменям устройството.
Преди да направите това, добра идея е да коментирате raid устройството във файла /etc/fstab, така че Ubuntu да не се опита да го монтира автоматично при следващото зареждане, защото може да увисне и да ви принуди да влезете в режим на възстановяване поради влошения RAID масив. Това може да не е голям проблем, ако е настолна система, но аз стартирам този сървър без глава без монитор или клавиатура, така че това би било малко караница.
След като стартирате машината с инсталирано ново лъскаво устройство, използвайте lsblk или друго средство, за да го идентифицирате. Ако не сте променили нищо друго, то вероятно (но не е задължително ) ще получи същото име като устройството, което сте заменили. В моя случай беше, така че новият също се нарича /dev/sdf.
Тъй като масивът ми е базиран на дялове, а не на физически устройства, трябваше да копирам таблицата на дяловете от работещо устройство на новото устройство, за да се уверя, че са абсолютно еднакви. Ако вместо това стартирате своя масив на физически устройства, можете да пропуснете тази стъпка.
Използвах sgdisk за тази цел, копирайки таблицата на дяловете от /dev/sdc в /dev/sdf. Уверете се, че сте заменили имената на устройствата, за да съответстват на вашите собствени, както е подходящо.
Обърнете внимание на реда тук: първо изброявате устройството "до"! Това е малко контраинтуитивно за мен, но просто се уверете, че сте го направили правилно, за да не получите нова повреда на устройството в масива ;-)
След това, за да избегнете конфликти на UUID, генерирайте нови UUID за новото устройство:
И сега най-накрая дойде времето да добавите новото устройство към масива и да започнете партито за възстановяване! (Добре, това не е наистина парти, всъщност е доста бавен и изнервящ процес, тъй като наистина, наистина не искате друго устройство да се повреди в този момент. Бирата може да помогне обаче)
Както и да е, за да добавите новото устройство към масива, издайте тази команда (отново не забравяйте да замените имената на устройствата с вашите собствени, както е подходящо):
Ако всичко върви добре, устройството ще бъде добавено към масива без проблеми. Вярвам, че всъщност е добавен като "горещ резерв" по подразбиране, но тъй като в този масив липсва диск (този, който е неуспешен), той незабавно се използва и процесът на възстановяване ще започне.
Можете да го следите така:
Това вероятно ще отнеме известно време; на моя нисък сървър (базиран до голяма степен на потребителски клас хардуер и настолни устройства, имайте предвид) успя да достигне малко под 100 MB/sec. Имайте предвид, че това е RAID-6, така че има много паритетни изчисления, свързани с възстановяването; RAID-10 би бил много по-бърз. Тази конкретна машина има четириядрен процесор AMD A10 9700E ("E" означава, че това е енергийно ефективен модел с по-ниска честота, т.е. не е супер бърз), само за да ви даде представа какво да очаквате. С деветте 8 TB устройства в моята настройка, пълното възстановяване отне малко повече от 24 часа.
По време на възстановяването можете да монтирате файловата система в масива и да я използвате както обикновено, ако желаете, но предпочитам да го оставя на повторното изграждане, докато не приключи. Имайте предвид, че ако едно устройство се повреди, скоро може да последва друго, така че искате възстановяването да се извърши възможно най-бързо, тъй като наистина не искате друго устройство да се повреди по време на това. Затова не го натоварвайте с други IO, които не са строго необходими.
След като приключи, добавете го обратно към вашия /etc/fstab файл, рестартирайте и се насладете на вашите файлове :-)