Замена и тестирование неисправного диска в RAID1
О чём эта инструкция
Кратко: вы научитесь безопасно заменить один из зеркалирующих дисков (RAID1) на Linux-сервере, восстановить таблицу разделов, добавить диск в массив и дождаться синхронизации. Подойдёт для системных администраторов и инженеров поддержки.
Важно: перед любыми операциями сделайте резервную копию критичных данных, если это возможно.
Предварительные требования
- Доступ к консоли/SSH с правами root или sudo.
- mdadm установлен и конфигурирован для управления программным RAID.
- Наличие свободного порта/разъёма для нового жёсткого диска (если физическая замена).
- Знание, какой диск в системе — /dev/sda или /dev/sdb.
Коротко о терминах: RAID1 — зеркалирование данных на двух и более дисках; mdadm — утилита управления программным RAID; sfdisk — утилита для работы с таблицами разделов; grub — загрузчик.
1. Эмуляция отказа диска (тестирование)
Вы можете сделать это физически (выключить сервер и извлечь диск) или программно (пометить разделы как упавшие и удалить их из массива). В примере считается, что отказал /dev/sdb.
Для программной симуляции выполнения на машине:
mdadm --manage /dev/md0 --fail /dev/sdb1
mdadm --manage /dev/md1 --fail /dev/sdb2
mdadm --manage /dev/md0 --remove /dev/sdb1
mdadm --manage /dev/md1 --remove /dev/sdb2
Затем можно выключить систему и физически заменить диск:
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]
104320 blocks [2/1] [U_]
md1 : active raid1 sda2[0]
10377920 blocks [2/1] [U_]
unused devices:
[root@server1 ~]#
Также проверьте таблицу разделов и устройства:
fdisk -l
В примере вывод показывает, что /dev/sdb не содержит таблицу разделов:
Disk /dev/sdb: 10.7 GB, 10737418240 bytes
Disk /dev/sdb doesn't contain a valid partition table
3. Копирование таблицы разделов с рабочего диска на новый
Скопируйте таблицу разделов с исправного диска (/dev/sda) на новый (/dev/sdb):
sfdisk -d /dev/sda | sfdisk /dev/sdb
Если возникнет ошибка, попробуйте с опцией –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 208844 208782 fd Linux raid autodetect
/dev/sdb2 208845 20964824 20755980 fd Linux raid autodetect
/dev/sdb3 0 - 0 0 Empty
/dev/sdb4 0 - 0 0 Empty
Successfully wrote the new partition table
Re-reading the partition table ...
[root@server1 ~]#
Важно: если новый диск меньше по ёмкости, чем старый, копирование таблицы может не сработать. Всегда проверяйте физический объём дисков перед операциями. Если размеры отличаются незначительно, возможно потребуется вручную отредактировать sfdisk-вывод.
4. Очистка предыдущих метаданных RAID и добавление диска в массив
Перед добавлением убедитесь, что на новых разделах нет старых superblock mdadm. Очистите их:
mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdb2
Добавьте разделы в массивы:
mdadm -a /dev/md0 /dev/sdb1
mdadm -a /dev/md1 /dev/sdb2
Проверьте состояние синхронизации:
cat /proc/mdstat
Ожидаемый частичный вывод при начале ресинхронизации:
md1 : active raid1 sdb2[2] sda2[0]
10377920 blocks [2/1] [U_]
[======>..............] recovery = 32.3% (3360768/10377920) finish=1.5min speed=74238K/sec
Дождитесь завершения восстановления. В конце оба массива должны быть в состоянии [UU]:
md0 : active raid1 sdb1[1] sda1[0]
104320 blocks [2/2] [UU]
md1 : active raid1 sdb2[1] sda2[0]
10377920 blocks [2/2] [UU]
5. Установка загрузчика (grub) на оба диска
Чтобы система могла загрузиться с любого физического диска, установите загрузчик GRUB на оба устройства. Запустите grub в интерактивном режиме и выполните команды:
grub
Затем в консоли grub выполните (пример):
root (hd0,0)
setup (hd0)
root (hd1,0)
setup (hd1)
quit
Важно: синтаксис grub зависит от версии (grub-legacy vs grub2). Приведённый пример относится к grub (legacy). Для grub2 команды другие: используйте grub-install /dev/sda и grub-install /dev/sdb.
Критерии приёмки
- /proc/mdstat показывает [UU] для всех зеркал.
- fdisk -l показывает корректные разделы на новом диске.
- GRUB установлен на обоих физических дисках (проверяется grub-install или вывод grub).
- Сервер загружается с любого из дисков (опционально протестировать путем отключения одного из дисков и перезагрузки).
Чек-лист действий (SOP)
- Сделать резервную копию конфигурации и данных (если возможно).
- Уведомить заинтересованные стороны о предстоящих работах.
- Пометить раздел как упавший через mdadm или выключить и заменить диск физически.
- После замены загрузить систему и проверить cat /proc/mdstat.
- Скопировать таблицу разделов: sfdisk -d /dev/sda | sfdisk /dev/sdb.
- Очистить superblock: mdadm –zero-superblock /dev/sdb1 и /dev/sdb2.
- Добавить разделы в массив: mdadm -a /dev/md0 /dev/sdb1 и mdadm -a /dev/md1 /dev/sdb2.
- Дождаться окончания синхронизации.
- Установить загрузчик на оба диска.
- Провести финальную проверку и закрыть инцидент.
Типичные ошибки и способы их устранения
- sfdisk выдаёт ошибку msdos signature: попробуйте –force или проверьте, не повреждён ли сектор 0.
- Новый диск меньше по размеру: вручную отредактируйте таблицу разделов или используйте диск не меньше, чем оригинал.
- После добавления диск не входит в массив: проверьте вывод mdadm –examine /dev/sdb1 и убедитесь, что superblock отсутствует до добавления.
- GRUB не устанавливается: используйте grub-install и проверяйте /boot/grub/*, а также syslog на предмет ошибок.
Решения в альтернативных сценариях
- Если у вас LVM над RAID: после ресинхронизации проверьте pvscan и vgchange -ay.
- Если массив оказался полностью мёртв (оба диска): восстановление сложнее, может потребоваться использование mdadm –assemble –force с осторожностью.
Быстрая памятка команд (cheat sheet)
- Пометить как failed и удалить:
mdadm --manage /dev/mdX --fail /dev/sdYpZ
mdadm --manage /dev/mdX --remove /dev/sdYpZ
- Копия таблицы разделов:
sfdisk -d /dev/sdA | sfdisk /dev/sdB
- Обнулить superblock:
mdadm --zero-superblock /dev/sdXY
- Добавить в массив:
mdadm -a /dev/mdX /dev/sdXY
- Проверка статуса RAID:
cat /proc/mdstat
- Установка grub (grub-legacy):
grub
root (hd0,0)
setup (hd0)
root (hd1,0)
setup (hd1)
quit
Для grub2 используйте:
grub-install /dev/sda
grub-install /dev/sdb
update-grub
Модель принятия решения (простое дерево)
flowchart TD
A[Диск вышел из RAID] --> B{Есть физический доступ?}
B -- Да --> C[Выключить сервер, заменить диск физически]
B -- Нет --> D[Симулировать отказ mdadm --fail и --remove]
C --> E[Загрузить с новым диском]
D --> E
E --> F[Скопировать таблицу sfdisk]
F --> G[Очистить superblock и добавить разделы]
G --> H[Дождаться синхронизации]
H --> I[Установить GRUB на оба диска]
I --> J[Проверка: cat /proc/mdstat и перезагрузка тест]
Роли и ответственность
- Системный администратор: выполняет замену, следит за синхронизацией, устанавливает GRUB.
- Оператор/инженер поддержки: уведомляет о простоях, координирует тестовую перезагрузку.
- Дев/владелец сервиса: согласует временные окна и проверяет целостность приложения после восстановления.
Критерии окончания работ
- Массив в статусе [UU].
- GRUB установлен и система корректно загружается при отключении одного из дисков.
- Все наблюдения и команды задокументированы в инциденте.
Полезные ссылки
- The Software-RAID Howto: http://tldp.org/HOWTO/Software-RAID-HOWTO.html
- CentOS: http://www.centos.org/
Часто задаваемые вопросы
Q: Нужно ли устанавливать GRUB на оба диска?
A: Да. Это повышает отказоустойчивость: при выходе из строя одного носителя система сможет загрузиться с другого.
Q: Можно ли копировать таблицу sfdisk, если диски чуть-чуть разных размеров?
A: Это зависит от различия в размере. Если новый диск меньше, копирование может не пройти. Если размер примерно одинаковый, sfdisk может записать таблицу, но лучше проверить и, при необходимости, отредактировать значения вручную.
Конец. Внимательно следуйте чек-листу и убедитесь, что все шаги задокументированы в вашей системе инцидент-менеджмента.
Похожие материалы

Как вернуть счётчик дизлайков на YouTube

Добавить форум на Tumblr — пошаговое руководство

Dropbox на Android: настройка и советы

Отключить память чатов Gemini и управлять историей
