Настройка программного RAID1 на работающей системе (Fedora 8)
Краткие определения
- RAID1 — зеркалирование: все данные пишутся одновременно на оба диска; при выходе одного диска система остаётся работоспособной. Одношаговое описание: дублирование с повышенной отказоустойчивостью.
- mdadm — утилита управления программными RAID (Linux software RAID).
- GRUB — загрузчик; для отказоустойчивости его обычно устанавливают на оба диска.
Предупреждение
Эти инструкции изменяют таблицы разделов, создают RAID и перезаписывают загрузчики. Всегда делайте резервную копию важных данных перед началом. Я не даю гарантий, что процедура сработает на вашей конфигурации — используйте её осознанно.
1 Введение и цель
В примере используется Fedora 8 с двумя жёсткими дисками: /dev/sda (в работе) и пустым /dev/sdb одинакового размера. Текущая разметка на /dev/sda:
- /dev/sda1: /boot, ext3
- /dev/sda2: swap
- /dev/sda3: / (root), ext3
Конечная цель:
- /dev/md0 = /dev/sda1 + /dev/sdb1 → /boot (ext3)
- /dev/md1 = /dev/sda2 + /dev/sdb2 → swap
- /dev/md2 = /dev/sda3 + /dev/sdb3 → / (ext3)
Ниже приводится расширённая, адаптированная версия последовательных шагов.
2 Предварительные проверки
- Убедитесь, что диски одинакового или совместимого размера.
- Получите текущую разметку:
fdisk -l(В оригинале вывод df -h и fdisk -l показан для примера.)
Важно: не перепутайте /dev/sda и /dev/sdb — ошибочный dd или запись таблицы разделов приведёт к потере данных.
3 Установка инструментов и загрузка модулей
Установите mdadm и mkinitrd, если они ещё не установлены:
yum install mkinitrd mdadmЧтобы не перезагружать систему, загрузите модули ядра, которые понадобятся для работы с md:
modprobe linear
modprobe multipath
modprobe raid0
modprobe raid1
modprobe raid5
modprobe raid6
modprobe raid10Проверьте состояние md-ядра:
cat /proc/mdstatОжидаемый пример вывода показан в исходном руководстве; если устройства не перечислены, это нормально — пока массивов нет.
4 Подготовка /dev/sdb: копирование разметки и пометка как RAID
- Скопируйте таблицу разделов с /dev/sda на /dev/sdb:
sfdisk -d /dev/sda | sfdisk /dev/sdbЭто создаст на /dev/sdb такие же разделы, как на /dev/sda. После успешного выполнения проверьте результат:
fdisk -l- На /dev/sdb измените тип разделов на “Linux raid autodetect” (hex-код fd) с помощью fdisk:
fdisk /dev/sdbВ интерактивном меню используйте команды t для каждого раздела и введите код fd, затем w для записи. В примере это было выполнено для /dev/sdb1, /dev/sdb2 и /dev/sdb3.
- На всякий случай очистите возможные суперблоки старых RAID:
mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdb2
mdadm --zero-superblock /dev/sdb3Если на диске не было компонентов RAID, mdadm сообщит: “Unrecognised md component device” — это нормальное сообщение.
Important: Не выполняйте шаги ниже, если хотите остановиться — любое некорректное действие с таблицей разделов вредно.
5 Создание деградированных массивов на /dev/sdb и перенос данных
Идея: сначала создаём массивы RAID1, состоящие только из /dev/sdb и состояния “missing” — такие массивы называются деградированными. На них копируем данные с текущего /dev/sda, затем добавляем /dev/sda в массив как второй участник, и запустим восстановление (resync).
- Создайте раздел /boot как RAID1 (деградированный):
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 missing- Форматируйте /dev/md0 и смонтируйте его временно:
mkfs.ext3 /dev/md0
mkdir -p /mnt/mdboot
mount /dev/md0 /mnt/mdboot- Скопируйте содержимое /boot на новое зеркало:
cp -a /boot/* /mnt/mdboot/
sync(Альтернатива: rsync -aHAX /boot/ /mnt/mdboot/ для более точного копирования атрибутов.)
- Для swap создайте RAID-массив и включите swap на md:
mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdb2 missing
mkswap /dev/md1
swapon /dev/md1- Для корневого раздела (root) создайте массив, смонтируйте его и скопируйте файловую систему:
mdadm --create /dev/md2 --level=1 --raid-devices=2 /dev/sdb3 missing
mkfs.ext3 /dev/md2
mkdir -p /mnt/mdroot
mount /dev/md2 /mnt/mdrootДля копирования корня используйте один из следующих вариантов:
Вариант A (рекомендуется): rsync — сохраняет права, ссылки, спец-файлы:
rsync -aHAX --exclude='/proc/*' --exclude='/sys/*' --exclude='/dev/*' --exclude='/mnt/*' / /mnt/mdroot/Вариант B: tar — надёжный перенос
cd /
( tar cpf - . --one-file-system --exclude=./proc --exclude=./sys --exclude=./dev --exclude=./mnt ) | (cd /mnt/mdroot && tar xpf - )После копирования проверьте, что /mnt/mdroot содержит те же каталоги, что и /.
- Обновите /mnt/mdroot/etc/fstab: замените старые устройства (/dev/sda1, /dev/sda2, /dev/sda3) на /dev/md0, /dev/md1, /dev/md2 соответственно или — лучше — используйте UUID/имена устройств по /dev/mdX. Пример строк для /etc/fstab:
/dev/md2 / ext3 defaults 1 1
/dev/md0 /boot ext3 defaults 1 2
/dev/md1 swap swap defaults 0 0Важно: правьте файл внутри /mnt/mdroot.
- Обновите /mnt/mdroot/etc/mdadm.conf: добавьте определения массивов, чтобы при загрузке initramfs мог собрать массивы. Сгенерируйте текущую конфигурацию и добавьте в файл:
mdadm --detail --scan >> /mnt/mdroot/etc/mdadm.conf(Проверьте содержимое файла и при необходимости отредактируйте.)
6 Пересборка initramfs (initrd)
Чтобы загружать корень с md-устройств, нужно, чтобы initramfs содержал поддержку md. В Fedora 8 используйте mkinitrd, выполняя эту команду на работающей системе (или в chroot):
mkinitrd --with=raid1 /boot/initrd-$(uname -r)-md.img $(uname -r)Примечание: синтаксис mkinitrd может различаться; если ваш mkinitrd не поддерживает ключ –with, используйте варианты вашей системы или создайте initrd через dracut (если доступно).
После создания нового initrd проверьте, что в /boot присутствуют нужные файлы, и что /mnt/mdboot (ваш /boot) содержит конфигурацию GRUB и kernel + initrd файлы.
7 Установка GRUB на оба диска и обновление загрузчика
Для отказоустойчивости нужно установить загрузчик GRUB в MBR обоих дисков — на /dev/sda и /dev/sdb.
- Установите GRUB на /dev/sdb (и на /dev/sda, если ещё не установлен на обоих):
# Пример запуска grub в интерактивном режиме
grub
# внутри grub>
root (hd0,0)
setup (hd0)
setup (hd1)
quitИли используйте grub-install (если доступно):
grub-install /dev/sda
grub-install /dev/sdb- Убедитесь, что /boot/grub/grub.conf (или /boot/grub/menu.lst) присутствует и указывает на правильные устройства (обычно root=/dev/md2). Пример строки ядра:
kernel /vmlinuz-<версия> root=/dev/md2 ro rhgb quiet
initrd /initrd-<версия>.imgЕсли вы использовали UUID или LABEL, обновите командную строку ядра соответствующим образом.
Important: Проверьте, что файл grub.conf, размещённый в /dev/md0 (смонтирован в /mnt/mdboot), содержит необходимые записи.
8 Добавление исходного диска /dev/sda в массивы и синхронизация
Когда данные успешно скопированы на md-устройства, можно добавить /dev/sdaN в массивы и запустить реконструкцию:
mdadm --add /dev/md0 /dev/sda1
mdadm --add /dev/md1 /dev/sda2
mdadm --add /dev/md2 /dev/sda3Проверьте прогресс синхронизации:
watch -n 1 cat /proc/mdstatСинхронизация может занять продолжительное время — зависит от объёма данных и скорости дисков.
9 Проверка загрузки с резервного диска (тест отказа)
- Чтобы проверить, что система загрузится при выходе одного из дисков, можно эмулировать отказ: отключите физически диск (или отключите его в BIOS/виртуальной машине) и попробуйте перезагрузиться.
- Если система загружается нормально, значит GRUB на оставшемся диске корректно настроен и массив собирается.
- После восстановления диска добавьте его обратно и дождитесь resync.
Notes: Тестирование следует проводить в безопасной среде — заранее подготовьте план отката.
10 Что делать при проблемах с загрузкой
- Загрузитесь с LiveCD/Rescue и соберите массивы вручную:
mdadm --assemble --scan
mount /dev/md2 /mnt/sysroot
mount /dev/md0 /mnt/sysroot/boot
chroot /mnt/sysroot /bin/bash- В chroot пересоздайте initrd и переустановите GRUB на оба диска, как описано выше.
11 Когда этот подход не подходит (контрпримеры)
- Несовместимость по размеру дисков: если второй диск существенно меньше — разметка не скопируется.
- Специальные файловые системы или LVM: если корень использует LVM или шифрование, требуется отдельная адаптация (надо зеркалить PV/создать LVM на md или использовать LVM-RAID).
- Сложные конфигурации загрузчика (EFI/GPT): Fedora 8 использует BIOS/GRUB legacy; для современных EFI-систем процедура другая.
12 Альтернативные подходы
- Использовать LVM с зеркалированием (lvconvert –type raid1) на более новых дистрибутивах.
- Аппаратный RAID контроллер — если доступен и требуется прозрачная зеркальность без участия ОС.
- Создать новое зеркало на новой системе и переключиться на него полностью (миграция с помощью rsync и перенастройки).
13 Быстрый чеклист для администратора
- Сделана полная резервная копия важных данных
- Тестовая машина / окно обслуживания
- Установлены mdadm и mkinitrd
- Таблица разделов скопирована на /dev/sdb
- Типы разделов на /dev/sdb установлены как fd
- Созданы деградированные md-устройства на /dev/sdb
- Скопирован /boot и корневые данные на md
- Обновлён /etc/fstab и /etc/mdadm.conf (в новом корне)
- Пересобран initrd с поддержкой md
- GRUB установлен в MBR обоих дисков
- /dev/sda добавлен в массивы, выполнен resync
- Проведён тест отказа и восстановление
14 Критерии приёмки
- Система успешно загружается с любого из дисков при отключении другого.
- md-устройства в состоянии clean и синхронизованы (cat /proc/mdstat показывает [UU] для RAID1).
- /etc/fstab и /etc/mdadm.conf корректно настроены и сохранены.
- Initramfs содержит поддержку md и собирает массивы на ранней стадии загрузки.
15 Шпаргалка команд
- Просмотр состояния: cat /proc/mdstat
- Создать массив: mdadm –create /dev/mdX –level=1 –raid-devices=2 /dev/sdbN missing
- Добавить диск: mdadm –add /dev/mdX /dev/sdaN
- Очистить суперблок: mdadm –zero-superblock /dev/sdXN
- Сохранить конфигурацию: mdadm –detail –scan >> /etc/mdadm.conf
- Пересоздать initrd: mkinitrd [варианты]
- Установить GRUB: grub-install /dev/sdX или через интерактивный grub
16 Короткая методология (5 шагов)
- Подготовить второй диск: скопировать таблицу и пометить разделы как RAID.
- Создать деградированные md-устройства на втором диске.
- Скопировать /boot и / на md-устройства.
- Пересобрать initrd и установить GRUB на оба диска.
- Добавить исходный диск в массивы и дождаться resync; протестировать отказ.
17 Рекомендации по безопасности и приватности
Содержимое /boot и корня остаётся доступно локально; при копировании не пересылайте данные на непроверенные внешние носители. Для зашифрованного root нужно адаптировать процедуру (зеркалирование LUKS/ключей требует осторожности).
18 Заключение
Переход существующей установки на программный RAID1 возможен без простоя, если аккуратно выполнить копирование таблицы разделов, создать деградированные md-массивы, перенести данные, пересобрать initramfs и установить GRUB на оба диска. Обязательно проведите тест отказа и убедитесь, что все конфиги сохранены.
Краткое руководство в 3 шага: подготовка диска → создание деградированных массивов и копирование → установка GRUB и добавление второго участника.
[root@server1 ~]# mdadm --zero-superblock /dev/sdb1
mdadm: Unrecognised md component device - /dev/sdb1
[root@server1 ~]#(Пример вывода, иллюстрирующий, что отсутствие суперблока — нормально.)
Похожие материалы
Herodotus: механизм и защита Android‑трояна
Включить новое меню «Пуск» в Windows 11
Панель полей сводной таблицы в Excel — руководство
Включить новое меню «Пуск» в Windows 11
Дубликаты Диспетчера задач в Windows 11 — как исправить