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

Настройка программного RAID1 на работающей системе, включая конфигурацию GRUB

• 6 min read • Linux • Обновлено 20 Nov 2025
Настройка программного RAID1 на работающей системе
Настройка программного RAID1 на работающей системе

Коротко: пошагово превращаем однодисковую Mandriva 2008.0 в зеркальный (RAID1) массив без остановки сервиса. Подготовим второй диск, создадим деградированные массивы на новом диске, скопируем данные, добавим старые разделы в массивы, обновим /etc/fstab, mdadm.conf и установим GRUB в MBR обоих дисков. Выполняйте резервные копии перед началом.

Введение

В этом руководстве показано, как настроить программный RAID1 на уже работающей системе Mandriva 2008.0 и сделать так, чтобы GRUB мог загрузить систему при выходе из строя любого из физических дисков. Процедура одинаково применима к другим дистрибутивам семейства RPM с небольшими отличиями команд для создания initramfs и установки загрузчика.

Важно: я не гарантирую успешность для вашей конкретной конфигурации. Всегда имейте свежую резервную копию.

Основная идея в двух строках

  1. Клонируем таблицу разделов и готовим второй диск к RAID.
  2. Создаём деградированные RAID1-массивы на новом диске, копируем данные, затем добавляем в них разделы старого диска. Обновляем конфигурацию загрузки и initramfs и устанавливаем GRUB на оба диска.

Предварительное замечание (исходная конфигурация)

В примере используется система с двумя жесткими дисками: /dev/hda и /dev/hdb одинакового объёма. /dev/hdb сейчас пустой, а /dev/hda имеет разметку:

  • /dev/hda1: /boot, ext3
  • /dev/hda5: swap
  • /dev/hda6: /, ext3

Конечная цель:

  • /dev/md0 = /dev/hda1 + /dev/hdb1 -> /boot (ext3)
  • /dev/md1 = /dev/hda5 + /dev/hdb5 -> swap
  • /dev/md2 = /dev/hda6 + /dev/hdb6 -> / (ext3)

Текущая ситуация (пример вывода):

df -h
[root@server1 ~]# df -h  
Filesystem            Size  Used Avail Use% Mounted on  
/dev/hda6             4.4G  757M  3.4G  18% /  
/dev/hda1             168M  8.5M  151M   6% /boot  
[root@server1 ~]#
fdisk -l
[root@server1 ~]# fdisk -l  
  
Disk /dev/hda: 5368 MB, 5368709120 bytes  
255 heads, 63 sectors/track, 652 cylinders  
Units = cylinders of 16065 * 512 = 8225280 bytes  
Disk identifier: 0x00000000  
  
   Device Boot      Start         End      Blocks   Id  System  
/dev/hda1   *           1          22      176683+  83  Linux  
/dev/hda2             23         652     5060475    5  Extended  
/dev/hda5             23          74      417658+  82  Linux swap / Solaris  
/dev/hda6             75         652      4642753+  83  Linux  
  
Disk /dev/hdb: 5368 MB, 5368709120 bytes  
16 heads, 63 sectors/track, 10402 cylinders  
Units = cylinders of 1008 * 512 = 516096 bytes  
Disk identifier: 0x00000000  
  
Disk /dev/hdb doesn't contain a valid partition table  
[root@server1 ~]#

Шаг 1. Установка mdadm и модулей ядра

Установим инструмент для управления ПО RAID и утилиту для пересоздания initramfs:

urpmi mdadm mkinitrd

Подгружаем модули ядра, чтобы не перезагружать систему:

modprobe linear
modprobe multipath
modprobe raid0
modprobe raid1
modprobe raid5
modprobe raid6
modprobe raid10

Проверяем статус md-устройств:

cat /proc/mdstat

Ожидаемый вывод (модули видны как личности):

[root@server1 ~]# cat /proc/mdstat  
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]  
unused devices:   
[root@server1 ~]#

Important: модуль raid1 обязателен. Если в выводе нет raid1, проверьте имя модуля и загрузите его вручную.

Шаг 2. Подготовка /dev/hdb (клонирование разметки и метки RAID)

Копируем таблицу разделов с /dev/hda на /dev/hdb так, чтобы физические диски имели одинаковую разметку:

sfdisk -d /dev/hda | sfdisk --force /dev/hdb

Пример вывода команды приведён ниже; он показывает, что таблица успешно записана.

[root@server1 ~]# sfdisk -d /dev/hda | sfdisk --force /dev/hdb  
Checking that no-one is using this disk right now ...  
OK  
  
Disk /dev/hdb: 10402 cylinders, 16 heads, 63 sectors/track  
  
sfdisk: ERROR: sector 0 does not have an msdos signature  
 /dev/hdb: unrecognized partition table type  
