Тестирование и восстановление 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)
- Пометить старый диск как failed и удалить: mdadm –manage … –fail/–remove.
- Снять питание и физически заменить диск.
- Скопировать таблицу разделов: sfdisk -d /dev/sda | sfdisk /dev/sdb.
- Обнулить старые md-суперблоки: mdadm –zero-superblock /dev/sdbX.
- Добавить разделы в массив: mdadm -a /dev/mdX /dev/sdbX.
- Дождаться окончания восстановления: cat /proc/mdstat.
- Установить GRUB на оба диска.
Краткое резюме
Вы успешно произвели симуляцию отказа диска в RAID1, заменили диск, восстановили таблицу разделов, обнулили старые метаданные, добавили диск обратно в массив, дождались синхронизации и установили загрузчик на оба диска.
Важно: каждую операцию выполняйте осознанно, проверяйте устройства с помощью lsblk, fdisk -l и smartctl, и держите резервные копии конфигурации и критичных данных.
Ссылки
- The Software-RAID Howto: http://tldp.org/HOWTO/Software-RAID-HOWTO.html
- CentOS: http://www.centos.org/
Глоссарий (1 строка на термин)
- RAID1 — зеркалирование: данные дублируются на двух или более дисках.
- MBR (msdos) — классическая таблица разделов, используемая на большинстве старых систем.
- GPT — современная таблица разделов, используемая на современных системах; требует другой процедуры.
- SMART — набор атрибутов для мониторинга состояния дисков.
Похожие материалы

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

Изменить размер Speed Dial в Vivaldi
Google Pay на рутованном Android

Джойстик для Pokémon GO — как получить и использовать
RAID1 с mdadm и LVM — создание и перенос
