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

Замена и тестирование сбойного диска в RAID1 на Linux

3 min read RAID Обновлено 23 Nov 2025
Замена диска в RAID1 на Linux — тест и восстановление
Замена диска в RAID1 на Linux — тест и восстановление

TL;DR

Если в RAID1 вышел из строя диск — можно смоделировать отказ, скопировать таблицу разделов с работоспособного диска на новый, сбросить метаданные RAID и добавить диск обратно для синхронизации. Проверьте /proc/mdstat, дождитесь завершения ресинхронизции и установите загрузчик (grub) на оба диска.

Тестирование и замена диска (пример)

Ниже показан пошаговый пример: в нём предполагается, что вышел из строя /dev/sdb. То же самое применимо и к /dev/sda — просто подставьте нужное имя устройства.

Чтобы смоделировать отказ диска, можно выключить систему и физически извлечь /dev/sdb, либо (soft-)удалить его программно:

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/sdb) и загрузите систему — она должна стартовать нормально.

Запустите:

cat /proc/mdstat

Вы увидите деградированный массив, например:

server1:~# cat /proc/mdstat  
Personalities : [raid1]  
md2 : active raid1 sda3[0]  
      5550336 blocks [2/1] [U_]  
  
md1 : active (auto-read-only) raid1 sda2[0]  
      497920 blocks [2/1] [U_]  
  
md0 : active raid1 sda1[0]  
      240832 blocks [2/1] [U_]  
  
unused devices:   
server1:~#

Проверка таблицы разделов:

fdisk -l

Ожидаемый вывод (пример):

server1:~# fdisk -l  
  
Disk /dev/sda: 6442 MB, 6442450944 bytes  
255 heads, 63 sectors/track, 783 cylinders  
Units = cylinders of 16065 * 512 = 8225280 bytes  
Disk identifier: 0x000740fc  
  
   Device Boot      Start         End      Blocks   Id  System  
/dev/sda1   *           1          30      240943+  fd  Linux raid autodetect  
/dev/sda2              31          92      498015   fd  Linux raid autodetect  
/dev/sda3              93         783     5550457+  fd  Linux raid autodetect  
  
Disk /dev/sdb: 6442 MB, 6442450944 bytes  
255 heads, 63 sectors/track, 783 cylinders  
Units = cylinders of 16065 * 512 = 8225280 bytes  
Disk identifier: 0x00000000  
  
Disk /dev/sdb doesn't contain a valid partition table  
  
Disk /dev/md0: 246 MB, 246611968 bytes  
2 heads, 4 sectors/track, 60208 cylinders  
Units = cylinders of 8 * 512 = 4096 bytes  
Disk identifier: 0x00000000  
  
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 identifier: 0x00000000  
  
Disk /dev/md1 doesn't contain a valid partition table  
  
Disk /dev/md2: 5683 MB, 5683544064 bytes  
2 heads, 4 sectors/track, 1387584 cylinders  
Units = cylinders of 8 * 512 = 4096 bytes  
Disk identifier: 0x00000000  
  
Disk /dev/md2 doesn't contain a valid partition table  
server1:~#

Теперь копируем таблицу разделов с /dev/sda на /dev/sdb:

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

Если появится ошибка, можно попробовать с опцией –force:

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: 783 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    481949     481887  fd  Linux raid autodetect  
/dev/sdb2        481950   1477979     996030  fd  Linux raid autodetect  
/dev/sdb3       1477980  12578894   11100915  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:~#

После этого очистите возможные остатки суперблоков 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]  
      5550336 blocks [2/1] [U_]  
      [====>................]  recovery = 23.2% (1288576/5550336) finish=1.1min speed=64428K/sec  
  
md1 : active raid1 sdb2[2] sda2[0]  
      497920 blocks [2/1] [U_]  
        resync=DELAYED  
  
md0 : active raid1 sdb1[1] sda1[0]  
      240832 blocks [2/2] [UU]  
  
unused devices:   
server1:~#