Old situation:  
No partitions found  
Warning: extended partition does not start at a cylinder boundary.  
DOS and Linux will interpret the contents differently.  
New situation:  
Units = sectors of 512 bytes, counting from 0  
  
   Device Boot    Start       End   #sectors  Id  System  
/dev/hdb1   *        63    353429     353367  83  Linux  
/dev/hdb2        353430  10474379   10120950   5  Extended  
/dev/hdb3             0         -          0   0  Empty  
/dev/hdb4             0         -          0   0  Empty  
/dev/hdb5        353493   1188809     835317  82  Linux swap / Solaris  
/dev/hdb6       1188873  10474379    9285507  83  Linux  
Warning: partition 1 does not end at a cylinder boundary  
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 ~]#

Проверим итоговую разметку командой fdisk -l — оба диска должны иметь одинаковые разделы.

Далее меняем тип разделов на втором диске на “Linux raid autodetect” (hex code fd):

fdisk /dev/hdb

В интерактивном режиме используйте команду t, укажите номер раздела (1, 5, 6) и код fd. Затем w для сохранения.

После этого очищаем возможные старые superblocks от предыдущих установок RAID:

mdadm --zero-superblock /dev/hdb1
mdadm --zero-superblock /dev/hdb5
mdadm --zero-superblock /dev/hdb6

Если superblock отсутствует, mdadm сообщит об ошибке “Unrecognised md component device” — это нормально.

Шаг 3. Создание деградированных RAID1-массивов на новом диске

Подход: создаём массивы RAID1 с одним присутствующим участником — разделом на новом диске. Массив будет в состоянии DEGRADED, но на нём можно создать файловую систему и скопировать данные. После копирования мы добавим в массив соответствующие разделы старого диска и дождёмся синхронизации.

Создаём /dev/md0 для /boot (на примере):

mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/hdb1 missing

Форматируем и монтируем:

mkfs.ext3 /dev/md0
mount /dev/md0 /mnt/mdboot
mount /dev/hda1 /mnt/oldboot
cp -a /mnt/oldboot/. /mnt/mdboot/

После копирования проверяем права и содержимое. Затем отмонтируем и добавим первый диск в массив:

umount /mnt/oldboot
umount /mnt/mdboot
mdadm --add /dev/md0 /dev/hda1

Для swap создаём массив, включаем swap и затем добавляем старую swap-разметку:

mdadm --create --verbose /dev/md1 --level=1 --raid-devices=2 /dev/hdb5 missing
mkswap /dev/md1
swapon /dev/md1
mdadm --add /dev/md1 /dev/hda5

Для корневого раздела создаём /dev/md2, копируем корневую FS с исключениями и затем добавляем старый раздел:

mdadm --create --verbose /dev/md2 --level=1 --raid-devices=2 /dev/hdb6 missing
mkfs.ext3 /dev/md2
mount /dev/md2 /mnt/newroot
rsync -aAXHv --exclude={'/proc/*','/sys/*','/dev/*','/tmp/*','/run/*','/mnt/*','/media/*'} / /mnt/newroot

После копирования исправьте в /mnt/newroot/etc/fstab все упоминания /dev/hda1, /dev/hda5, /dev/hda6 на /dev/md0, /dev/md1, /dev/md2 или используйте UUIDы, полученные через blkid. Затем выполните:

umount /mnt/newroot
mdadm --add /dev/md2 /dev/hda6

Примечание: при копировании корневой файловой системы рекомендуется выполнить процедуру из срочного режима (single-user) или с минимальным количеством активных процессов, чтобы избежать изменения файлов во время копирования.

Шаг 4. Обновление конфигурации системы

  1. Сгенерируйте текущую конфигурацию mdadm и сохраните её:
mdadm --detail --scan >> /etc/mdadm.conf

Если в вашей системе файл называется /etc/mdadm/mdadm.conf — используйте его.

  1. Обновите /etc/fstab. Пример строк:
/dev/md0   /boot   ext3   defaults   1 2
/dev/md1   none    swap   sw         0 0
/dev/md2   /       ext3   defaults   1 1

Для большей надёжности используйте UUID вместо /dev/mdX: найдите UUID командой blkid /dev/md0.

  1. Пересоберите initramfs, чтобы ядро умело собирать массивы до монтирования корня. В Mandriva используется mkinitrd; выполните:
mkinitrd -f /boot/initrd- 

Либо используйте утилиту, специфичную для дистрибутива, и убедитесь, что в initramfs включены модули raid и mdadm.

Шаг 5. Установка GRUB в MBR обоих дисков

Чтобы система могла загрузиться с любого диска, установите загрузчик GRUB в MBR обоих дисков.

