К основному содержимому

Замена диска в RAID-массиве без остановки сервера

Выделенные серверы · 24.09.2026
Иллюстрация к статье «Замена диска в RAID-массиве без остановки сервера»

Замена диска в RAID-массиве без остановки сервера

Порядок такой: найти сбойный накопитель и его серийный номер, пометить его как faulty и вывести из массива, попросить дата-центр заменить диск в корзине, скопировать на новый диск таблицу разделов, добавить разделы в массив и дождаться ребилда. Сервер при этом не выключается, если корзина поддерживает горячую замену, а массив избыточный.

  • Перед заявкой в дата-центр зафиксируйте серийный номер диска: слоты в корзине не совпадают с именами /dev/sdX.
  • Новый накопитель добавляют не целиком, а разделами — с той же разметкой, что на уцелевшем диске.
  • После ребилда загрузочного массива обязательно ставят загрузчик на новый диск, иначе сервер не поднимется при следующем отказе.
  • На аппаратном контроллере всё то же самое делает storcli, а разметка копируется контроллером автоматически.

Шаг 1. Найти диск и снять серийный номер

В /proc/mdstat выпавший накопитель помечен символом подчёркивания вместо U и суффиксом (F). Имя устройства после перезагрузки может измениться, поэтому опорная величина — серийный номер.

# состояние массивов
cat /proc/mdstat
mdadm --detail /dev/md0 2>&1 | grep -E 'State|Number|Failed|removed'

# серийные номера и модели всех дисков
lsblk -o NAME,SIZE,SERIAL,MODEL
smartctl -i /dev/sdb 2>&1 | grep -E 'Serial|Device Model'

Если диск ещё жив, но уже сыплется, вы увидите это по атрибутам SMART до того, как массив его выбросит; как их читать, описано в статье про SMART-диагностику дисков сервера.

Шаг 2. Вывести диск из массива

Массив сам помечает диск сбойным при ошибке записи, но при плановой замене это делают руками. Диск выводят из каждого массива, в котором участвуют его разделы.

# пометить сбойным и убрать из массива
mdadm --manage /dev/md0 --fail /dev/sdb1
mdadm --manage /dev/md0 --remove /dev/sdb1

# если разделов несколько, повторить для каждого массива
mdadm --manage /dev/md1 --fail /dev/sdb2
mdadm --manage /dev/md1 --remove /dev/sdb2

# стереть метаданные, чтобы диск не пытался вернуться в массив
mdadm --zero-superblock /dev/sdb1

Шаг 3. Физическая замена

На выделенных серверах ZevsHost накопитель меняет дежурная смена площадки по заявке. В заявке указывайте модель, серийный номер выведенного диска и подтверждение, что он уже удалён из массива программно. Инженеру нужно понимать, какой именно диск вынимать: имена /dev/sdX ему не видны.

Шаг 4. Разметить новый диск

Новый накопитель приходит пустым. Разметку копируют с уцелевшего диска: для GPT — утилитой sgdisk, для MBR — через sfdisk. После копирования GPT новому диску обязательно выдают собственный GUID, иначе система увидит два диска с одинаковым идентификатором.

# узнать тип таблицы разделов
fdisk -l /dev/sda 2>&1 | grep -i 'Disklabel type'

# GPT: копия разметки sda -> sdb и новый GUID
sgdisk --replicate=/dev/sdb /dev/sda
sgdisk --randomize-guids /dev/sdb

# MBR: копия разметки
sfdisk -d /dev/sda | sfdisk /dev/sdb

Шаг 5. Вернуть диск в массив и дождаться ребилда

# добавить разделы в соответствующие массивы
mdadm --manage /dev/md0 --add /dev/sdb1
mdadm --manage /dev/md1 --add /dev/sdb2

# следить за прогрессом
cat /proc/mdstat
mdadm --detail /dev/md0 2>&1 | grep -E 'Rebuild Status|State'

# поднять скорость ребилда на время окна (KB/s)
echo 50000 > /proc/sys/dev/raid/speed_limit_min
echo 400000 > /proc/sys/dev/raid/speed_limit_max

Время восстановления зависит от типа накопителя и уровня массива. Ниже — ориентиры для диска на 1 TB при умеренной нагрузке; подробности про сами уровни собраны в статье про RAID 0, 1, 5 и 10.

КонфигурацияЧто делает системаОриентир по времениРиск в окне
RAID 1, 2×NVMe 1 TBкопирует содержимое зеркаладесятки минутотказ второго диска
RAID 10, 4×NVMe 1 TBкопирует одну парудесятки минутотказ парного диска
RAID 5, 6×HDDчитает все диски и считает чётностьот 10 часоввторой отказ и ошибки чтения

Шаг 6. Загрузчик на новом диске

Массив не содержит загрузочного сектора: он живёт вне разделов md. Новый диск после ребилда хранит данные, но загрузиться с него система не сможет, пока вы не поставите загрузчик руками.

# BIOS-режим, Debian/Ubuntu
grub-install /dev/sdb
update-grub

# BIOS-режим, RHEL, AlmaLinux, Rocky
grub2-install /dev/sdb
grub2-mkconfig -o /boot/grub2/grub.cfg

# UEFI: скопировать раздел ESP на новый диск
dd if=/dev/sda1 of=/dev/sdb1 bs=1M status=progress
efibootmgr -v

Две ошибки на этом шаге стоят простоя. Первая — добавить в массив весь диск (/dev/sdb) вместо раздела: массив соберётся, но разметки на диске не будет, и сервер с него не стартует. Вторая — не поставить загрузчик: пока жив первый диск, всё работает, а при его отказе машина уходит в «no bootable device». Проверяйте результат до того, как закроете задачу: cat /proc/mdstat показывает все устройства как [UU] без символов подчёркивания и без строки recovery, lsblk показывает на новом диске те же разделы, что на старом, а efibootmgr -v или grub-install отработали без ошибок. Реализацию массива, если она аппаратная, проверяют через утилиту контроллера.

Коротко

  • Сначала серийный номер, потом заявка: по /dev/sdX инженер диск не найдёт.
  • Диск выводят из каждого массива, где были его разделы, и обнуляют суперблок.
  • Разметку копируют с уцелевшего диска, для GPT дополнительно меняют GUID.
  • Ребилд стартует сразу после --add; скорость регулируется параметрами speed_limit.
  • Загрузчик на новом диске ставят вручную и проверяют до закрытия задачи.
← Назад в базу знаний Задать вопрос поддержке