Как настроить программный RAID1 на работающей системе включая конфигурацию GRUB (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 Установка необходимых пакетов и модулей
- Установите mdadm и mkinitrd (для CentOS 5 используется mkinitrd):
yum install -y mdadm mkinitrd- Подгрузите модули ядра (чтобы не перезагружаться сразу):
modprobe linear
modprobe multipath
modprobe raid0
modprobe raid1
modprobe raid5
modprobe raid6
modprobe raid10- Проверьте статус RAID‑подсистемы:
cat /proc/mdstatОжидаемый вывод: «Personalities : … [raid1]» и «unused devices:
Примечание: перечисленные модули не создают массивы — они лишь загружают поддержку RAID в ядро.
2 Подготовка второго диска (/dev/sdb)
Шаги:
- Скопируйте таблицу разделов с /dev/sda на /dev/sdb, чтобы диски имели одинаковый layout:
sfdisk -d /dev/sda | sfdisk /dev/sdb- Проверьте результат:
fdisk -l- Измените тип разделов на Linux raid autodetect (код fd):
fdisk /dev/sdb
# внутри fdisk: t, 1, fd ; t, 2, fd ; t, 3, fd ; w- Очистите возможные старые 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 (рекомендуется для работающего сервера)
- Создаём «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, но функциональны.
- Отформатируйте /dev/md0 и /dev/md2 и подготовьте swap:
mkfs.ext3 /dev/md0
mkfs.ext3 /dev/md2
mkswap /dev/md1- Смонтируйте 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) и монтированные точки.
- Обновите /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- Создайте конфигурацию mdadm на основной системе (в корневой fs, не в /mnt):
mdadm --detail --scan >> /etc/mdadm.confЗатем перенесите аналогичный файл в новое корневое /mnt/mdroot/etc/mdadm.conf или создайте вручную там на основе вывода.
- Пересоберите 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.
- Установите 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) для каждого диска.
Проверьте конфигурацию /boot/grub/grub.conf (в корневой и в /mnt/mdroot), убедитесь, что root= указывает на корректный md‑устройство или UUID. Для совместимости можно указывать root=/dev/md2.
Синхронизируйте массивы: добавьте разделы /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- Когда синхронизация закончена и вы уверены, что /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
- Убедитесь, что /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=...- Пересоберите initrd для каждого загружаемого ядра, чтобы образ содержал mdadm и нужные модули:
# для текущего ядра
mkinitrd --preload=raid1 --preload=md_mod /boot/initrd-$(uname -r).img $(uname -r)- Проверьте /boot/grub/grub.conf: параметры kernel должны ссылаться на правильный root (обычно /dev/md2). Если вы используете UUID, убедитесь, что initrd может распознать md‑масивы до монтирования корня.
5 Установка GRUB и проверка загрузки
- Установите GRUB в MBR обоих дисков:
grub-install /dev/sda
grub-install /dev/sdb- Альтернативный способ — интерактивный grub:
grub
# в prompt grub>
# grub> root (hd0,0)
# grub> setup (hd0)
# grub> root (hd1,0)
# grub> setup (hd1)
# grub> quit- Тестирование загрузки:
- Перезагрузите систему обычным образом — убедитесь, что загрузка проходит нормально.
- Отключите (или симулируйте отказ) одного из дисков в контроллере/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 Откат и аварийное восстановление
Если что‑то пошло не так:
- Если массивы были созданы на sdb и вы ещё не удалили оригинальные данные на sda, можно:
- размонтировать md‑устройства
- вернуть систему на /dev/sda, откатив /etc/fstab к предыдущему состоянию
- удалить md‑устройства: mdadm –stop /dev/mdX ; mdadm –remove /dev/mdX ; mdadm –zero-superblock /dev/sdbX
Если GRUB перестал загружаться с одного диска, установите grub на другой рабочий диск и проверьте device.map. Можно использовать rescue‑CD для восстановления MBR и grub.conf.
Если 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/sdb311 Когда этот метод не годится и альтернативы
Когда метод не подходит:
- Если на /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).
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента