Гид по технологиям

Тестирование и восстановление RAID1 — замена диска

7 min read Системное администрирование Обновлено 10 Oct 2025
Тестирование и восстановление RAID1 — замена диска
Тестирование и восстановление RAID1 — замена диска

Пошаговое руководство по симуляции отказа диска и его замене в программном массиве RAID1 на Linux с mdadm. Показывает, как пометить диск как «failed», скопировать таблицу разделов, обнулить суперконтейнер RAID, добавить диск обратно и установить загрузчик. Полезно для sysadmin и тех, кто тестирует отказоустойчивость.

Краткое описание

Эта инструкция показывает, как безопасно смоделировать отказ жёсткого диска в RAID1, заменить его и вернуть массив в синхронизированное состояние. Подходит для массивов, собранных mdadm и использующих MBR (msdos) таблицы разделов.

В одном предложении: мы пометим партиции как failed, удалим их из массива, скопируем таблицу разделов с рабочей диска на новый, обнулим старые суперблоки mdadm, добавим новый диск в массив и дождёмся синхронизации, затем установим GRUB на оба диска.

Важно: приведённые команды выполняются от root. Перед началом сделайте резервную копию важных данных и метаданных конфигурации mdadm (например, /etc/mdadm.conf).

Термины (одной строкой)

  • mdadm — утилита для управления программными RAID на Linux.
  • суперконтейнер (superblock) — метаданные mdadm, записанные в начале раздела, которые идентифицируют его как участника массива.
  • degraded — состояние массива, когда один или несколько членов отсутствуют.

Требования и предпосылки

  • root-доступ на сервере.
  • mdadm и sfdisk установлены.
  • доступ к консоли сервера для перезагрузки и подключения/замены диска.
  • знание, какие устройства соответствуют /dev/sda и /dev/sdb (понимание, что нумерация может отличаться).

1. Как симулировать отказ диска

Можно физически выключить сервер и удалить диск, или «мягко» отметить партиции как failed и удалить их из массива без перезагрузки.

В примере считаем, что отказал /dev/sdb. Последовательно пометим партиции как failed и удалим их:

mdadm --manage /dev/md0 --fail /dev/sdb1
mdadm --manage /dev/md1 --fail /dev/sdb2
mdadm --manage /dev/md2 --fail /dev/sdb3

mdadm --manage /dev/md0 --remove /dev/sdb1
mdadm --manage /dev/md1 --remove /dev/sdb2
mdadm --manage /dev/md2 --remove /dev/sdb3

После этого можно выключить систему, извлечь диск и вставить новый или продолжить без перезагрузки (физическая замена диска предпочтительна для правдоподобного теста).

Чтобы выключить систему:

shutdown -h now

Если вы симулировали отказ /dev/sda, при замене оборудования поместите новый диск на место /dev/sda, а старый подключите как /dev/sdb — внимательно проверяйте соответствие устройств.

2. Проверка состояния массива после удаления диска

После загрузки системы выполните:

cat /proc/mdstat

Пример вывода (в исходном виде):

[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sda1[0]
200704 blocks [2/1] [U_]

md1 : active raid1 sda2[0]
522048 blocks [2/1] [U_]

md2 : active raid1 sda3[0]
9759360 blocks [2/1] [U_]

unused devices: 
[root@server1 ~]#

Ключевые моменты: строка [2/1] означает, что ожидаемых членов было 2, в массиве сейчас 1; индикатор [U] показывает, какие устройства активны (U — ок, — отсутствует).

Также полезно посмотреть таблицы разделов:

fdisk -l

Пример вывода (содержит информацию о том, что /dev/sdb не содержит таблицы разделов):

[root@server1 ~]# fdisk -l

Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          25      200781   fd  Linux raid autodetect
/dev/sda2             26          90      522112+  fd  Linux raid autodetect
/dev/sda3             91        1305     9759487+  fd  Linux raid autodetect

Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/sdb doesn't contain a valid partition table

Disk /dev/md2: 9993 MB, 9993584640 bytes
2 heads, 4 sectors/track, 2439840 cylinders
Units = cylinders of 8 * 512 = 4096 bytes

Disk /dev/md2 doesn't contain a valid partition table

Disk /dev/md1: 534 MB, 534577152 bytes
2 heads, 4 sectors/track, 130512 cylinders
Units = cylinders of 8 * 512 = 4096 bytes

Disk /dev/md1 doesn't contain a valid partition table

Disk /dev/md0: 205 MB, 205520896 bytes
2 heads, 4 sectors/track, 50176 cylinders
Units = cylinders of 8 * 512 = 4096 bytes

Disk /dev/md0 doesn't contain a valid partition table
[root@server1 ~]#

Вывод fdisk подтверждает, что у нового/заменённого диска (/dev/sdb) нет корректной таблицы разделов.

3. Копируем таблицу разделов с рабочего диска на новый

Используйте sfdisk для дампа таблицы с /dev/sda и записи её на /dev/sdb:

sfdisk -d /dev/sda | sfdisk /dev/sdb

Если появится ошибка про msdos signature или тип таблицы, попробуйте с опцией –force:

sfdisk -d /dev/sda | sfdisk --force /dev/sdb

Пример успешного выполнения и типичных сообщений:

[root@server1 ~]# sfdisk -d /dev/sda | sfdisk /dev/sdb
Checking that no-one is using this disk right now ...
OK

Disk /dev/sdb: 1305 cylinders, 255 heads, 63 sectors/track

sfdisk: ERROR: sector 0 does not have an msdos signature
/dev/sdb: unrecognized partition table type
Old situation:
No partitions found
New situation:
Units = sectors of 512 bytes, counting from 0

Device Boot    Start       End   #sectors  Id  System
/dev/sdb1   *        63    401624     401562  fd  Linux raid autodetect
/dev/sdb2        401625   1445849    1044225  fd  Linux raid autodetect
/dev/sdb3       1445850  20964824   19518975  fd  Linux raid autodetect
/dev/sdb4             0         -         0   0  Empty
Successfully wrote the new partition table

Re-reading the partition table ...

If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
to zero the first 512 bytes:  dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)
[root@server1 ~]#