Если у вас имеется утилита grub-install (GRUB 1/legacy или 2 в зависимости от дистрибутива), выполните:

grub-install /dev/hda
grub-install /dev/hdb

Если используется старый GRUB (legacy) без grub-install, можно войти в grub-прошку и явно установить MBR:

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

Проверьте конфигурацию /boot/grub/menu.lst (или /boot/grub/grub.conf) и убедитесь, что корневой раздел указан корректно (ссылка на /dev/md2 или UUID).

После установки GRUB рекомендуется протестировать загрузку, поочерёдно отключая диски (физически или через BIOS) и проверяя, что система стартует с оставшегося диска.

Проверка и тестирование

  1. Убедитесь, что все массивы синхронизировались:
cat /proc/mdstat
mdadm --detail /dev/md0
mdadm --detail /dev/md1
mdadm --detail /dev/md2
  1. Перезагрузите систему и проверьте корректность загрузки.
  2. Проведите тест отказа: выключите или отсоедините /dev/hda и загрузитесь с /dev/hdb. Затем проделайте обратную операцию.

Important: выполняйте тест в контролируемой среде. На продуктивных машинах сначала протестируйте на стенде.

Возвратный план (rollback)

  • Если после создания массивов появились серьёзные проблемы, можно остановить md-устройства:
mdadm --stop /dev/md0
mdadm --stop /dev/md1
mdadm --stop /dev/md2
  • Восстановите /etc/fstab и MBR из резервных копий и перезагрузите с оригинального диска.

SOP / Контрольный список (роль-ориентированный)

Для администратора перед началом:

  • Сделать полную резервную копию / и /boot.
  • Захватить копию таблицы разделов: sfdisk -d /dev/hda > hda.partition.backup
  • Убедиться в наличии свободного второго диска равного или большего размера.

В процессе миграции:

  • Установить mdadm и mkinitrd.
  • Скопировать таблицу разделов.
  • Изменить тип разделов на fd.
  • Очистить возможные superblocks.
  • Создать деградированные массивы на новом диске.
  • Копировать /boot и /, создать swap на md.
  • Обновить mdadm.conf и /etc/fstab.
  • Пересобрать initramfs и установить GRUB на оба диска.

После миграции:

  • Проверить /proc/mdstat и mdadm –detail.
  • Тестировать загрузку с каждого диска в отдельности.
  • Настроить мониторинг и оповещения о состоянии RAID.

Риски и меры смягчения

  • Риск: потеря данных при ошибке копирования. Мера: полная резервная копия перед началом.
  • Риск: неправильная запись таблицы разделов. Мера: сохранить sfdisk-дамп и иметь доступ к среде восстановления.
  • Риск: initramfs не собирает md-модули и система не загружается. Мера: проверить содержимое initramfs и иметь LiveCD/Rescue для исправления.

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

  • Все массивы находятся в состоянии clean и имеют два участника.
  • Система успешно загружается с /dev/hda и с /dev/hdb по отдельности.
  • /etc/fstab и /etc/mdadm.conf обновлены и корректно ссылаются на md-устройства.
  • После перезагрузки initramfs собирает и монтирует массивы без ошибок.

Краткий глоссарий (1 строка на термин)

  • RAID1: зеркалирование данных между двумя дисками для отказоустойчивости.
  • mdadm: утилита для управления программными RAID-массивами в Linux.
  • initramfs / initrd: временная файловая система, загружаемая ядром, содержит модули для монтирования корня.
  • MBR: главный загрузочный сектор диска.

Часто встречующиеся ошибки и когда метод не подойдёт

  • Если второй диск меньше по объёму, чем исходный, простой метод клонирования таблицы и создания RAID не сработает. В таком случае нужно переразбивать и переносить данные выборочно.
  • На системах с UEFI и GPT вместо MBR требуется адаптация: в GPT нужно создать отдельный ESP и установить GRUB в EFI.
  • Если корень зашифрован (LUKS), процедура усложняется: необходимо работать с LVM/LUKS поверх md или наоборот — адаптировать порядок инициализации.

Итог

Настройка программного RAID1 на живой системе — выполнимая и безопасная задача при наличии резервных копий и поэтапного подхода. Вкратце: подготовьте второй диск, создайте деградированные RAID-тома на новом диске, скопируйте данные, добавьте старые разделы, обновите конфигурации и установите загрузчик на оба диска.

Summary

  • Подготовка и резервное копирование обязательны.
  • Применяйте деградированные массивы для безостановочной миграции.
  • Обновите mdadm.conf, /etc/fstab и пересоберите initramfs.
  • Установите GRUB в MBR обоих дисков и протестируйте отказоустойчивость.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

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

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро