Заміна несправного диска в масиві mdadm на Ubuntu
Опубліковано: 15 лютого 2025 р. о 22:02:37 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, перезавантажтеся та насолоджуйтесь своїми файлами :-)