Miklix

Заміна несправного диска в масиві mdadm на Ubuntu

Опубліковано: 15 лютого 2025 р. о 22:02:37 UTC
Останнє оновлення: 12 січня 2026 р. о 08:50:05 UTC

Якщо ви опинилися в жахливій ситуації з відмовою диска в RAID-масиві mdadm, у цій статті пояснюється, як правильно замінити його в системі Ubuntu.


Ця сторінка була перекладена з англійської мови машинним перекладом, щоб зробити її доступною для якомога більшої кількості людей. На жаль, машинний переклад ще не є досконалою технологією, тому можуть траплятися помилки. Якщо ви бажаєте, ви можете переглянути оригінальну англійську версію тут:

Replacing a Failed Drive in an mdadm Array on Ubuntu

Інформація в цій публікації базується на Ubuntu 18.04 та версії mdadm, що міститься в її репозиторіях; на момент написання це v4.1-rc1. Вона може бути дійсна для інших версій, а може й ні.

Нещодавно у мене раптово вийшов з ладу диск на домашньому файловому сервері, який складається з дев'яти дисків у масиві RAID-6 від mdadm. Це завжди лякає, але, на щастя, мені вдалося швидко знайти запасний диск, який доставили вже наступного дня, тож я міг розпочати відновлення.

Зізнаюся, я трохи скупився, коли спочатку налаштовував файловий сервер; лише два диски були справжніми 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), я обрав справді примітивний, але насправді дуже ефективний та очевидний метод: просто скопіювати великий файл на сервер і подивитися, який індикатор жорсткого диска не мерехтить. За кілька секунд я визначив винуватця.

Тепер, перш ніж витягувати фізичний диск, гарною ідеєю буде офіційно повідомити mdadm про цей намір, виконавши цю команду (замініть назви пристроїв своїми власними, якщо потрібно):

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

У разі успіху mdadm відповість повідомленням про те, що диск було "гаряче видалено", очевидно, тому що віртуальний RAID-пристрій насправді працює в цей момент.

Якщо виникає помилка з повідомленням, подібним до "пристрій або ресурс зайнятий", можливо, mdadm насправді не зареєстрував диск як повністю збій. Щоб це зробити, виконайте цю команду (знову ж таки, не забудьте замінити назви пристроїв на свої власні, якщо це необхідно):

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

Після цього ви зможете видалити пристрій з масиву за допомогою попередньої команди.

Тепер саме час замінити диск. Якщо ви дійсно, дійсно – типу, дійсно – впевнені, що ваш комп’ютер і контролер підтримують гарячу заміну, ви можете зробити це, не вимикаючи комп’ютер. Це був би правильний спосіб для критично важливих виробничих систем, що працюють на справному, належному серверному обладнанні, яке, як ви точно знаєте, може з ним впоратися. Мій домашній файловий сервер базується на материнській платі для настільних комп’ютерів споживчого класу з кількома напівбезіменними контролерами SATA в слотах PCIe, щоб забезпечити більше портів SATA.

Хоча SATA зазвичай має підтримувати гарячу заміну, я не збирався ризикувати в цій конфігурації, тому вирішив вимкнути машину під час заміни диска.

Перш ніж це зробити, варто закоментувати raid-пристрій у файлі /etc/fstab, щоб Ubuntu не намагався автоматично змонтувати його під час наступного завантаження, оскільки це може призвести до зависання та переведення системи в режим відновлення через пошкоджений RAID-масив. Це може не бути великою проблемою, якщо це настільна система, але я запускаю цей сервер без підключення монітора чи клавіатури, тому це може створити певні труднощі.

Після завантаження машини з новим встановленим диском, скористайтеся командою 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 МБ/с. Майте на увазі, що це RAID-6, тому для перебудови потрібно багато обчислень парності; RAID-10 був би набагато швидшим. Ця конкретна машина має чотириядерний процесор AMD A10 9700E ("E" означає, що це енергоефективна модель з низькою тактовою частотою, тобто не надто швидка), просто щоб ви мали уявлення про те, чого очікувати. З дев'ятьма дисками по 8 ТБ у моїй конфігурації повне перебудування зайняло трохи більше 24 годин.

Під час перебудови ви можете змонтувати файлову систему на масиві та використовувати її як зазвичай, якщо хочете, але я волію залишити це на час перебудови, поки вона не буде завершена. Майте на увазі, що якщо один диск вийде з ладу, незабаром може вийти з ладу інший, тому вам потрібно, щоб перебудову було виконано якомога швидше, оскільки ви дійсно не хочете, щоб інший диск вийде з ладу під час цього. Тому не навантажуйте його іншими операціями вводу-виводу, які не є абсолютно необхідними.

Після цього додайте його назад до файлу /etc/fstab, перезавантажте комп'ютер і насолоджуйтесь своїми файлами :-)

Поділитися на BlueskyПоділіться на FacebookПоділіться на LinkedInПоділіться на TumblrПоділитися на XПоділіться на LinkedInЗакріпити на Pinterest

Міккель Крістенсен

Про автора

Міккель Крістенсен
Міккель - творець і власник сайту miklix.com. Він має понад 20 років досвіду роботи професійним програмістом/розробником програмного забезпечення і наразі працює на повну ставку у великій європейській ІТ-корпорації. У вільний від ведення блогу час він присвячує різноманітним інтересам, хобі та захопленням, що певною мірою відображається на різноманітності тем, які висвітлюються на цьому сайті.