Настройка программного RAID1 на работающей системе, включая конфигурацию GRUB
Коротко: пошагово превращаем однодисковую Mandriva 2008.0 в зеркальный (RAID1) массив без остановки сервиса. Подготовим второй диск, создадим деградированные массивы на новом диске, скопируем данные, добавим старые разделы в массивы, обновим /etc/fstab, mdadm.conf и установим GRUB в MBR обоих дисков. Выполняйте резервные копии перед началом.
Введение
В этом руководстве показано, как настроить программный RAID1 на уже работающей системе Mandriva 2008.0 и сделать так, чтобы GRUB мог загрузить систему при выходе из строя любого из физических дисков. Процедура одинаково применима к другим дистрибутивам семейства RPM с небольшими отличиями команд для создания initramfs и установки загрузчика.
Важно: я не гарантирую успешность для вашей конкретной конфигурации. Всегда имейте свежую резервную копию.
Основная идея в двух строках
- Клонируем таблицу разделов и готовим второй диск к RAID.
- Создаём деградированные 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. Обновление конфигурации системы
- Сгенерируйте текущую конфигурацию mdadm и сохраните её:
mdadm --detail --scan >> /etc/mdadm.confЕсли в вашей системе файл называется /etc/mdadm/mdadm.conf — используйте его.
- Обновите /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.
- Пересоберите 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) и проверяя, что система стартует с оставшегося диска.
Проверка и тестирование
- Убедитесь, что все массивы синхронизировались:
cat /proc/mdstat
mdadm --detail /dev/md0
mdadm --detail /dev/md1
mdadm --detail /dev/md2- Перезагрузите систему и проверьте корректность загрузки.
- Проведите тест отказа: выключите или отсоедините /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 обоих дисков и протестируйте отказоустойчивость.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента