До тексту
  1. Статті/

Заміна диску в mdadm RAID

·4 хвилини
cat /etc/passwd
Автор
cat /etc/passwd
Технічний блог про Linux, DevOps та Open Source технології.
Зміст

В чому проблема?
#

На одному з фізичних серверів маємо сконфігурований raid1(mdadm) з 2 дисків.

Один з дисків сьогодні вилетів, помер. RAID: State = degraded, а це вже не RAID, тільки raidsolo:).

Потрібно: замінити диск і відновити RAID до стану clean.

На сервері працює Proxmox. (не знаю навіщо ця інформація, взагалі пох, що там працює)

Структура сервера:

1
2
3
4
5
# системний диск (EFI, root, local storage)
- /dev/sda

# RAID1 масив md0, замонтований в /mnt/nvme
- /dev/nvme0n1 + /dev/nvme1n1

Що потрібно зробити?
#

  1. Шукаємо, який конкретно диск мертвий. Це був сервер Dell, тому зробив через iDRAC + підтвердив в терміналі за допомогою mdadm --detail /dev/md0
1
cat /proc/mdstat
1
mdadm --detail /dev/md0

alt text

Що бачу:

  • State: clean, degraded
  • Active Devices: 1
  • [U_] замість [UU]
  • Один диск active sync, другий — removed

Масив живий, але летить на одному диску.

  1. Тікет в саппорт DC з проханням замінити фізичний диск. В моєму випадку сервер потрібно було вимкнути повністю (не має доступу до nvme ззовні).

  2. Мабуть непогано було б теж мати бекап , але тоді все буде не так цікаво (+ всі навколо думатимуть, що мою роботу точно не забере AI-шка.)

  3. Чекаю, поки запхають новий диск і відпишуться (і сервер увімк.. увімк… йолка)

Rebuild масиву
#

Після того як замінили диск на живий:

Клонуємо таблицю розділів з живого диска на новий:

1
sgdisk /dev/nvme0n1 -R /dev/nvme1n1
1
sgdisk -G /dev/nvme1n1
1
2
-R - копіює структуру партицій.
-G - генерує новий UUID, щоб не було конфлікту.

Додаємо новий диск у масив:
#

1
mdadm --add /dev/md0 /dev/nvme1n1p1

Перевіряємо прогрес:

1
cat /proc/mdstat

alt text

Бачу recovery = 0.0%, потім 1.6%. Rebuild пішов.

В моєму випадку весь процес зайняв близько ~78 хвилин на терабайтний диск.

Сервер працює під час rebuild, але якщо є можливість , то краще не навантажувати.

Після завершення rebuild потрібно оновити конфіг mdamd /etc/mdadm/mdadm.conf

Спочатку видаляємо старий md0. Наприклад за допомогою sed (можна і вручну vim /etc/mdadm/mdadm.conf)

1
sed -i '/md0/d' /etc/mdadm/mdadm.conf

і додаємо актуальний

1
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
Без sed команда >> додасть другий запис про md0. При завантаженні можуть бути проблеми (а мені потрбіний тільки один запис з md0)

Проблеми з EFI/GRUB
#

У моєму випадку після заміни диска були проблеми із завантаженням системи. Linux на цьому сервері стоїть на /dev/sda, EFI-партиція - /dev/sda1. Тому додатково потрібно було виконати ще:

1
2
3
4
umount /boot/efi
proxmox-boot-tool init /dev/sda1 grub
proxmox-boot-tool refresh
mount /boot/efi

Це не завжди потрібно. Але якщо після ребуту система не стартує — перевіряйте proxmox-boot-tool status.

Повинно писати приблизно таке:

1
2
System currently booted with uefi
XXX-XXXX is configured with: grub (versions: X.X.XX-X-pve)

Корисні команди
#

Стан масиву

1
2
cat /proc/mdstat
mdadm --detail /dev/md0

SMART-перевірка диска (побачити проблему ДО а не коли вже гімна повні штани)

1
2
smartctl -a /dev/nvme0n1
smartctl -a /dev/nvme1n1

SMART-перевірка - а тут конкретно, що тебе повинно цікавити.

1
smartctl -a /dev/nvme0n1 | grep -E "Percentage Used|Available Spare|Media and Data|Critical Warning|Temperature:|Unsafe|Error Information Log"

Що конкретно моніторити:

  1. Media and Data Integrity Errors > 0 ===> міняти диск
  2. Available Spare падає нижче threshold ===> міняти диск
  3. Percentage Used > 90% ===> Купити диск і планувати його заміну
  4. Critical Warning != 0x00 ===> а тут вже гайки
Нажми сюди, щоб прочитати що ці параметри означають

Media and Data Integrity Errors - диск записав одне, прочитав інше. Контролер не зміг “порішати”. NAND-чіпи фізично деградують, дані пошкоджуються. Якщо бачиш 1 таку помилка - міняй диск, бо далі буде тільки веселіше.

Available Spare - резервні блоки NAND (запасне колесо в машині) Коли зношується основний блок, контролер підстваляє резервний. Для нас все виглядає ок, бо диск працює, але КОЛИ резервні блоки теж закінчаться (падає нижче threshold) контролеру більше нічим замінювати мертві блоки і посипляться помилки запису.

Аналогія з паливним баком в машині:

  • Available Spare - показує скільки в баку
  • Available Spare Threshold - червона лампочка на приборці. Далеко не заїдеш.

Percentage Used - ресурс диску (цей диск розрахований на X терабайт запису). Тут як в машині. Гарантія на 100 тисяч км, після - ніби їздить, але кожен місяць у механіка. Якщо дійшов до 90% - купити диск, щоб було чим замінити. Якщо не з такої сімї, а з багатої - одразу міняти при 100%.

Critical Warning - це червоні прапорці. Нам потрібно щоб там завжди було 0x00 - це означає що все добре. Якщо щось інше - гуглить і розбиратись одразу. Бо тут вже лоторея.

alt text

Related