Как настроить программный RAID1 на работающей системе включая настройку GRUB2 для Debian Squeeze
Кратко: этот пошаговый гид показывает, как на уже работающей Debian Squeeze-системе создать программный RAID1 из двух дисков, скопировать на второй диск текущие разделы, подготовить mdadm и настроить GRUB2 так, чтобы система могла загрузиться при выходе из строя любого диска. Выполняйте команды под root, делайте резервную копию важных данных перед началом.
Важно: руководство демонстративно и не даёт стопроцентной гарантии для всех конфигураций. Применяйте в тестовой среде перед продом.
О чём эта инструкция
В этой инструкции показан процесс создания программного RAID1 на уже работающем Debian Squeeze-сервере с двумя одинаковыми по размеру дисками /dev/sda и /dev/sdb. /dev/sdb изначально свободен, а /dev/sda содержит загрузочный и корневой разделы. В конце мы хотим получить зеркалирование (/boot, swap и /) с помощью mdadm и корректную настройку GRUB2, чтобы система загружалась при отказе любого из дисков.
Ключевые понятия в одной строке:
- RAID1: зеркалирование дисков, одинаковые данные на двух и более дисках.
- mdadm: утилита для управления программными RAID-массивами Linux.
- GRUB2: загрузчик, который нужно установить на оба диска, чтобы обеспечить загрузку при отказе одного из них.
Предварительные замечания
В примере используется система с двумя дисками одинакового размера:
- /dev/sda — текущий диск с данными;
- /dev/sdb — пустой диск того же размера.
Исходная разбивка на /dev/sda:
- /dev/sda1: /boot, ext4;
- /dev/sda2: swap;
- /dev/sda3: /, ext4.
Целевое состояние:
- /dev/md0 = /dev/sda1 + /dev/sdb1: /boot, ext4;
- /dev/md1 = /dev/sda2 + /dev/sdb2: swap;
- /dev/md2 = /dev/sda3 + /dev/sdb3: /, ext4.
NB: Перед началом сделайте резервную копию важных данных и снимок конфигурации (например, lsblk, fdisk -l, /etc/fstab, /etc/mdadm/mdadm.conf).
Текущая ситуация (пример вывода на сервере автора)
df -hroot@server1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 4.0G 712M 3.1G 19% /
tmpfs 249M 0 249M 0% /lib/init/rw
udev 244M 100K 244M 1% /dev
tmpfs 249M 0 249M 0% /dev/shm
/dev/sda1 472M 25M 423M 6% /boot
root@server1:~#
fdisk -lroot@server1:~# fdisk -l
Disk /dev/sda: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000b0ecb
Device Boot Start End Blocks Id System
/dev/sda1 * 1 63 498688 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 63 125 499712 82 Linux swap / Solaris
Partition 2 does not end on cylinder boundary.
/dev/sda3 125 653 4242432 83 Linux
Partition 3 does not end on cylinder boundary.
Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/sdb doesn’t contain a valid partition table
root@server1:~#
Установка mdadm
Для управления программными RAID-массивами используйте mdadm. Установите пакеты:
apt-get install initramfs-tools mdadmВо время установки утилита спросит, какие массивы нужны для корневой файловой системы. Обычно ответить следует «all» или подтвердить создание массивов для root. Если вы не уверены, оставьте настройки по умолчанию и впоследствии отредактируйте /etc/mdadm/mdadm.conf вручную.
Чтобы не перезагружать систему, загрузим нужные модули ядра прямо сейчас:
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:~#
Подготовка /dev/sdb
План действий:
- Скопировать таблицу разделов с /dev/sda на /dev/sdb.
- Изменить тип разделов на md (Linux raid autodetect).
- Убедиться, что на /dev/sdb нет старых суперблоков md.
- Создать RAID-массивы и синхронизировать данные.
Сначала скопируем таблицу разделов:
sfdisk -d /dev/sda | sfdisk --force /dev/sdbПример вывода команды при успешном выполнении в исходном окружении автора:
root@server1:~# sfdisk -d /dev/sda | sfdisk –force /dev/sdb
Checking that no-one is using this disk right now …
OK
Disk /dev/sdb: 652 cylinders, 255 heads, 63 sectors/track
sfdisk: ERROR: sector 0 does not have an msdos signature
/dev/sdb: unrecognized partition table type
Old situation:
No partitions found
New situation:
Units = sectors of 512 bytes, counting from 0
Device Boot Start End #sectors Id System
/dev/sdb1 * 2048 999423 997376 83 Linux
/dev/sdb2 999424 1998847 999424 82 Linux swap / Solaris
/dev/sdb3 1998848 10483711 8484864 83 Linux
/dev/sdb4 0 - 0 0 Empty
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 должна показать одинаковую схему разделов на обоих дисках:
root@server1:~# fdisk -l
Disk /dev/sda: 5368 MB, 5368709120 bytes
…
Disk /dev/sdb: 5368 MB, 5368709120 bytes
…
root@server1:~#
Далее нужно сменить тип разделов на /dev/sdb на Linux raid autodetect (код fd). Для этого используйте fdisk:
fdisk /dev/sdbВ интерактивной сессии выберите команду t, укажите номер раздела и код fd. Повторите для всех трёх разделов. Пример интерактивной сессии приводится ниже в исходных данных.
После изменения типа разделов запишите таблицу командой w.
Чтобы убедиться, что на новых разделах нет старых дампов RAID, обнулите суперблоки md (если они есть). Эти команды безопасны: если суперблока нет, mdadm выдаст предупреждение и выйдет.
mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdb2
mdadm --zero-superblock /dev/sdb3Пример сообщения при отсутствии суперблока (нормально):
root@server1:~# mdadm –zero-superblock /dev/sdb1
mdadm: Unrecognised md component device - /dev/sdb1
root@server1:~#
Создание RAID-массивов и копирование данных
Общий подход: создать массивы как «degraded» — с одним устройством, затем скопировать данные с /dev/sda на /dev/sdb, добавить второй диск в массив и дождаться синхронизации.
- Создаём RAID для /boot (md0) из /dev/sda1 и /dev/sdb1, но пока добавляем только /dev/sdb1 и отмечаем массив как degraded, или наоборот — создаём массив из /dev/sdb1 и затем добавляем /dev/sda1. Чтобы избежать удаления данных, безопаснее создать массив, добавив в него пустой раздел и затем синхронизировать, но чаще делают наоборот: создать массив с /dev/sdb1 и затем скопировать /boot туда. Ниже показан один из безопасных сценариев — копирование разделов, а затем создание массивов.
Вариант A (копирование raw-партий):
- Создать временный образ раздела /dev/sdb1, смонтировать его, скопировать файлы из /boot.
- То же самое для корня — использовать rsync или tar для копирования содержимого.
Пример для /boot:
mkfs.ext4 /dev/sdb1
mkdir -p /mnt/boot2
mount /dev/sdb1 /mnt/boot2
rsync -aHAX --numeric-ids /boot/ /mnt/boot2/Убедитесь, что файлы скопированы, затем измените /etc/fstab временно или запишите в mdadm конфигурацию и создавайте md-массивы.
- Создание массивов через mdadm (пример создания массивов на основе sdx1 etc.). Если вы предпочитаете чистое mdadm-подход, можно создать массивы degraded, добавив один диск, и потом копировать туда данные из старого раздела. Например, создайте md0 на /dev/sdb1 как одноэлементный массив и скопируйте туда /boot.
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 missing
mkfs.ext4 /dev/md0
mount /dev/md0 /mnt/boot2
rsync -aHAX --numeric-ids /boot/ /mnt/boot2/После копирования — проверьте наличие файлов в /mnt/boot2. Если всё корректно, размонтируйте и добавьте второй компонент в массив:
umount /mnt/boot2
mdadm --add /dev/md0 /dev/sda1Для swap создайте md-массив уровня 1 и добавьте swap через mkswap:
mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdb2 missing
mkswap /dev/md1
swapon /dev/md1 # или добавьте в /etc/fstab
mdadm --add /dev/md1 /dev/sda2Для корня используйте аналогичный сценарий, но при копировании корневой файловой системы применяйте rsync с сохранением прав и метаданных. Обычно создают initramfs с поддержкой md и обновляют GRUB до загрузки с md.
Пример копирования корня на временно созданный md /dev/md2:
mdadm --create /dev/md2 --level=1 --raid-devices=2 /dev/sdb3 missing
mkfs.ext4 /dev/md2
mount /dev/md2 /mnt/newroot
rsync -aHAX --numeric-ids --exclude='/proc/*' --exclude='/sys/*' --exclude='/dev/*' / /mnt/newroot/
# После этого нужно создать /dev, /proc, /sys и обновить fstab в /mnt/newrootПосле того как все данные скопированы и массивы образованы, добавьте недостающие компоненты (в примере /dev/sda1, /dev/sda2, /dev/sda3) к соответствующим md-дискам и дождитесь синхронизации.
mdadm --add /dev/md0 /dev/sda1
mdadm --add /dev/md1 /dev/sda2
mdadm --add /dev/md2 /dev/sda3Проверяйте прогресс с помощью:
watch -n 1 cat /proc/mdstatОбновление конфигурации mdadm и initramfs
После создания массивов — зафиксируйте конфигурацию в /etc/mdadm/mdadm.conf, чтобы при загрузке initramfs и система знали о массивах:
mdadm --detail --scan >> /etc/mdadm/mdadm.confЗатем обновите initramfs, чтобы включить поддержку массива при загрузке:
update-initramfs -u(В некоторых версиях Debian файл называется /etc/initramfs-tools/conf.d/mdadm. Если нужно, отредактируйте его вручную.)
Настройка GRUB2 на обоих дисках
Чтобы обеспечить загрузку при выходе из строя любого диска, установите GRUB2 на оба диска и обновите конфигурацию.
- Установите GRUB на /dev/sda (обычно уже установлен):
grub-install /dev/sda
update-grub- Установите GRUB на /dev/sdb тоже:
grub-install /dev/sdb
update-grubЦель — получить загрузчик в MBR/boot area обоих дисков. После этого, при отказе любого из дисков BIOS сможет загрузиться с второго диска.
Замечание по UEFI: Debian Squeeze старый и чаще использует BIOS/MBR. Если у вас система с UEFI, процесс установки GRUB и разметка EFI отличается: потребуется раздел EFI на обоих дисках и корректная запись загрузочных записей в UEFI. Здесь описывается MBR/BIOS-сценарий.
Верификация и тестирование
- Проверьте состояние md-массивов:
cat /proc/mdstat
mdadm --detail /dev/md0
mdadm --detail /dev/md1
mdadm --detail /dev/md2Убедитесь, что /etc/fstab указывает на /dev/mdX (не на /dev/sdaX).
Проверьте наличие записи mdadm в /etc/mdadm/mdadm.conf.
Тест загрузки: поочерёдно отключите (или пометьте в BIOS) один из дисков и перезагрузите систему, чтобы убедиться, что загрузка происходит с оставшегося диска. В тесте реального отключения диска обязательно подготовьте план отката и физический доступ к серверу.
После успешной загрузки проверьте, что массивы работают в degraded режиме, затем повторно добавьте диск и дождитесь ресинхронизации.
Частые проблемы и способы устранения
Проблема: система не загружается после удаления диска.
Причина: GRUB установлен только на одном диске или initramfs не содержит поддержки md.
Решение: убедитесь, что grub-install выполнен для обоих дисков и обновите initramfs.Проблема: mdadm не видит UUID или устройства меняют имена.
Причина: различия в именовании (sda/sdb могут меняться).
Решение: используйте UUID в /etc/fstab и mdadm.conf, добавьте скрипты udev, проверьте правильность /dev/disk/by-* ссылок.Проблема: потеря данных при неверном создании массива.
Причина: создание массива поверх существующих данных без предварительного копирования.
Решение: перед созданием массива убедитесь в наличии корректных резервных копий и используйте метод копирования (rsync) вместо создания md поверх активного раздела с данными.
Когда этот подход не подходит
- Если у вас аппаратный RAID-контроллер, лучше использовать его инструменты.
- Если диски разного размера и вы хотите максимальной ёмкости, RAID1 неэффективен.
- Если нужна гибкая миграция разделов и снапшоты, рассмотрите LVM поверх RAID или LVM вместо RAID (в зависимости от требований).
Альтернативные подходы
- Аппаратный RAID: контроллеры, управляемые производителем. Плюсы: производительность, автономность. Минусы: привязка к железу.
- LVM + RAID: храните LVM PV на md-устройствах для гибкости томов.
- DRBD для репликации между серверами вместо локального RAID.
Пошаговый SOP для инженера (коротко)
- Сделать бэкап: копии /, /boot, /etc.
- Установить mdadm и initramfs-tools.
- Скопировать таблицу разделов: sfdisk -d /dev/sda | sfdisk –force /dev/sdb.
- Поменять типы разделов на fd.
- Обнулить старые суперблоки md на /dev/sdb*.
- Создать md0/md1/md2 последовательно, копировать данные через rsync.
- Добавить /dev/sda* в массивы и дождаться синхронизации.
- Обновить /etc/mdadm/mdadm.conf и update-initramfs -u.
- Установить grub-install на оба диска и update-grub.
- Протестировать отключением дисков.
Ролевые чек-листы
Администратор до начала работ:
- Сделать полную резервную копию данных.
- Проверить, что у вас физический доступ к серверу.
- Проверить совместимость BIOS/UEFI.
Во время миграции:
- Следить за выводом cat /proc/mdstat.
- Проверить логи dmesg и /var/log/syslog.
После миграции:
- Прогнать тесты загрузки с отключённым диском.
- Проверить целостность файлов и права.
Критерии приёмки
- /etc/fstab ссылается на /dev/md устройства (не на /dev/sda).
- В /proc/mdstat видно состояние RAID1 и отсутствие ошибок.
- GRUB установлен на обоих дисках: grub-install /dev/sda и /dev/sdb выполнены без ошибок.
- Система успешно загружается при отключении любого отдельного диска.
План отката и аварийный сценарий
- Если после изменений система не загружается с обоих дисков — загрузитесь с live-CD/USB.
- Подключите оригинальный диск /dev/sda как primary и восстановите /etc/fstab и /boot из бэкапа.
- Если требуется, восстановите таблицу разделов с помощью sfdisk (храните dump перед модификацией).
- Восстановите GRUB с live-окружения: mount, chroot, grub-install, update-grub.
Тесты и приёмочные сценарии
- Тест 1: При нормальной работе — все md-массивы clean, синхронизированы.
- Тест 2: Отключение диска /dev/sda — система должна загрузиться и работать degraded.
- Тест 3: Восстановление диска и повторная синхронизация — массив возвращается в clean.
- Тест 4: Проверка целостности данных после ресинхронизации: md5sum/sha256sum файлов выборочно.
Краткая памятка-команды (cheat sheet)
- Установка: apt-get install initramfs-tools mdadm
- Копирование таблицы: sfdisk -d /dev/sda | sfdisk –force /dev/sdb
- Изменение типа раздела: fdisk /dev/sdb (t -> fd)
- Обнуление суперблока: mdadm –zero-superblock /dev/sdb1
- Создание массива: mdadm –create /dev/md0 –level=1 –raid-devices=2 /dev/sdb1 missing
- Добавление диска: mdadm –add /dev/md0 /dev/sda1
- Состояние: cat /proc/mdstat, mdadm –detail /dev/md0
- Сохранение конфигурации: mdadm –detail –scan >> /etc/mdadm/mdadm.conf
- Обновление initramfs: update-initramfs -u
- Установка GRUB: grub-install /dev/sda ; grub-install /dev/sdb ; update-grub
1-строчная глоссарий
- mdadm — утилита для управления программным RAID в Linux.
- GRUB2 — загрузчик системы.
- RAID1 — зеркалирование данных по двум и более устройствам.
- degraded — состояние массива при отсутствии одного из членов.
Модели принятия решений и эвристики
- Если цель — отказоустойчивость при потере одного диска и простота — используйте RAID1.
- Если важна производительность записи и большой объём — RAID10 предпочтительнее.
- Если нужен репликация между географически разнесёнными серверами — DRBD.
Риск-матрица и смягчение рисков
Риск: потеря данных при ошибке в командах sfdisk/mdadm.
Смягчение: полные бэкапы и тесты в staging.Риск: система не загрузится после изменений.
Смягчение: подготовить live-USB и план отката, установить GRUB на оба диска.
Локальные особенности для российских дата-центров
- Убедитесь в наличии физических ключей и доступа к серверной стойке — при тесте отключения диска может потребоваться физическое вмешательство.
- В некоторых окружениях панели управления серверами (iLO/DRAC) позволяют виртуально отключать диск для теста.
Короткое объявление для команды (100–200 слов)
Мы планируем перевести сервер X на программный RAID1 для повышения отказоустойчивости. В ходе работ будет скопирована текущая файловая система на второй диск, настроены mdadm и GRUB2, и протестирована загрузка при отключении одного диска. Работы займут до N часов и требуют перезагрузки в финальной стадии тестирования. В ходе миграции возможны краткие периоды деградации производительности. Перед началом сделаем резервное копирование и оповестим дежурных. После завершения выполним тесты отказа и предоставим отчёт.
Итоговое резюме
- Программный RAID1 на Debian Squeeze позволяет получить зеркалирование и возможность загрузки при отказе одного из дисков.
- Процесс включает: копирование таблицы разделов, смену типа разделов, создание md-массивов, синхронизацию данных, обновление mdadm.conf и initramfs, установку GRUB на оба диска.
- Тестируйте процесс в контролируемой среде и имейте план отката.
Важно: до выполнения на проде проверьте все команды в тестовой среде и убедитесь, что у вас есть актуальные резервные копии.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента