Замена сбойного диска в RAID1
Тестирование
Ниже описаны шаги для имитации отказа диска и его замены в RAID1. В примере предполагается, что вышел из строя /dev/sdb. То же самое применимо к /dev/sda — измените названия устройств по ситуации.
Важно: перед выполнением команд убедитесь, что у вас есть актуальные бэкапы и доступ к консоли хоста.
Шаг 1 — симулируем отказ диска
Можно физически вынуть диск после выключения системы или аккуратно пометить разделы как отказавшие в работающей системе:
mdadm --manage /dev/md0 --fail /dev/sdb1
mdadm --manage /dev/md1 --fail /dev/sdb2
mdadm --manage /dev/md2 --fail /dev/sdb3Затем удалим их из массива (soft-remove):
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/sdb) и загрузите систему. Система должна стартовать в обычном режиме.
Запросите состояние массива:
cat /proc/mdstatПример вывода для деградированного массива:
server1:~# cat /proc/mdstat
Personalities : [raid1]
md2 : active raid1 sda3[0]
4594496 blocks [2/1] [U_]
md1 : active raid1 sda2[0]
497920 blocks [2/1] [U_]
md0 : active raid1 sda1[0]
144448 blocks [2/1] [U_]
unused devices:
server1:~# И проверьте таблицу разделов:
fdisk -lПример вывода, где у /dev/sdb нет валидной таблицы разделов:
server1:~# fdisk -l
Disk /dev/sda: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 18 144553+ fd Linux raid autodetect
/dev/sda2 19 80 498015 fd Linux raid autodetect
/dev/sda3 81 652 4594590 fd Linux raid autodetect
Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdb doesn't contain a valid partition table
Disk /dev/md0: 147 MB, 147914752 bytes
2 heads, 4 sectors/track, 36112 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Disk /dev/md0 doesn't contain a valid partition table
Disk /dev/md1: 509 MB, 509870080 bytes
2 heads, 4 sectors/track, 124480 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Disk /dev/md1 doesn't contain a valid partition table
Disk /dev/md2: 4704 MB, 4704763904 bytes
2 heads, 4 sectors/track, 1148624 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Disk /dev/md2 doesn't contain a valid partition table
server1:~#Шаг 2 — копируем таблицу разделов
Скопируйте таблицу разделов с рабочего диска на новый:
sfdisk -d /dev/sda | sfdisk /dev/sdbЕсли sfdisk жалуется, попробуйте принудительный режим:
sfdisk -d /dev/sda | sfdisk --force /dev/sdbПример успешного результата:
server1:~# sfdisk -d /dev/sda | sfdisk /dev/sdb
Checking that no-one is using this disk right now ...
OK
Disk /dev/sdb: 652 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 289169 289107 fd Linux raid autodetect
/dev/sdb2 289170 1285199 996030 fd Linux raid autodetect
/dev/sdb3 1285200 10474379 9189180 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).)
server1:~#Шаг 3 — очистка метаданных RAID и добавление диска
Удалите следы прежних метаданных RAID на новом диске:
mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdb2
mdadm --zero-superblock /dev/sdb3Добавьте новые разделы в массивы:
mdadm -a /dev/md0 /dev/sdb1
mdadm -a /dev/md1 /dev/sdb2
mdadm -a /dev/md2 /dev/sdb3Проверьте состояние синхронизации:
cat /proc/mdstatПример восстановления:
server1:~# cat /proc/mdstat
Personalities : [raid1]
md2 : active raid1 sdb3[2] sda3[0]
4594496 blocks [2/1] [U_]
[======>..............] recovery = 30.8% (1416256/4594496) finish=0.6min speed=83309K/sec
md1 : active raid1 sdb2[1] sda2[0]
497920 blocks [2/2] [UU]
md0 : active raid1 sdb1[1] sda1[0]
144448 blocks [2/2] [UU]
unused devices:
server1:~# Дождитесь завершения синхронизации. Окончательный вывод должен показывать [UU]:
server1:~# cat /proc/mdstat
Personalities : [raid1]
md2 : active raid1 sdb3[1] sda3[0]
4594496 blocks [2/2] [UU]
md1 : active raid1 sdb2[1] sda2[0]
497920 blocks [2/2] [UU]
md0 : active raid1 sdb1[1] sda1[0]
144448 blocks [2/2] [UU]
unused devices:
server1:~# Шаг 4 — установка загрузчика на оба диска
Запустите grub и установите загрузчик на оба физических диска, чтобы система загружалась при отказе одного из них:
grubВ интерактивной сессии grub выполните:
root (hd0,0)
setup (hd0)
root (hd1,0)
setup (hd1)
quitГотово — вы успешно заменили сбойный диск в RAID1.
Чек-лист: быстрое руководство
- Сделать бэкап важных данных.
- Симулировать отказ (fail/remove) соответствующих разделов.
- Выключить и физически заменить диск (если требуется).
- Скопировать таблицу разделов: sfdisk -d /dev/sda | sfdisk /dev/sdb.
- Очистить superblock: mdadm –zero-superblock /dev/sdbX.
- Добавить разделы в массив: mdadm -a /dev/mdX /dev/sdbX.
- Проверить /proc/mdstat и дождаться [UU].
- Установить grub на оба диска.
Runbook при инциденте (пошагово)
- Оповестите команду и зафиксируйте время инцидента.
- Переведите деградировавший диск в состояние fail и remove (если не вынут физически).
- Подготовьте заменяющий диск — проверьте модель и ёмкость.
- Скопируйте таблицу разделов и очистите superblock.
- Добавьте диск в массив и контролируйте восстановление.
- После успешной синхронизации установите загрузчик на оба диска.
- Проведите тестовую перезагрузку на случай отказа одного из дисков.
- Задокументируйте шаги и время восстановления.
Критерии приёмки
- /proc/mdstat показывает для всех md‑томов состояние [UU].
- fdisk -l отображает корректные разделы на замене/старом диске.
- Система корректно загружается при отключении одного из дисков.
- Нет ошибок mdadm в логах (dmesg, /var/log/syslog).
Чит‑лист команд (полезно сохранить)
- Показать состояние RAID: cat /proc/mdstat
- Отметить раздел как failed: mdadm –manage /dev/mdX –fail /dev/sdXY
- Удалить раздел из массива: mdadm –manage /dev/mdX –remove /dev/sdXY
- Обнулить superblock: mdadm –zero-superblock /dev/sdXY
- Добавить в массив: mdadm -a /dev/mdX /dev/sdXY
- Копировать таблицу разделов: sfdisk -d /dev/sdA | sfdisk /dev/sdB
- Установить grub: grub -> root (hdN,0) -> setup (hdN) -> quit
1‑строчная терминология
RAID1 — зеркалирование двух или более дисков для отказоустойчивости; данные записываются одновременно на все зеркала.
Ссылки
- The Software-RAID Howto: http://tldp.org/HOWTO/Software-RAID-HOWTO.html
- Debian: http://www.debian.org
Важно: всегда проверяйте команды на тестовой системе и имейте актуальные бэкапы перед изменением разделов или метаданных дисков.
Похожие материалы
Троян Herodotus: как он работает и как защититься
Включить новое меню «Пуск» в Windows 11
Панель полей сводной таблицы в Excel — руководство
Включить новое меню «Пуск» в Windows 11
Дубликаты Диспетчера задач в Windows 11 — как исправить