Как настроить программный RAID1 на работающей системе LVM (включая настройку GRUB2) (Debian Squeeze)
Кратко
В этом руководстве описан безопасный способ добавить программный RAID1 на уже работающую систему с LVM (Debian Squeeze) и настроить GRUB2 так, чтобы система могла загрузиться при выходе из строя любого диска. Приведён пошаговый план, проверки, резервные сценарии и чек-листы для администратора. Перед началом сделайте полную резервную копию важных данных.
Введение
Это руководство объясняет, как настроить программный RAID1 на уже работающей системе с LVM (Debian Squeeze). Загрузчик GRUB2 будет настроен так, чтобы система оставалась загружаемой при отказе любого из дисков (независимо от того, какой диск выйдет из строя).
Я не даю гарантии, что это идеально работает в вашей среде — тестируйте на небоевых системах и имейте резервные копии.
В этом документе:
- Понятное объяснение, почему и когда стоит переводить LVM на RAID1.
- Пошаговая инструкция с командной строкой для подготовки свободного второго диска (/dev/sdb).
- Как создать RAID-устройства (/dev/md0 для /boot и /dev/md1 для LVM), не перезагружая систему.
- Как обновить mdadm.conf, initramfs и GRUB2 и проверить загрузку.
- Сценарии восстановления при отказе диска и чек-листы для разных ролей.
Важно: все команды выполняйте от root пользователя. Перед выполнением — полная резервная копия.
H1 — краткая цель статьи (единичный заголовок)
H2: Что даёт настройка RAID1 для LVM и GRUB2
RAID1 зеркалирует данные на два диска в реальном времени. Преимущества:
- Устойчивость к отказу диска: если один диск выйдет из строя, система остаётся работоспособной.
- Быстрое восстановление: заменив диск и дав зеркалу восстановиться, вы вернёте полную избыточность.
- GRUB2 на обоих дисках обеспечивает возможность загрузки, даже если MBR/таблица разделов одного диска повреждена.
Коротко: RAID1 обеспечивает доступность, но не является заменой резервного копирования.
H2: Термины (1‑строчные определения)
- RAID1: зеркалирование двух и более устройств; данные дублируются.
- mdadm: утилита для управления программными RAID (Linux MD RAID).
- LVM: логический менеджер томов — слой абстракции над физическими разделами.
- GRUB2: загрузчик, используемый для старта Linux.
- PV/VG/LV: физический том, группа томов и логический том в LVM.
H2: Исходная конфигурация (пример из источника)
В примере используется Debian Squeeze с двумя идентичными дисками:
- /dev/sda — рабочий диск, содержит:
- /dev/sda1 — раздел /boot (ext2)
- /dev/sda5 — LVM PV, VG server1, содержит root и swap
- /dev/sdb — свободен, будет использован для создания зеркала.
Пример вывода команд с сервера (для ориентира):
df -hПримерный вывод:
root@server1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/server1-root
4.5G 720M 3.6G 17% /
tmpfs 249M 0 249M 0% /lib/init/rw
udev 244M 104K 244M 1% /dev
tmpfs 249M 0 249M 0% /dev/shm
/dev/sda1 228M 16M 201M 8% /boot
root@server1:~#fdisk -l(В исходном примере показан вывод fdisk -l, pvdisplay, vgdisplay, lvdisplay. Сохраните результаты этих команд — они пригодятся при диагностике.)
H2: Подготовка: установка mdadm и загрузка модулей
Утилита mdadm нужна для работы с программными RAID. Установим её (и initramfs-tools, если ещё не установлены):
apt-get install initramfs-tools mdadmПосле установки загрузите модули ядра, чтобы не перезагружать систему:
modprobe linear
modprobe multipath
modprobe raid0
modprobe raid1
modprobe raid5
modprobe raid6
modprobe raid10Проверьте доступные персональности md:
cat /proc/mdstatОжидаемый результат должен содержать [raid1] и т. п.:
root@server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
unused devices:
root@server1:~# Важно: если в /proc/mdstat уже есть активные массивы, убедитесь, что их состояние нормальное.
H2: Шаг 1 — подготовка второго диска (/dev/sdb)
- Скопируйте таблицу разделов с /dev/sda на /dev/sdb, чтобы диски имели одинаковую схему:
sfdisk -d /dev/sda | sfdisk --force /dev/sdbПроверьте
fdisk -l— у вас должны быть одинаковые разделы на /dev/sda и /dev/sdb.Измените тип разделов на /dev/sdb1 и /dev/sdb5 на “Linux raid autodetect” (тип fd):
fdisk /dev/sdb
# внутри fdisk: t, 1, fd ; t, 5, fd ; w- Убедитесь, что изменения применились:
fdisk -l- Очистите возможные старые RAID-суперблоки (если они есть):
mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdb5Если предыдущих метаданных не было, mdadm сообщит «Unrecognised md component device…» — это нормально.
H2: Шаг 2 — создать зеркальный раздел /boot на свободном диске и перенести туда данные
Подход: сначала создать зеркало только на /dev/sdb (degraded array с missing), смонтировать массив, скопировать данные /boot в новое зеркало, затем добавить /dev/sda1 в массив и дать ему синхронизироваться. Такой подход минимизирует риск повреждения работающего раздела /dev/sda1.
- Создаём массив /dev/md0 для /boot (degraded — только /dev/sdb1):
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 missingПримечание: если у вас старая версия mdadm и вы хотите совместимость с initramfs/GRUB, можно указывать –metadata=0.90. Современные версии работают с метаданными по умолчанию.
- Создаём файловую систему ext2 (как было на /dev/sda1):
mkfs.ext2 /dev/md0- Монтируем новый /boot и копируем содержимое старого:
mkdir /mnt/newboot
mount /dev/md0 /mnt/newboot
cp -ax /boot/. /mnt/newboot/Опция -a сохраняет права и атрибуты; -x избегает перескока на другие файловые системы.
- Измените /etc/fstab, чтобы /dev/md0 (лучше — по UUID) монтировался как /boot. Получите UUID:
lkid /dev/md0
Отредактируйте /etc/fstab, заменив /dev/sda1 на UUID для /dev/md0.
- Смонтируйте новую точку /boot:
umount /mnt/newboot
mount /bootИли перезагрузите, если вы предпочитаете.
Проверьте, что в /boot находятся ожидаемые файлы (vmlinuz, initrd.img, grub и т.д.).
Теперь можно добавить /dev/sda1 в массив /dev/md0 (это запустит синхронизацию):
mdadm --add /dev/md0 /dev/sda1Проверьте прогресс синхронизации:
watch -n1 cat /proc/mdstatH2: Шаг 3 — создать RAID для LVM (перенос PV в зеркало) — безопасный метод
Цель: не разрушать существующий LVM на /dev/sda5, а создать зеркало на /dev/sdb5, подключить его к VG и выполнить pvmove, затем добавить /dev/sda5 в RAID и дать массиву завершить синхронизацию.
- Создаём массив /dev/md1 (degraded) только с /dev/sdb5:
mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdb5 missing- Создаём на /dev/md1 PV LVM:
pvcreate /dev/md1- Добавляем новый PV в существующую группу сервер1:
vgextend server1 /dev/md1- Переносим все данные (extents) с /dev/sda5 на /dev/md1:
pvmove /dev/sda5 /dev/md1Этот шаг может занять продолжительное время в зависимости от объёма данных и скорости дисков.
- Как только pvmove завершится, удалим старый PV /dev/sda5 из VG:
vgreduce server1 /dev/sda5- Теперь можно освободить /dev/sda5 и добавить его в md1, чтобы завершить зеркало:
mdadm --add /dev/md1 /dev/sda5Проверьте прогресс синхронизации:
watch -n1 cat /proc/mdstatПосле успешной синхронизации у вас будет полностью зеркальная LVM: /dev/md1 как PV в VG server1, с LV root и swap уже перенесёнными.
H2: Шаг 4 — обновить конфигурацию mdadm и initramfs
- Сохраните конфигурацию mdadm, чтобы массивы собирались автоматически при загрузке:
mdadm --detail --scan >> /etc/mdadm/mdadm.conf(Если запись уже есть — проверьте, чтобы не было дубликатов.)
- Обновите initramfs, чтобы он включал mdadm и RAID-массивы:
update-initramfs -uНа системах с несколькими версиями ядра можно выполнить update-initramfs -u -k all.
- Проверьте, что /etc/fstab использует правильные устройства (например, UUID /dev/md0 для /boot) и что LVM монтируется корректно.
H2: Шаг 5 — установить GRUB2 на оба диска
Чтобы обеспечить загрузку даже при отказе одного диска, установите GRUB2 в MBR обоих дисков (/dev/sda и /dev/sdb):
grub-install /dev/sda
grub-install /dev/sdb
update-grubПосле этого загрузочный код GRUB будет записан в оба диска, и при потере одного из них система всё ещё сможет загрузиться с другого.
H2: Проверка и тестирование
- Проверьте состояние md-устройств:
cat /proc/mdstat
mdadm --detail /dev/md0
mdadm --detail /dev/md1- Проверьте, что LVs активны и смонтированы:
lvdisplay
mount | grep /dev/mapperПроверьте, что /boot загружается с md0 (проверьте содержимое /boot и что /etc/fstab указывает на /dev/md0).
Симуляция отказа: аккуратно отключите (или демонтируйте) на тестовом хосте второй диск, убедитесь, что система продолжает работать и загружается после перезагрузки (на тестовой машине). Всегда имейте образ восстановления.
H2: Восстановление и замена диска
Если диск вышел из строя и вы заменили его новым:
- Разбейте новый диск, воспроизведите таблицу разделов (sfdisk с /dev/sda или используйте parted).
sfdisk -d /dev/sdb | sfdisk /dev/sdc # пример: копирование схемы на новый диск /dev/sdc- Пометьте разделы как raid (тип fd) и очистите суперблоки на новых разделах.
mdadm --zero-superblock /dev/sdc1
mdadm --zero-superblock /dev/sdc5- Добавьте новые разделы в соответствующие массивы:
mdadm --add /dev/md0 /dev/sdc1
mdadm --add /dev/md1 /dev/sdc5Подождите завершения синхронизации (cat /proc/mdstat).
При необходимости установите GRUB на новый диск:
grub-install /dev/sdc- Обновите /etc/mdadm/mdadm.conf и initramfs, если требуется.
H2: Частые ошибки и когда это не сработает
- Недостаточно свободного места на втором диске. Диски должны быть не меньше по размеру.
- Различные размеры секторов или отличия в разметке могут привести к проблемам; всегда проверяйте совместимость.
- Сложная цепочка LVM из нескольких PV/VG с распределением по разным дискам требует внимательного планирования и тестирования pvmove.
- Если /boot был установлен в нестандартном месте или использует CIFS/NFS, этот метод неприменим.
- Если initramfs не был обновлён, система может не загрузиться в RAID-режиме.
H2: Альтернативные подходы
Аппаратный RAID: аппаратный контроллер обеспечивает зеркалирование на уровне контроллера. Плюсы: часто выше производительность, загрузчик ставится на аппаратный RAID. Минусы: привязка к марке контроллера и более сложный перенос дисков между машинами.
Полное восстановление: создать образ системы и восстановить его на двух дисках, затем настроить RAID. Подходит для критичных систем, когда риск небольшой и можно проводить простои.
Использовать LVM-RAID (lvm2 raid features) — в новых версиях LVM есть собственный механизм RAID, но на Debian Squeeze он может отсутствовать или быть ограничен.
H2: Ментальные модели и эвристики при принятии решения
- Разница между доступностью и резервным копированием: RAID1 даёт доступность, но не защищает от удаления файлов/ошибок администратора.
- Поэтапный подход: создавайте зеркало на пустом диске, переносите данные по частям, не перестраивайте все одновременно.
- Тестируйте на стендах: никогда не проводите такую миграцию впервые на боевой системе без теста.
H2: Роль‑ориентированные чек-листы
Системный администратор (до операции):
- Сделать полную резервную копию и проверить восстановление.
- Убедиться, что есть физический доступ к серверу или консоль KVM/IPMI.
- Проверить, что второй диск работает и по размеру не меньше первого.
- Зафиксировать текущее состояние: выводы fdisk, pvdisplay, vgdisplay, lvdisplay.
Во время миграции:
- Выполнять команды шаг за шагом, фиксируя логи.
- Следить за cat /proc/mdstat и pvmove.
После миграции:
- Обновить mdadm.conf, initramfs, установить GRUB на оба диска.
- Провести тестовую перезагрузку на стенде.
Менеджер/владелец сервиса:
- Утвердить окно обслуживания и планы отката.
- Быть в курсе уровня риска и сроков восстановления.
H2: Критерии приёмки
- /boot смонтирован с /dev/md0 и содержит корректные образы ядра и initramfs.
- LVM VG работает поверх /dev/md1, LV root и swap доступны и монтируются.
- mdadm показывает состояние “active” для всех массивов и синхронизация завершена.
- GRUB установлен на обоих дисках; тест загрузки с каждого диска пройден (в тестовой среде).
- /etc/mdadm/mdadm.conf содержит актуальную конфигурацию массивов.
H2: Шаблон проверок (acceptance checklist)
- Выполнена резервная копия
- Таблица разделов скопирована на /dev/sdb
- Типы разделов на /dev/sdb помечены как fd
- md0 создан на /dev/sdb1, /boot скопирован, /etc/fstab обновлён
- md1 создан на /dev/sdb5, pvcreate + vgextend + pvmove выполнены
- vgreduce /dev/sda5 выполнен, /dev/sda5 добавлен в md1
- mdadm.conf обновлён и initramfs пересоздан
- GRUB установлен на /dev/sda и /dev/sdb
- Симуляция отказа диска в тестовой среде успешно пройдена
H2: Чек‑лист восстановления в боевой ситуации (runbook кратко)
- Определить вышедший диск (dmesg, smartctl, mdadm –detail).
- Если диск полностью умер — извлечь, установить новый.
- Восстановить таблицу разделов и пометить тип fd.
- mdadm –add новый раздел в соответствующий массив.
- Проверить синхронизацию в /proc/mdstat.
- При необходимости выполнить grub-install на новом диске.
H2: Чек‑лист безопасности и приватности (замечания для локальной среды)
- Локальные регуляции (например GDPR) не зависят от зеркалирования; RAID не заменяет политик резервного копирования и удаления персональных данных.
- При переносе данных на новый диск убедитесь, что не копируете конфиденциальные ключи в ненадежное место.
H2: Команды‑шпаргалка (cheat sheet)
- Установить утилиты: apt-get install initramfs-tools mdadm
- Скопировать таблицу: sfdisk -d /dev/sda | sfdisk –force /dev/sdb
- Пометить разделы raid: fdisk /dev/sdb (t → fd)
- Очистить суперблок: mdadm –zero-superblock /dev/sdb1
- Создать degraded md для /boot: mdadm –create /dev/md0 –level=1 –raid-devices=2 /dev/sdb1 missing
- Создать FS: mkfs.ext2 /dev/md0
- Скопировать /boot: cp -ax /boot/. /mnt/newboot/
- Добавить sda1: mdadm –add /dev/md0 /dev/sda1
- Создать md для LVM: mdadm –create /dev/md1 –level=1 –raid-devices=2 /dev/sdb5 missing
- Создать PV и добавить в VG: pvcreate /dev/md1; vgextend server1 /dev/md1
- Перенос данных: pvmove /dev/sda5 /dev/md1
- Убрать старый PV: vgreduce server1 /dev/sda5
- Добавить sda5 в md: mdadm –add /dev/md1 /dev/sda5
- Обновить mdadm.conf: mdadm –detail –scan >> /etc/mdadm/mdadm.conf
- Обновить initramfs: update-initramfs -u
- Установить GRUB: grub-install /dev/sda; grub-install /dev/sdb; update-grub
H2: Мелкие советы и примечания
- Всегда контролируйте процесс pvmove и синхронизацию RAID. Эти операции «дороги» по I/O — планируйте окна обслуживания.
- При создании md-устройств можно указывать –assume-clean, но это опасно: используйте только если точно понимаете последствия.
- Если вы используете LVM snapshot-ы или активные резервные потоки — учтите их при переносе томов.
H2: Альтернативы и когда лучше отложить миграцию
- Если система критична и нет окна для тестирования — лучше сначала настроить зеркалирование на стенде.
- Если диски сильно различаются по характеристикам (смартфон-сервер? старый и новый), дождитесь одинаковых дисков.
H2: Заключение
Добавление RAID1 в работающую систему LVM возможно и практично при соблюдении пошаговой методики: создать degraded массивы на пустом диске, перенести данные на зеркало, расширить VG и выполнить pvmove, а затем добавить исходные разделы в массивы. Не забывайте обновить конфигурации (mdadm.conf, initramfs) и установить GRUB на оба диска. Тестируйте процедуру на небоевых серверах и имейте резервные копии.
Важно
- Не полагайтесь только на RAID для защиты данных — RAID повышает доступность, но не устраняет ошибки пользователя или вредоносные изменения.
- Перед началом убедитесь, что у вас текущая резервная копия.
Резюме
- Создавать зеркала лучше поэтапно: сначала /boot, затем LVM PV через md + pvcreate + vgextend + pvmove.
- Обновите mdadm.conf и initramfs, установите GRUB на оба диска.
- Тестируйте отказ диска в контролируемой среде.
Источники знаний и дальнейшее чтение
- man mdadm
- man lvm
- документация Debian по mdadm и initramfs
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента