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

Как настроить программный RAID1 на работающей системе включая конфигурацию GRUB (CentOS 5.3)

• 8 min read • Linux • Обновлено 18 Nov 2025
Настройка программного RAID1 на CentOS 5.3
Настройка программного RAID1 на CentOS 5.3

  • Пошагово: скопируйте таблицу разделов на второй диск, подготовьте разделы к RAID, создайте/соберите массивы md, синхронизируйте данные, обновите /etc/fstab и /etc/mdadm.conf, пересоберите initrd с поддержкой RAID и установите GRUB в MBR обоих дисков. Проверяйте /proc/mdstat и тестируйте загрузку с каждого диска.
  • В статье приведены две безопасные методики (создать массив на втором диске или на первом), команды для CentOS 5.3, сценарии отката и чек‑листы для ролей.

Введение

Эта инструкция объясняет, как добавить программный RAID1 (зеркалирование) на уже работающий сервер под CentOS 5.3 и настроить загрузчик GRUB так, чтобы система продолжала загружаться, если выйдет из строя любой из дисков. Пример основан на системе с двумя жёсткими дисками /dev/sda и /dev/sdb одинакового объёма.

Важно: прежде чем действовать, сделайте полную резервную копию важных данных. Описанные шаги широко применимы, но могут потребовать адаптации под вашу конфигурацию.

Краткое определение терминов

  • RAID1: зеркалирование — каждый блок данных записывается на оба диска; при отказе одного диск остаётся работоспособным.
  • mdadm: утилита управления программным RAID в Linux.
  • initrd / initramfs: образ начального RAM‑диска, используемый загрузчиком для загрузки ядра с поддержкой нужных модулей (например, RAID).

Исходная ситуация (пример)

В примере у нас:

  • /dev/sda: основной диск, уже содержит систему; разделы:
    • /dev/sda1 — /boot, ext3
    • /dev/sda2 — swap
    • /dev/sda3 — /, ext3
  • /dev/sdb: второй диск того же размера, пока неиспользуемый

Выводы команд в примере (для ориентира):

df -h
[root@server1 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3             9.1G  1.1G  7.6G  12% /
/dev/sda1             190M   12M  169M   7% /boot
tmpfs                 252M     0  252M   0% /dev/shm
[root@server1 ~]#
fdisk -l
[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   83  Linux
/dev/sda2             26          90      522112+  82  Linux swap / Solaris
/dev/sda3             91        1305     9759487+  83  Linux

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
[root@server1 ~]#

1 Установка необходимых пакетов и модулей

  1. Установите mdadm и mkinitrd (для CentOS 5 используется mkinitrd):
yum install -y mdadm mkinitrd
  1. Подгрузите модули ядра (чтобы не перезагружаться сразу):
modprobe linear
modprobe multipath
modprobe raid0
modprobe raid1
modprobe raid5
modprobe raid6
modprobe raid10
  1. Проверьте статус RAID‑подсистемы:
cat /proc/mdstat

Ожидаемый вывод: «Personalities : … [raid1]» и «unused devices: ».

Примечание: перечисленные модули не создают массивы — они лишь загружают поддержку RAID в ядро.

2 Подготовка второго диска (/dev/sdb)

Шаги:

  1. Скопируйте таблицу разделов с /dev/sda на /dev/sdb, чтобы диски имели одинаковый layout:
sfdisk -d /dev/sda | sfdisk /dev/sdb
  1. Проверьте результат:
fdisk -l
  1. Измените тип разделов на Linux raid autodetect (код fd):
fdisk /dev/sdb
# внутри fdisk: t, 1, fd  ; t, 2, fd  ; t, 3, fd  ; w
  1. Очистите возможные старые RAID‑суперблоки на разделах /dev/sdb:
mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdb2
mdadm --zero-superblock /dev/sdb3

Если разделы раньше не были частью md‑массива, mdadm сообщит «Unrecognised md component device», это нормально.

Важно: если у вас LVM на разделе /dev/sda3 — план действий меняется (см. раздел «Альтернативные подходы»).

3 Стратегии создания RAID на работающей системе

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

Стратегия A — создать массивы на пустом диске /dev/sdb как «degraded», скопировать данные с /dev/sda в md‑устройства, затем добавить /dev/sda в массив. Плюсы: минимальный риск повредить текущую систему, можно тестировать перед переключением. Минус: требуется временное место для создания массивов на /dev/sdb.

Стратегия B — создать массивы, используя существующие разделы /dev/sda как первый компонент, а /dev/sdb добавить как второй. Это быстрее и экономит место, но более рискованно при ошибках ввода/вывода.

Ниже подробно описана Стратегия A (безопасная), затем кратко — Стратегия B.

3.1 Стратегия A (рекомендуется для работающего сервера)

  1. Создаём «degraded» RAID1 из одного активного устройства (sdbX) с меткой missing, чтобы получить /dev/md0, /dev/md1, /dev/md2 на основе sdb:
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 missing
mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdb2 missing
mdadm --create /dev/md2 --level=1 --raid-devices=2 /dev/sdb3 missing

Примечание: тут мы используем sdb как «первичный» носитель массива, второй слот пока пуст (missing). Массивы будут в состоянии degraded, но функциональны.

  1. Отформатируйте /dev/md0 и /dev/md2 и подготовьте swap:
mkfs.ext3 /dev/md0
mkfs.ext3 /dev/md2
mkswap /dev/md1
  1. Смонтируйте md‑устройства во временные каталоги и скопируйте данные с /dev/sdaX на /dev/mdX
mount /dev/md2 /mnt/mdroot
mkdir /mnt/mdroot/boot
mount /dev/md0 /mnt/mdroot/boot

# используйте rsync чтобы сохранить права и ссылки
rsync -aHAX --numeric-ids --exclude=/proc --exclude=/sys --exclude=/dev/pts --exclude=/mnt --exclude=/tmp / /mnt/mdroot/

# включите swap
swapon /dev/md1

Важно: rsync запускайте от root, убедитесь, что вы исключаете каталоги виртуальной FS (/proc, /sys) и монтированные точки.

  1. Обновите /mnt/mdroot/etc/fstab, заменив ссылки на /dev/sda на /dev/md или лучше — на UUID md‑устройств. Пример (внутри /mnt/mdroot/etc/fstab):
/dev/md2  /      ext3 defaults 1 1
/dev/md0  /boot  ext3 defaults 1 2
/dev/md1  swap   swap defaults 0 0
  1. Создайте конфигурацию mdadm на основной системе (в корневой fs, не в /mnt):
mdadm --detail --scan >> /etc/mdadm.conf

Затем перенесите аналогичный файл в новое корневое /mnt/mdroot/etc/mdadm.conf или создайте вручную там на основе вывода.

  1. Пересоберите initrd для текущего ядра, чтобы включить поддержку RAID и mdadm конфигурацию, но лучше пересобрать initrd также внутри новой системы (в /mnt/mdroot). На CentOS 5 пример команды:
# для текущего работающего ядра
mkinitrd --preload=raid1 /boot/initrd-$(uname -r).img $(uname -r)

# и для системы в /mnt (если нужно chroot):
chroot /mnt/mdroot mkinitrd --preload=raid1 /boot/initrd-$(uname -r).img $(uname -r)

Примечание: опции mkinitrd могут отличаться в зависимости от версии; –preload=raid1 часто используется, чтобы явно включить модуль raid1.

  1. Установите GRUB в MBR обоих дисков, чтобы при падении одного диск мог загружать систему. Для Legacy GRUB (CentOS 5):
# создаём device.map, если нужно
# echo "(hd0) /dev/sda" > /boot/grub/device.map
# echo "(hd1) /dev/sdb" >> /boot/grub/device.map

# устанавливаем GRUB на sda и sdb
grub-install /dev/sda
grub-install /dev/sdb

Если grub-install недоступен или вызывает ошибки, можно запустить grub в интерактивном режиме и выполнить root (hd0,0); setup (hd0) для каждого диска.

  1. Проверьте конфигурацию /boot/grub/grub.conf (в корневой и в /mnt/mdroot), убедитесь, что root= указывает на корректный md‑устройство или UUID. Для совместимости можно указывать root=/dev/md2.

  2. Синхронизируйте массивы: добавьте разделы /dev/sdaX в массивы md. Пока массивы содержат только sdb, поэтому вы добавляете sda как второй член:

mdadm --add /dev/md0 /dev/sda1
mdadm --add /dev/md1 /dev/sda2
mdadm --add /dev/md2 /dev/sda3

Смотрите прогресс синхронизации:

watch -n1 cat /proc/mdstat
  1. Когда синхронизация закончена и вы уверены, что /etc/fstab и GRUB настроены, перезагрузите систему и протестируйте загрузку с основного и запасного диска (см. раздел «Тестирование»).

3.2 Стратегия B (создать массив на sda и добавить sdb)

Если вы готовы рисковать меньше времени, можно собрать массивы на основе /dev/sda и затем добавить /dev/sdb:

mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda1 missing
# Но это удалит данные на /dev/sda1 если вы укажете явно создание поверх существующей FS

Поэтому Стратегия B требует предварительного бэкапа и внимания: создание массива поверх существующего раздела уничтожит FS. Этот путь подходит, если у вас отдельные резервные копии и вы можете восстановить систему.

4 Обновление конфигураций и сборка initrd

  1. Убедитесь, что /etc/mdadm.conf создан и содержит запись scan. Пример:
ARRAY /dev/md0 level=1 num-devices=2 UUID=...  # output of mdadm --detail --scan
ARRAY /dev/md1 level=1 num-devices=2 UUID=...
ARRAY /dev/md2 level=1 num-devices=2 UUID=...
  1. Пересоберите initrd для каждого загружаемого ядра, чтобы образ содержал mdadm и нужные модули:
# для текущего ядра
mkinitrd --preload=raid1 --preload=md_mod /boot/initrd-$(uname -r).img $(uname -r)
  1. Проверьте /boot/grub/grub.conf: параметры kernel должны ссылаться на правильный root (обычно /dev/md2). Если вы используете UUID, убедитесь, что initrd может распознать md‑масивы до монтирования корня.

5 Установка GRUB и проверка загрузки

  1. Установите GRUB в MBR обоих дисков:
grub-install /dev/sda
grub-install /dev/sdb
  1. Альтернативный способ — интерактивный grub:
grub
# в prompt grub>
# grub> root (hd0,0)
# grub> setup (hd0)
# grub> root (hd1,0)
# grub> setup (hd1)
# grub> quit
  1. Тестирование загрузки:
  • Перезагрузите систему обычным образом — убедитесь, что загрузка проходит нормально.
  • Отключите (или симулируйте отказ) одного из дисков в контроллере/BIOS и попробуйте загрузиться с другого. Если GRUB установлен правильно на обоих дисках и initrd содержит поддержку md, система должна загрузиться.

Важно: тестирование на production должно происходить в плановое окно с откатом.

6 Проверки и отладка

Полезные команды для проверки состояния:

cat /proc/mdstat
mdadm --detail /dev/md0
mdadm --examine /dev/sda1
mdadm --examine /dev/sdb1
mount | grep md
blkid

Проверяйте синхронизацию массива через /proc/mdstat и логи (dmesg, /var/log/messages).

7 Откат и аварийное восстановление

Если что‑то пошло не так:

  1. Если массивы были созданы на sdb и вы ещё не удалили оригинальные данные на sda, можно:
  • размонтировать md‑устройства
  • вернуть систему на /dev/sda, откатив /etc/fstab к предыдущему состоянию
  • удалить md‑устройства: mdadm –stop /dev/mdX ; mdadm –remove /dev/mdX ; mdadm –zero-superblock /dev/sdbX
  1. Если GRUB перестал загружаться с одного диска, установите grub на другой рабочий диск и проверьте device.map. Можно использовать rescue‑CD для восстановления MBR и grub.conf.

  2. Если initrd не содержит RAID‑поддержки, загрузитесь с rescue‑CD или в режим восстановления, смонтируйте корень и пересоберите initrd с mkinitrd.

8 Тесты приёмки

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

  • Система загружается нормально с обоих дисков по очереди (выключая один диск аппаратно или через BIOS).
  • /proc/mdstat показывает все массивы в состоянии clean и синхронизированные.
  • Данные на корне и в /boot совпадают с контрольной копией (проверка md5sum для критичных файлов).

Тестовые случаи:

  • Перезагрузка с отключённым /dev/sda: система должна загрузиться с /dev/sdb.
  • Перезагрузка с отключённым /dev/sdb: система должна загрузиться с /dev/sda.
  • Проверка синхронизации: после восстановления добавленного диска mdadm начинает ресинхронизацию.

9 Чек‑листы по ролям

Администратор (sysadmin):

  • Сделать полную резервную копию.
  • Скопировать таблицу разделов и изменить тип на fd.
  • Создать md‑устройства в degraded состоянии.
  • Ручная проверка /etc/fstab и /boot/grub/grub.conf.
  • Установить GRUB на оба диска.
  • Провести тесты загрузки.

Оператор бэкапов:

  • Проверить доступность и корректность резервов перед началом работ.
  • Провести дополнительные контрольные бэкапы после создания массивов.

QA / тестировщик:

  • Валидировать целостность данных после rsync.
  • Выполнить сценарии отказа и восстановления.

10 Полезная сводка команд (Cheat sheet)

Создание degraded массива на sdb:

mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 missing
mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdb2 missing
mdadm --create /dev/md2 --level=1 --raid-devices=2 /dev/sdb3 missing

Форматирование и копирование:

mkfs.ext3 /dev/md0
mkfs.ext3 /dev/md2
mkswap /dev/md1
mount /dev/md2 /mnt/mdroot
mount /dev/md0 /mnt/mdroot/boot
rsync -aHAX --numeric-ids --exclude=/proc --exclude=/sys --exclude=/dev/pts --exclude=/mnt --exclude=/tmp / /mnt/mdroot/

Добавление оригинальных разделов в массив:

mdadm --add /dev/md0 /dev/sda1
mdadm --add /dev/md1 /dev/sda2
mdadm --add /dev/md2 /dev/sda3
watch -n1 cat /proc/mdstat

Создание mdadm.conf и пересборка initrd:

mdadm --detail --scan >> /etc/mdadm.conf
mkinitrd --preload=raid1 /boot/initrd-$(uname -r).img $(uname -r)

Установка GRUB в MBR обоих дисков:

grub-install /dev/sda
grub-install /dev/sdb

Остановка и удаление md‑массива (откат):

umount /mnt/mdroot/boot
umount /mnt/mdroot
mdadm --stop /dev/md2
mdadm --remove /dev/md2
mdadm --zero-superblock /dev/sdb3

11 Когда этот метод не годится и альтернативы

Когда метод не подходит:

  • Если на /dev/sda используется LVM поверх раздела — требуется специальная последовательность: сначала зеркалить PV в LVM через pvcreate/pvchange и vgconvert, либо использовать LVM‑зеркала.
  • Если на дисках используется GPT/EFI (CentOS 5 ориентирован на BIOS/MBR), инструкции будут отличаться: потребуется подготовить EFI System Partition и использовать grub‑efi или grub2.
  • Если у вас более двух дисков и сложные политики (RAID10, RAID6) — подходы и расчёты иные.

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

  • Использовать аппаратный RAID-контроллер (HW RAID) — менее гибко, но может быть проще при массовом развёртывании.
  • ZFS/RAIDZ или Btrfs — файловые системы с встроенным уровнем данных и репликацией (потребуют другой процедуры и, возможно, другой дистрибутив/ядро).

12 Советы по безопасности и производительности

  • Проверяйте SMART‑статус дисков (smartctl) до и после операций.
  • Не запускайте синхронизацию массивов при сильной нагрузке I/O; планируйте окно обслуживания.
  • Убедитесь, что диск для зеркала (/dev/sdb) той же или большей ёмкости.

13 Итог и рекомендации

Ключевые шаги: скопировать таблицу разделов, подготовить второй диск, создать degraded массивы, аккуратно перенести данные, обновить конфигурации, пересобрать initrd и установить GRUB в MBR обоих дисков. Тщательно тестируйте загрузку с каждого диска и имейте актуальные бекапы.

Важно: на CentOS 5.3 используются устаревшие инструменты и legacy GRUB; адаптируйте команды для вашей версии системы и используемых модулей.

Факт блок

  • Пример в статье использует диски ~10.7 GB (фрагмент вывода fdisk).
  • Разделы: /dev/sdX1 /boot, /dev/sdX2 swap, /dev/sdX3 корень.

Ресурсы для дальнейшего чтения

  • man mdadm
  • документация CentOS по mkinitrd и grub

Краткое резюме

  • Настройка программного RAID1 на работающем сервере возможна без простоев при аккуратном последовательном выполнении шагов.
  • Предпочтительна безопасная стратегия: создать degraded массивы на пустом диске, скопировать данные и затем добавить исходный диск.
  • Обязательно обновите initrd и установите GRUB на оба диска.

Дополнительно: если нужно, могу добавить конкретный сценарий полностью воспроизводимый для вашей текущей раскладки разделов (пришлите output fdisk -l и /etc/fstab).

Поделиться: 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 быстро