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

Тестирование и восстановление 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
Автор
Редакция

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

Включение E2EE на Ring Doorbell
Безопасность

Включение E2EE на Ring Doorbell

Сохранение вывода командной строки Windows
Windows

Сохранение вывода командной строки Windows

Автосубтитры в прямых трансляциях YouTube
Видео

Автосубтитры в прямых трансляциях YouTube

Сообщение на экран блокировки Mac
Mac

Сообщение на экран блокировки Mac

Google Person Finder — как найти людей после катастрофы
Руководство

Google Person Finder — как найти людей после катастрофы

uGet для Linux — установка и руководство
Linux

uGet для Linux — установка и руководство