Если sfdisk успешно записал таблицу, новые разделы появятся как /dev/sdb1, /dev/sdb2, /dev/sdb3.

Важно: убедитесь, что границы разделов совпадают с оригиналом. Неправильное выравнивание или смещение приведут к ошибкам при добавлении раздела в mdadm.

4. Удаляем старые метаданные RAID с нового диска

Перед добавлением разделов в массив нужно обнулить суперконтейны mdadm на новых разделах, чтобы они не конфликтовали с предыдущими записями:

mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdb2
mdadm --zero-superblock /dev/sdb3

Эта операция безопасна для новых чистых разделов, но приведёт к удалению любой существующей информации о RAID на этих разделах.

5. Добавление новых разделов в массив

Добавляем соответствующие разделы в массивы md0, md1, md2:

mdadm -a /dev/md0 /dev/sdb1
mdadm -a /dev/md1 /dev/sdb2
mdadm -a /dev/md2 /dev/sdb3

После этого проверьте состояние:

cat /proc/mdstat

Пример частичного вывода в процессе ресинхронизации:

[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[1] sda1[0]
200704 blocks [2/2] [UU]

md1 : active raid1 sdb2[1] sda2[0]
522048 blocks [2/2] [UU]

md2 : active raid1 sdb3[2] sda3[0]
9759360 blocks [2/1] [U_]
[=======>.............]  recovery = 39.4% (3846400/9759360) finish=1.7min speed=55890K/sec

unused devices: 
[root@server1 ~]#

Строка recovery показывает прогресс синхронизации. Для больших разделов это может занять значительное время; скорость зависит от нагрузки и параметров RAID.

Подождите до полного завершения синхронизации. После завершения все массивы должны выглядеть так:

[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[1] sda1[0]
200704 blocks [2/2] [UU]

md1 : active raid1 sdb2[1] sda2[0]
522048 blocks [2/2] [UU]

md2 : active raid1 sdb3[1] sda3[0]
9759360 blocks [2/2] [UU]

unused devices: 
[root@server1 ~]#

6. Установка загрузчика (GRUB) на оба диска

Чтобы сервер корректно загружался при отказе одного из HDD, установите загрузчик на оба физических диска. Запустите grub и выполните команды установки для каждого диска:

grub

В интерактивной сессии grub:

root (hd0,0)
setup (hd0)
root (hd1,0)
setup (hd1)
quit

После этого загрузчик GRUB будет установлен на MBR обоих дисков и система сможет загрузиться с любого из них.

Критерии приёмки

  • mdstat показывает [UU] для всех массивов (все члены активны).
  • fdisk -l показывает корректные разделы на обоих дисках.
  • GRUB установлен на обоих дисках (прошарьте MBR или проверьте настройку через grub-install при необходимости).
  • Система загружается при отключении одного из дисков.

Шаги проверки и тест-кейсы

  • До начала: сохранить /etc/mdadm.conf и выполнить mdadm –detail /dev/mdX для записи текущего состояния.
  • Симуляция: пометить разделы как failed и удалить их, проверить degraded состояние (cat /proc/mdstat).
  • Замена: записать таблицу разделов, обнулить суперблоки, добавить разделы в массивы, проверить восстановление.
  • Установка загрузчика: убедиться, что grub установлен на обоих дисках.
  • Тест на отказ: вручную отключить один диск и проверить, что система корректно работает и монтирует все файловые системы.

Альтернативные подходы

  • Использовать dd для копирования первых мегабайтов диска (dd if=/dev/sda of=/dev/sdb bs=512 count=???): риск перезаписать ненужные данные, требует точности и чаще не нужен при использовании sfdisk.
  • Использовать parted вместо sfdisk для GPT-дисков. Инструкция выше подходит для MBR (msdos). Для GPT нужно применять sgdisk/parted и учитывать заголовки GPT.
  • При наличии LVM: сначала убедитесь, что PV и VG корректно распознаны перед добавлением разделов в mdadm.

На что обратить внимание — возможные ошибки и как их решать

  • sfdisk возвращает ошибку msdos signature: используйте –force, но сначала удостоверьтесь, что вы пишете на правильное устройство.
  • Несовпадение размеров разделов: проверьте offsets и секторную выравненность; при несовпадении добавление в mdadm может не сработать.
  • Старые суперблоки на новом диске: mdadm может отказаться добавлять раздел; используйте mdadm –zero-superblock.
  • Массив не синхронизируется: проверьте dmesg и /var/log/messages на ошибки I/O, проверьте состояние дисков (SMART).

Роли и чеклист (кто за что отвечает)

Sysadmin (ответственный):

  • Снимок конфигурации mdadm (/etc/mdadm.conf).
  • Подготовка запасного диска и проверка схемы разделов.
  • Выполнение команд fail/remove, sfdisk, zero-superblock, mdadm -a.
  • Наблюдение за синхронизацией и завершением.
  • Установка GRUB на оба диска.

Инженер по сопровождению/оператор:

  • Обеспечить физический доступ для замены диска.
  • Выполнить перезагрузку по инструкции.
  • Документировать серийные номера и соответствие устройств (/dev/sdX).

Тестировщик:

  • Выполнить тест на отключение диска после завершения восстановления.
  • Проверить целостность FS и доступность сервисов.

Матрица рисков и меры смягчения

  • Риск: Ошибка при записи таблицы на неправильный диск. Митигирование: перепроверяйте команды, используйте lsblk и serial numbers.
  • Риск: Перезапись важных данных. Митигирование: резервные копии, дамп MBR перед операцией: dd if=/dev/sdb of=/root/sdb-mbr.img bs=512 count=2048
  • Риск: Диск неисправен аппаратно. Митигирование: проверка SMART перед вводом в массив (smartctl).

Факты и рекомендации (факт-бокс)

  • mdadm управляет программными RAID на Linux и использует суперконтейнеры для идентификации членов массива.
  • Всегда проверяйте соответствие разделов по offset и размеру перед добавлением в массив.
  • Установка загрузчика на оба диска повышает доступность при отказе одного устройства.

Короткая инструкция для быстрого выполнения (SOP)

  1. Пометить старый диск как failed и удалить: mdadm –manage … –fail/–remove.
  2. Снять питание и физически заменить диск.
  3. Скопировать таблицу разделов: sfdisk -d /dev/sda | sfdisk /dev/sdb.
  4. Обнулить старые md-суперблоки: mdadm –zero-superblock /dev/sdbX.
  5. Добавить разделы в массив: mdadm -a /dev/mdX /dev/sdbX.
  6. Дождаться окончания восстановления: cat /proc/mdstat.
  7. Установить GRUB на оба диска.

Краткое резюме

Вы успешно произвели симуляцию отказа диска в RAID1, заменили диск, восстановили таблицу разделов, обнулили старые метаданные, добавили диск обратно в массив, дождались синхронизации и установили загрузчик на оба диска.

Важно: каждую операцию выполняйте осознанно, проверяйте устройства с помощью lsblk, fdisk -l и smartctl, и держите резервные копии конфигурации и критичных данных.

Ссылки

Глоссарий (1 строка на термин)

  • RAID1 — зеркалирование: данные дублируются на двух или более дисках.
  • MBR (msdos) — классическая таблица разделов, используемая на большинстве старых систем.
  • GPT — современная таблица разделов, используемая на современных системах; требует другой процедуры.
  • SMART — набор атрибутов для мониторинга состояния дисков.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Автоочистка Корзины в Windows 10
Windows 10

Автоочистка Корзины в Windows 10

Изменить размер Speed Dial в Vivaldi
Браузеры

Изменить размер Speed Dial в Vivaldi

Google Pay на рутованном Android
Android.

Google Pay на рутованном Android

Джойстик для Pokémon GO — как получить и использовать
Мобильные игры

Джойстик для Pokémon GO — как получить и использовать

RAID1 с mdadm и LVM — создание и перенос
Системное администрирование

RAID1 с mdadm и LVM — создание и перенос

Ошибка: данные организации нельзя вставить — исправить
IT-поддержка

Ошибка: данные организации нельзя вставить — исправить