Настройка программного RAID1 на работающей системе LVM (включая конфигурацию GRUB) (Debian Etch)
Кратко: пошагово создаём зеркальные RAID1-разделы на втором жёстком диске, копируем на них данные с текущих разделов, собираем md-устройства и устанавливаем загрузчик GRUB на оба диска, чтобы система загружалась при отказе любого диска. Важно сделать полную резервную копию перед началом и тестировать процесс на ненужной машине, если возможно.
Введение
Эта инструкция объясняет, как настроить программный RAID1 на уже работающей системе с LVM (на примере Debian Etch). Цель — получить зеркальные /boot и LVM-разделы, а также настроить GRUB так, чтобы сервер загружался, если один из дисков выйдет из строя. Команды и подходы применимы и к более новым версиям Debian с незначительными изменениями.
Краткое определение терминов
- RAID1: зеркалирование — одинаковые данные на двух или более дисках.
- LVM: менеджер логических томов — абстрагирует физические диски в логические тома.
- mdadm: утилита управления программными RAID (md — multiple devices).
- GRUB: загрузчик, необходимый для старта ОС.
Важное: перед любыми операциями выполните полноценную резервную копию всех важных данных. Ошибка при работе с разделами, LVM или RAID может привести к потере данных.
Основная идея и последовательность действий
- Установить mdadm и необходимые инструменты initramfs.
- Подготовить второй диск (/dev/sdb): скопировать таблицу разделов, изменить тип разделов на raid autodetect, очистить возможные подписи RAID.
- Создать RAID-устройства (md) в режиме degraded или только на втором диске, скопировать содержимое с /dev/sda на /dev/sdb (для /boot — rsync/ dd /cpio; для LVM — pvcreate/ pvmove/ dd в зависимости от ситуации).
- Добавить /dev/sda в RAID-массивы и дождаться синхронизации.
- Обновить initramfs и установить GRUB на оба диска.
- Протестировать загрузку, отключая диски по очереди.
Примечание о разных подходах
- Подход «создать массив и затем скопировать данные» подходит для /boot. Для LVM можно использовать pvmove, если есть свободное место, или добавлять физические тома в volume group и мигрировать данные, затем уменьшить и создать RAID на физических разделах.
- В этой инструкции описан подход, при котором второй диск подготавливается, на нём создаются RAID-партиции, данные туда копируются, после чего создаётся полноценный RAID1.
Important: если вы не уверены в каждом шаге, остановитесь и спросите эксперта.
1 Предварительное примечание и исходное состояние
В примере используется Debian Etch и два одинаковых по размеру диска: /dev/sda (рабочий) и /dev/sdb (пустой).
Исходная разметка /dev/sda:
- /dev/sda1: /boot, ext3
- /dev/sda2: extended
- /dev/sda5: LVM (VG debian) — содержит root (/) и swap_1
Желаемый результат:
- /dev/md0 (из /dev/sda1 и /dev/sdb1): /boot, ext3
- /dev/md1 (из /dev/sda5 и /dev/sdb5): LVM (VG debian) — содержит / и swap_1
Приведённые далее выводы команд описывают исходное состояние системы (df -h, fdisk -l, pvdisplay, vgdisplay, lvdisplay). Эти данные используются как пример и не обязаны совпадать с вашей системой.
Выводы команд из примера оставлены без изменений и должны рассматриваться как образец.
2 Установка mdadm и загрузочных инструментов
Установите mdadm и initramfs-tools (пакет может называться initramfs-tools или initramfs-tools-bin в более новых дистрибутивах):
apt-get install initramfs-tools mdadmВо время установки вас спросят:
MD arrays needed for the root filesystem: <– all
Это указывает initramfs генерировать поддержку md-устройств для корневой файловой системы.
Чтобы избежать перезагрузки, загрузим необходимые модули ядра:
modprobe md
modprobe linear
modprobe multipath
modprobe raid0
modprobe raid1
modprobe raid5
modprobe raid6
modprobe raid10Проверьте доступные личности md:
cat /proc/mdstatОжидаемый вывод примерно такой:
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
unused devices: Если какие-то модули отсутствуют, убедитесь, что установлен пакет mdadm и что ядро поддерживает программные RAID.
3 Подготовка /dev/sdb (копирование таблицы разделов и настройка типов)
Цель: чтобы оба диска имели одинаковую разметку. Для этого можно клонировать таблицу разделов с /dev/sda на /dev/sdb:
sfdisk -d /dev/sda | sfdisk /dev/sdbПримечание: если sdb ранее не содержал таблицы или имел GPT, sfdisk может предупредить. Убедитесь, что вы клонируете именно правильный источник (/dev/sda). Также можно применять dd для копирования первой области, но sfdisk более безопасен для таблицы разделов MBR.
После клонирования проверьте разметку:
fdisk -lДалее измените тип нужных разделов на “Linux raid autodetect” (код fd). Для этого используйте fdisk:
fdisk /dev/sdbДалее: команда t → номер раздела (например, 1) → код fd → повторить для 5 → w (записать и выйти).
Проверьте снова:
fdisk -lОжидается, что /dev/sdb1 и /dev/sdb5 будут иметь тип fd (Linux raid autodetect).
Чтобы убрать возможные старые подписи RAID на разделах /dev/sdb:
mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdb5Если разделы не были частью массива, mdadm сообщит об этом, и это безопасно.
Important: не выполняйте операции записи на разделы, содержащие данные, если вы не уверены в их назначении.
4 Создание RAID для /boot и синхронизация /boot
Подход 1: создать массив degraded (с отсутствующим устройством) и скопировать содержимое с работающего раздела на второй член массива, затем добавить первый диск.
Создаём массив для /boot в режиме degraded (содержащий только /dev/sdb1, второй член будет добавлен позже):
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 missingПараметр missing говорит mdadm, что второй диск будет добавлен позднее. Опция –assume-clean не рекомендуема без полного понимания последствий; её использование могло бы избежать синхронизации, но рискует потерей данных.
Отформатируйте /dev/md0 как ext3 (или используемую вами файловую систему):
mkfs.ext3 /dev/md0Затем смонтируйте временно массив и скопируйте содержимое /boot в /dev/md0:
mount /dev/md0 /mnt
rsync -aHAX --delete /boot/ /mnt/rsync сохраняет права, ссылки и метаданные. Важно слеши: /boot/ → /mnt/.
После копирования проверьте, что файлы присутствуют на /mnt.
Далее обновите /etc/fstab: замените строку со старым /dev/sda1 на /dev/md0 (лучше указывать UUID; можно получить через blkid). Пример:
# заменить /dev/sda1 на /dev/md0
/dev/md0 /boot ext3 defaults 0 2Смонтируйте /boot из нового массива для проверки:
umount /mnt
mount /bootЕсли всё работает и /boot смонтирован с /dev/md0, можно добавить /dev/sda1 в массив и дождаться синхронизации:
mdadm --add /dev/md0 /dev/sda1
watch cat /proc/mdstatДождитесь окончания синхронизации (может занять время).
Important: не удаляйте /dev/sda1 и не форматируйте его до завершения синхронизации и проверки работоспособности.
5 Подготовка LVM на RAID (/dev/sda5 → /dev/md1)
Работа с LVM требует осторожности: если VG использует только /dev/sda5 как PV, прямое преобразование в md может приводить к недоступности LVs. Несколько подходов:
A) Лучший, если доступно место: создать новый PV на /dev/sdb5, добавить его в VG и выполнить pvmove для миграции данных, затем удалить старый PV и создать RAID на физических разделах.
B) Если нет возможности pvmove (VG заполнен), можно создать md1 в degraded режиме, скопировать побайтно PV или создать новый PV и восстановить/пересоздать LV, но это рискованно.
В примере ниже используется подход A — добавление /dev/sdb5 как PV и выполнение pvmove.
Создать PV на /dev/sdb5 и добавить в VG:
pvcreate /dev/sdb5
vgextend debian /dev/sdb5Проверьте свободное место в VG:
vgdisplay debianЕсли в VG появилось свободное место, выполните миграцию данных с /dev/sda5 на /dev/sdb5:
pvmove /dev/sda5 /dev/sdb5После успешного pvmove можно удалить PV /dev/sda5 из VG:
vgreduce debian /dev/sda5
pvremove /dev/sda5Теперь /dev/sda5 свободен — на нём можно создать RAID-устройство вместе с /dev/sdb5. Если вы полностью переместили данные на /dev/sdb5, вы можете создать массив с двумя членами: сначала создать md1 на /dev/sdb5 в режиме degraded, затем добавить /dev/sda5.
Создаём массив md1 (degraded, потому что /dev/sda5 временно пустой):
mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdb5 missingСоздаём PV на /dev/md1 и добавляем в VG, затем перемещаем данные с PV на md1 (если ещё не перенесены):
pvcreate /dev/md1
vgextend debian /dev/md1
pvmove /dev/sdb5 /dev/md1 # если необходимо переместить данныеЕсли данные уже на md1, то можно удалить /dev/sdb5 из VG и добавить /dev/sda5 затем запустить синхронизацию массива.
После того как PV на md1 содержит данные LVM, добавьте /dev/sda5 в массив:
mdadm --add /dev/md1 /dev/sda5
watch cat /proc/mdstatДождитесь завершения синхронизации.
Примечание: порядок и команды зависят от вашей конкретной топологии LVM. Если у вас единственный PV в VG, pvmove требует свободного PV для перемещения. В некоторых сценариях может потребоваться временный внешний диск для хранения данных на время миграции.
6 Сохранение конфигурации mdadm
После создания массивов зафиксируйте конфигурацию в /etc/mdadm/mdadm.conf (в старых системах — /etc/mdadm.conf) и обновите initramfs:
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
update-initramfs -uПроверьте файл /etc/mdadm/mdadm.conf и при необходимости отредактируйте уникальные идентификаторы (UUID).
7 Обновление и установка GRUB на оба диска
Чтобы система могла загрузиться при отказе любого диска, установите загрузчик GRUB в MBR обоих дисков:
- Примонтируйте все необходимые файловые системы (если вы меняли /boot):
mount -o remount,rw /
mount /boot- Обновите /boot/grub/menu.lst или /boot/grub/grub.cfg (в зависимости от версии GRUB) через update-grub или аналог:
update-grub- Установите GRUB на /dev/sda и на /dev/sdb:
Для GRUB (legacy) можно выполнить:
grub-install /dev/sda
grub-install /dev/sdbЕсли используете GRUB2:
grub-install --recheck /dev/sda
grub-install --recheck /dev/sdb- После установки перегенерируйте initramfs ещё раз (если необходимо):
update-initramfs -uImportant: на системах с BIOS загрузчик должен быть установлен в MBR каждого диска. На системах с UEFI подход отличается (EFI-разделы + копирование/настройка загрузчика на оба диска). Для UEFI убедитесь, что EFI-разделы дублируются и что bootloader установлен правильно.
8 Тестирование и проверка
- Проверьте состояние массивов:
cat /proc/mdstat
mdadm --detail /dev/md0
mdadm --detail /dev/md1Проверьте, что /boot и LV — доступны и содержат ожидаемые файлы.
Протестируйте загрузку в контролируемой среде: отключите кабель питания /dev/sda и попробуйте загрузиться. Затем повторите с /dev/sdb.
Если система успешно загружается в обоих случаях, настройка корректна.
9 Тонкости и распространённые проблемы
- Инициирование массивов без синхронизации (с –assume-clean) может привести к несогласованности данных. Используйте только при полном понимании ситуации.
- Если используете RAID1 для /boot, рекомендуется метаданные mdadm версии 0.90/1.0 (metadata 0.90) для совместимости с GRUB legacy; mdadm по умолчанию может использовать новую версию метаданных (1.x). На современных системах GRUB2 поддерживает загрузку с mdadm с метаданными 1.0+. Проверьте поддержку вашей версии GRUB.
- Для систем с GPT и BIOS-boot может потребоваться специальный BIOS boot раздел.
- На серверах с аппаратным RAID контроллером поведение и команды отличаются: не смешивайте программный mdadm с аппаратными RAID-массивами.
10 Контрпримеры — когда этот метод не подойдёт
- Если у вас недостаточно свободного места в LVM для pvmove, и нет внешнего диска для временного переноса данных.
- Если вы используете зашифрованный корень без поддержки множества вариантов в initramfs, потребуется специальная конфигурация initramfs для md и шифрования.
- Если диски имеют разные размеры и вы рассчитываете на полный зеркальный RAID, размер массива будет ограничен размером меньшего диска.
11 Восстановление и аварийный план (Runbook)
Если что-то пошло не так и система не загружается:
- Загрузитесь с liveCD/резервного носителя с поддержкой LVM и mdadm.
- Подключите диски в том же порядке и активируйте массивы:
mdadm --assemble --scan
vgscan --mknodes
vgchange -ay- Проверьте LVs и монтируйте корневую FS для диагностики:
mount /dev/debian/root /mnt
mount /dev/md0 /mnt/boot
chroot /mnt /bin/bash- Внутри chroot выполните update-grub и grub-install на необходимые устройства, затем exit и перезагрузка.
Если массив не собирается из-за отсутствия метаданных, воспользуйтесь mdadm –examine для диагностики и mdadm –assemble –force при крайней необходимости, но это рискованно.
12 Набор проверок перед завершением
- /etc/fstab указывает на /dev/md0 для /boot и правильно заданы UUID.
- /proc/mdstat показывает clean состояния md устройств.
- mdadm –detail подтверждает RAID1 с 2 активными устройствами.
- GRUB установлен на оба диска и конфигурация содержит нужные пункты загрузки.
13 Рекомендации по безопасности и резервному копированию
- Выполните полную резервную копию перед операциями с разделами и LVM.
- Тестируйте процедуру сначала в тестовой среде.
- Храните отдельный загрузочный носитель (LiveCD/USB) для восстановления.
14 Чек-лист ролей (администратор / оператор)
Администратор (планирование):
- Сделал полную резервную копию.
- Проверил совместимость GRUB и метаданных md.
- Подготовил временный носитель для восстановления.
Оператор (выполнение):
- Установил mdadm и модули ядра.
- Копировал таблицу разделов и изменил типы на fd.
- Создал md-устройства и скопировал /boot.
- Выполнил vgextend/pvmove/создание md для LVM.
- Установил GRUB на оба диска.
- Провёл тестовые перезагрузки с отключением дисков.
15 Критерии приёмки
- Система загружается при отключении любого из двух дисков.
- /boot находится на /dev/md0 и смонтирован.
- LVM видит тома и все сервисы работают штатно.
- mdadm конфигурация сохранена в /etc/mdadm/mdadm.conf и initramfs обновлён.
16 Дополнительные советы и лучшие практики
- Рассмотрите использование UUID в /etc/fstab вместо /dev/md0, чтобы избежать проблемы с порядком устройств.
- Для серверов в продакшене используйте мониторинг состояния RAID (mdadm –monitor) и уведомления по почте.
- Документируйте конфигурацию и процедуру восстановления для команды.
17 Частые вопросы и ответы
Q: Нужно ли использовать metadata=1.0 для /boot?
A: На старых системах GRUB legacy лучше работает с metadata 0.90/1.0; на современных системах GRUB2 поддерживает и новые версии метаданных. Проверяйте совместимость вашей версии GRUB.
Q: Можно ли выполнить всё без перезагрузки?
A: Большинство операций можно делать на работающей системе, но финальное тестирование загрузки потребует перезагрузки.
Q: Что делать, если mdadm не распознаёт устройства при старте?
A: Убедитесь, что /etc/mdadm/mdadm.conf содержит правильные строки mdadm –detail –scan и что initramfs обновлён.
18 Риск-матрица (основные риски и смягчение)
Риск: потеря данных при ошибочном форматировании.
Смягчение: полная резервная копия, тестирование на небоевом сервере.Риск: несовместимость GRUB и метаданных.
Смягчение: проверить версию GRUB, использовать поддерживаемую версию metadata.Риск: отсутствие свободного места для pvmove.
Смягчение: использовать временный диск или переносить данные по частям.
19 Итог
Настройка программного RAID1 на уже работающей системе с LVM требует аккуратного планирования, резервного копирования и понимания LVM и mdadm. Процесс включает подготовку второго диска, создание md-устройств (в degraded режиме при необходимости), копирование данных, миграцию LVM и установку GRUB на оба диска. Тестирование загрузки после каждой значимой операции — обязательная практика.
Summary
- Создайте резервную копию.
- Подготовьте второй диск: скопируйте таблицу разделов и установите тип fd.
- Создайте md-устройства и синхронизируйте /boot и LVM.
- Установите GRUB на оба диска и протестируйте загрузку.
Примечание: приведённая инструкция описывает общий рабочий процесс; конкретные команды и параметры могут отличаться в зависимости от версии Debian, GRUB и конфигурации LVM. При сомнениях обратитесь к официальной документации mdadm, LVM и GRUB.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента