Как создать RAID1 на существующей системе CentOS/RedHat 6.0
TL;DR
Кратко: сделайте полный бэкап, создайте на второй диске такие же разделы, соберите degraded RAID1 с помощью mdadm, отобразите конфигурацию в /etc/mdadm.conf, пересоздайте initramfs, смонтируйте md-устройства и скопируйте данные. Установите загрузчик на оба диска и обновите /etc/fstab и /boot/grub/menu.lst. Тестируйте загрузку с отключённого диска перед вводом в эксплуатацию.
Автор: Maurice Hilarius — Hard Data Ltd. — 12 октября 2011
Короткое определение: RAID1 — зеркалирование блоков между дисками для отказоустойчивости и чтения с двух источников.
О чём эта инструкция
Пошаговое руководство по превращению одно-дисковой системы CentOS/RedHat 6 в зеркальный массив RAID1 без переустановки ОС. Пояснения для GRUB 0.97 (стандартный для CentOS 6) и использования mdadm/dracut.
Важно: все команды выполняйте под root.
su - (введите пароль root)
Исходная конфигурация (пример)
В примере у нас исходно был диск /dev/sdb с ОС («оригинал»). Мы добавляем новый диск /dev/sda («целевой»).
Таблица разделов (пример):
Device Mountpoint Size
/dev/sdb ~1002GB
/dev/sdb1 /boot 256MB
/dev/sdb2 / 24GB
/dev/sdb3 swap 4GB
/dev/sdb5 /var 4GB
/dev/sdb6 /home ~900GB
Мы будем копировать данные на зеркальные md-устройства, затем установить загрузчик и переключить систему на RAID.
Требования и подготовка
- Полный бэкап — сохраните данные вне машины.
- Убедитесь в работоспособности бэкапа.
- Второй физический диск должен быть как минимум такого же размера или больше.
Important: без резервной копии вы рискуете потерять данные при ошибке.
Шаги
1) Создание идентичных разделов на целевом диске
Снимите схему разделов с текущего диска и примените её к новому:
sfdisk -d /dev/sdb | sfdisk /dev/sda
Это создаст на /dev/sda такие же разделы, как на /dev/sdb. Проверьте fdisk -l или lsblk после команды.
2) Подгрузка модулей ядра (чтобы не перезагружать систему)
modprobe linear
modprobe raid0
modprobe raid1
Проверьте:
cat /proc/mdstat
Ожидаемый пример:
Personalities : [linear] [multipath] [raid0] [raid1]
unused devices:
Это значит, что модули доступны, но массивов ещё нет.
3) Создание degraded RAID1 (второй диск помечен как missing)
Создайте md-устройства для каждого раздела, где один участник отсутствует (мы собираем зеркала, ожидая второй диск):
mdadm --create /dev/md0 --level=1 --raid-disks=2 /dev/sda1 missing
mdadm --create /dev/md1 --level=1 --raid-disks=2 /dev/sda2 missing
mdadm --create /dev/md2 --level=1 --raid-disks=2 /dev/sda5 missing
mdadm --create /dev/md3 --level=1 --raid-disks=2 /dev/sda6 missing
Примечание по GRUB 0.97: если вы используете GRUB legacy (стандарт в CentOS 6), указывайте метаданные 0.90, иначе GRUB может не распознать раздел при установке. Пример:
mdadm --create /dev/md0 --metadata=0.90 --level=1 --raid-devices=2 /dev/sda1 missing
4) Проверка статуса md
cat /proc/mdstat
Пример вывода (degraded, т.е. массивы созданы, но один участник missing):
Personalities : [raid1]
md1 : active raid1 sdb2[1]
473792 blocks [2/2] [U_]
md2 : active raid1 sdb5[1]
4980032 blocks [2/2] [U_]
md3 : active raid1 sdb6[1]
3349440 blocks [2/2] [U_]
md0 : active raid1 sdb1[1]
80192 blocks [2/2] [U_]
unused devices:
Буква U в статусе означает «включён», подчёркнутое место — отсутствующий (missing) диск.
5) Сохранение конфигурации mdadm
mdadm --detail --scan > /etc/mdadm.conf
Проверьте содержимое:
cat /etc/mdadm.conf
Внизу файла должны быть строки с UUID ваших md-устройств. Это необходимо, чтобы initramfs знал о RAID при загрузке.
6) Пересборка initramfs с учётом mdadm.conf
Переименуйте старый initramfs и создайте новый, включающий конфигурацию mdadm:
mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.old
dracut --mdadmconf --force /boot/initramfs-$(uname -r).img $(uname -r)
Это сделает образ, который умеет собирать массивы во время ранней загрузки.
7) Создание файловых систем на md-устройствах
mkfs.ext2 /dev/md0 # для /boot ext2 / ext2 совместим с GRUB
mkfs.ext4 /dev/md1 # для / (root)
mkfs.ext4 /dev/md2 # для /var или /home (пример)
mkfs.ext4 /dev/md3
mkswap -c /dev/sda2 # проверка и создание swap на целевом диске
Примечание: mkswap на /dev/sda2 создаёт swap на целевом диске; аналогично настройте swap на втором участнике массива при необходимости.
8) Копирование данных на md-устройства
Создайте точку монтирования и копируйте содержимое по разделам.
/boot:
mkdir /mnt/raid
mount /dev/md0 /mnt/raid
cd /boot; find . -depth | cpio -pmd /mnt/raid
Если используется SELinux, создайте автопересборку меток:
touch /mnt/raid/.autorelabel
Затем:
sync
umount /mnt/raid
root (/):
mount /dev/md1 /mnt/raid
cd / ; find . -depth -xdev | grep -v '^\./tmp/' | cpio -pmd /mnt/raid
sync
umount /mnt/raid
Важно: не копируйте временные файлы из /tmp и /var/tmp. Команда выше исключает /tmp.
/var и /home:
mount /dev/md2 /mnt/raid
cd /var; find . -depth | cpio -pmd /mnt/raid
sync
umount /mnt/raid
mount /dev/md3 /mnt/raid
cd /home; find . -depth | cpio -pmd /mnt/raid
sync
umount /mnt/raid
9) Обновление /etc/fstab и /boot/grub/menu.lst
- В /etc/fstab замените старые /dev/sdbX на /dev/mdX или, предпочтительнее, на UUID ваших md-устройств. Для поиска UUID используйте blkid или ls -l /dev/disk/by-uuid.
- В /boot/grub/menu.lst (GRUB legacy) убедитесь, что в kernel line указан root=/dev/md1 (или UUID). Также скопируйте актуальный /boot/grub/menu.lst на новый /dev/md0.
Пример строки для /etc/fstab:
/dev/md1 / ext4 defaults 1 1
/dev/md2 /var ext4 defaults 1 2
/dev/md3 /home ext4 defaults 1 2
/dev/md0 /boot ext2 defaults 1 2
Проверяйте и корректируйте в соответствии с вашей разметкой и требованиями.
10) Установка загрузчика на оба диска
Чтобы загрузка работала при отказе одного диска, установите GRUB на оба физических диска:
grub-install /dev/sda
grub-install /dev/sdb
Если команда не найдена или поведение отличается, используйте интерактивный grub (legacy):
grub
> root (hd1,0)
> setup (hd1)
> quit
где (hd1,0) соответствует разделу /boot на втором диске. Точная нумерация зависит от вашей системы. Всегда проверяйте man grub-install и существующую конфигурацию GRUB.
11) Добавление второго диска в массив (если ещё не добавлен)
Когда вы готовы, добавьте оригинальные разделы (с /dev/sdbX) в массивы, чтобы началась синхронизация:
mdadm --add /dev/md0 /dev/sdb1
mdadm --add /dev/md1 /dev/sdb2
mdadm --add /dev/md2 /dev/sdb5
mdadm --add /dev/md3 /dev/sdb6
Проверьте статус синхронизации:
cat /proc/mdstat
Синхронизация может занять длительное время — зависит от объёма данных и скорости дисков.
12) Тестирование загрузки
- Перезагрузите систему нормально и убедитесь в успешной загрузке.
- Из BIOS выберите в качестве первичного устройства второй диск и перезагрузите.
- Если возможно, оторвите физически один из дисков (в безопасной среде) и проверьте, что система продолжает загружаться.
Important: выполняйте тесты в контролируемой среде, чтобы избежать простоя в продакшне.
Устранение проблем и советы
- GRUB говорит «Filesystem type unknown, partition type 0xfd» — используйте –metadata=0.90 при создании mdmd для совместимости с GRUB legacy.
- Initramfs не видит md-устройства — убедитесь, что /etc/mdadm.conf содержит актуальные UUID и пересоберите initramfs (dracut –mdadmconf –force).
- Если копирование файлов нарушило права или SELinux метки, создайте /mnt/raid/.autorelabel и перезагрузите для автоматического восстановления меток.
Когда это не сработает:
- Если диск-источник имеет нестандартную разметку (LVM поверх разделов, нестандартные RAID/кеширующие контроллеры), процедура требует адаптации.
- Аппаратные RAID-контроллеры с прозрачностью предоставляют свои средства; описанный метод предназначен для программного mdadm RAID.
Критерии приёмки
- Все целевые md-устройства присутствуют и синхронизированы (cat /proc/mdstat показывает [UU]).
- /etc/fstab и /boot/grub/menu.lst указывают на md-устройства или UUID.
- GRUB установлен на обоих физических дисках.
- Система успешно загружается при отключении любого из дисков.
Плейбук: краткий чеклист для администратора
- Резервная копия — выполнена и проверена.
- Клонирование разделов sfdisk.
- Подгрузка модулей raid.
- Создание degraded md-устройств (mdadm).
- Сохранение /etc/mdadm.conf и пересборка initramfs.
- Создание файловых систем и копирование данных.
- Обновление /etc/fstab и /boot/grub/menu.lst.
- Установка GRUB на оба диска.
- Добавление второго участника и ожидание синхронизации.
- Полное тестирование загрузки.
Краткое окружное руководство по откату
- Если что-то пошло не так, восстановите /boot и корень с бэкапа.
- Если initramfs повреждён, верните старый файл /boot/initramfs-$(uname -r).img.old и перезагрузитесь.
- Если GRUB не загружается, используйте Live-образ для восстановления GRUB и копирования /boot.
Итог
Преобразование одно-дисковой CentOS/RedHat 6 в RAID1 возможно без переустановки. Ключевые шаги — идентичная разметка, создание degraded массивов, сохранение mdadm.conf, пересборка initramfs, копирование данных и установка загрузчика на оба диска. Всегда имейте актуальные бэкапы и тестируйте отказоустойчивость перед вводом в продуктив.
Notes: пример команд и разметки основан на типичных системах CentOS/RedHat 6. В сложных конфигурациях (LVM, шифрование, аппаратные контроллеры) потребуются дополнительные шаги.
Похожие материалы

Как работать на iPhone в дороге

Аннотирование PDF бесплатно без водяных знаков

Как поставить своё фото профиля в Netflix

Удаление аккаунта eBay — инструкция