Дождитесь завершения синхронизации — в финале все массивы должны показывать [UU]:

server1:~# cat /proc/mdstat  
Personalities : [raid1]  
md2 : active raid1 sdb3[1] sda3[0]  
      5550336 blocks [2/2] [UU]  
  
md1 : active raid1 sdb2[1] sda2[0]  
      497920 blocks [2/2] [UU]  
  
md0 : active raid1 sdb1[1] sda1[0]  
      240832 blocks [2/2] [UU]  
  
unused devices:   
server1:~#

Наконец, установите загрузчик grub на оба HDD. Запустите grub и выполните команды:

grub

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

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

Готово — вы заменили сбойный диск в RAID1 и восстановили зеркалирование.

Краткая методология (шаги)

  1. Смоделировать отказ (fail/remove) или вынуть диск.
  2. Вставить новый диск и загрузить систему.
  3. Скопировать таблицу разделов sfdisk.
  4. Очистить суперблоки mdadm –zero-superblock.
  5. Добавить разделы в массив mdadm -a.
  6. Проверить /proc/mdstat и дождаться [UU].
  7. Установить grub на оба диска.

Чек-лист для оператора

  • Проверить текущее состояние md массивов: cat /proc/mdstat
  • Убедиться, что необходимый диск физически заменён и виден системой: fdisk -l
  • Корректно скопировать таблицу разделов: sfdisk -d /dev/sda | sfdisk /dev/sdb
  • Обнулить старые суперблоки: mdadm –zero-superblock
  • Добавить в массив и следить за прогрессом: cat /proc/mdstat
  • Установить grub на оба диска
  • Протоколировать время начала и завершения ресинхронизации

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

  • Все RAID-массивы отображают состояние [UU] в /proc/mdstat.
  • Данные монтируются и доступны без ошибок.
  • GRUB установлен на обоих физических дисках и система загружается, если вы отключаете один из них.

Когда описанный способ не сработает (ограничения и исключения)

  • Оба диска в массиве повреждены — требуется восстановление из бэкапа.
  • Различие в размерах/геометрии дисков: новый диск меньше оригинального — таблица разделов не встанет.
  • Иные типы RAID (RAID5/6) подразумевают другие действия и порядок операций.
  • Если используется LVM поверх RAID, дополнительно проверьте PV/VG/LPV.

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

  • Горячая замена (hot-swap) без выключения: fail/remove/zero-superblock/add выполняются пока система работает и контроллер поддерживает hot-swap.
  • Восстановление из бэкапа при полном выходе из строя обоих дисков.

Полезные команды проверки

  • Просмотр состояния: cat /proc/mdstat
  • Таблица разделов: fdisk -l или lsblk -f
  • Копирование таблицы: sfdisk -d /dev/sda | sfdisk /dev/sdb
  • Удаление метаданных RAID: mdadm –zero-superblock /dev/sdXN
  • Добавление в массив: mdadm -a /dev/mdX /dev/sdXN
  • Проверка логов: dmesg | tail, journalctl -e

Советы по безопасности и надёжности

  • Всегда имейте актуальную резервную копию перед операциями с разделами и RAID.
  • Убедитесь, что новые диски имеют достаточный размер и аналогичные характеристики.
  • Протоколируйте все действия и временные метки операций восстановления.

Ссылки

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

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

Google Assistant на Galaxy Watch 4 — как установить
умные часы

Google Assistant на Galaxy Watch 4 — как установить

Трассировка изображений в Illustrator
Графический Дизайн

Трассировка изображений в Illustrator

Отправка денег через Facebook Messenger
Руководство

Отправка денег через Facebook Messenger

Почему Nintendo Switch не включается — руководство
Гаджеты

Почему Nintendo Switch не включается — руководство

Точка доступа Wi‑Fi на iPhone и Android — настройка
Руководство

Точка доступа Wi‑Fi на iPhone и Android — настройка

Вернуть полную ёмкость SD‑карты Raspberry Pi
Руководство

Вернуть полную ёмкость SD‑карты Raspberry Pi