Настройка программного RAID1 на работающей Debian Etch
Важно: прежде чем начинать, сделайте резервную копию важных данных. Операции с разделами и RAID несут риск потери данных при ошибке.
Содержание
- Введение и цель
- Предварительное замечание
- Установка mdadm и загрузка модулей
- Подготовка /dev/sdb и копирование таблицы разделов
- Проверки и тестирование
- Когда этот подход не подходит и альтернативы
- Мини‑методология и проверочный чеклист для ролей
- Риски и меры смягчения
- Краткое резюме
- Однострочный глоссарий
Введение и цель
Эта инструкция объясняет, как на уже работающей системе Debian Etch организовать программный RAID1 (зеркалирование) таким образом, чтобы загрузчик GRUB позволял системе загружаться, если выйдет из строя любой из жестких дисков. Основная идея: подготовить второй диск, скопировать на него структуру и данные, затем создать массивы RAID из пар разделов и настроить загрузчик.
1. Предварительное замечание
В примере используется система Debian Etch с двумя физическими дисками /dev/sda и /dev/sdb одинакового размера. В текущем состоянии /dev/sdb пуст, а /dev/sda содержит разделы:
- /dev/sda1: раздел /boot, файловая система ext3;
- /dev/sda2: swap;
- /dev/sda3: корневой раздел /, ext3.
Задача — в результате получить:
- /dev/md0 — зеркальный /boot (из /dev/sda1 и /dev/sdb1), ext3;
- /dev/md1 — зеркальный swap (из /dev/sda2 и /dev/sdb2);
- /dev/md2 — зеркальный корень / (из /dev/sda3 и /dev/sdb3), ext3.
Текущее состояние можно посмотреть командами и их выводом ниже (оставлено исходное):
df -hserver1:~#df-h
FilesystemSizeUsedAvailUse%Mountedon
/dev/sda34.4G29M3.4G%/
tmpfs126M0126M% /lib/init/rw
udev10M6K10M% /dev
tmpfs126M06M% /dev/shm
/dev/sda1137M12M8M% /boot
server1:~#fdisk -lserver1:~#fdisk-l
Disk/dev/sda:5368MB,5368709120bytes
255heads,63sectors/track,652cylinders
Units=cylindersof16065*512=8225280bytes
DeviceBootStartEnd BlocksIdSystem
/dev/sda1*118144553+83Linux
/dev/sda28049801582Linuxswap/Solaris
/dev/sda381652459459083Linux
Disk/dev/sdb:5368MB,5368709120bytes
255heads,63sectors/track,652cylinders
Units=cylindersof16065*512=8225280bytes
Disk/dev/sdbdoesn'tcontainavalidpartitiontable
server1:~#2. Установка mdadm и загрузка модулей
Для управления программными RAID в Linux используется утилита mdadm. Установите её и сопутствующий пакет initramfs-tools:
apt-get install initramfs-tools mdadmВо время установки вам будет задан вопрос:
MD arrays needed for the root filesystem: <– all
Подтвердите, что массивы MD нужны для корневой файловой системы (обычно ответ “all” или выбор подходящего варианта).
Чтобы не перезагружать систему, загрузим необходимые модули ядра сразу:
modprobe md
modprobe linear
modprobe multipath
modprobe raid0
modprobe raid1
modprobe raid5
modprobe raid6
modprobe raid10Проверим доступные личности (personalities) md:
cat /proc/mdstatОжидаемый вывод:
server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
unused devices:
server1:~# Если в списке присутствует raid1 — модуль доступен.
3. Подготовка /dev/sdb
План действий:
- Скопировать таблицу разделов с /dev/sda на /dev/sdb.
- Изменить тип разделов на /dev/sdb на “Linux raid autodetect” (hex fd).
- Очистить возможные остатки суперблоков RAID на /dev/sdb.
- Создать массивы md, синхронизировать и настроить загрузку.
Шаг 1 — копирование таблицы разделов:
sfdisk -d /dev/sda | sfdisk /dev/sdbПример вывода, оставлено исходное для справки:
server1:~#sfdisk-d/dev/sda|sfdisk/dev/sdb
Checkingthatno-oneisusingthisdiskrightnow...
OK
Disk/dev/sdb:652cylinders,255heads,63sectors/track
sfdisk:ERROR:sector0doesnothaveanmsdossignature
/dev/sdb:unrecognizedpartitiontabletype
Oldsituation:
Nopartitionsfound
Newsituation:
Units=sectorsof512bytes,countingfrom0
DeviceBootStartEnd#sectorsIdSystem
/dev/sdb1*328916928910783Linux
/dev/sdb2289170128519999603082Linuxswap/Solaris
/dev/sdb38520010474379918918083Linux
/dev/sdb40Empty
Successfullywrotethenewpartitiontable
Re-readingthepartitiontable...
IfyoucreatedorchangedaDOSpartition,/dev/foo7,say,thenusedd(1)
tozerothefirst512bytes:ddif=/dev/zeroof=/dev/foo7bs=512count=1
(Seefdisk(8).)
server1:~#После этого fdisk -l должен показать одинаковую разметку на обоих дисках (пример вывода оставлен):
server1:~#fdisk-l
Disk/dev/sda:5368MB,5368709120bytes
255heads,63sectors/track,652cylinders
Units=cylindersof16065*512=8225280bytes
DeviceBootStartEnd BlocksIdSystem
/dev/sda1*118144553+83Linux
/dev/sda28049801582Linuxswap/Solaris
/dev/sda381652459459083Linux
Disk/dev/sdb:5368MB,5368709120bytes
255heads,63sectors/track,652cylinders
Units=cylindersof16065*512=8225280bytes
DeviceBootStartEnd BlocksIdSystem
/dev/sdb1*118144553+83Linux
/dev/sdb28049801582Linuxswap/Solaris
/dev/sdb381652459459083Linux
server1:~#Шаг 2 — изменить тип разделов на /dev/sdb на fd (Linux raid autodetect):
fdisk /dev/sdbВ интерактивном режиме нужно выбрать t → номер раздела → ввести fd. В примере ниже показан диалог команд fdisk (оригинальный вывод сохранён):
server1:~#fdisk/dev/sdb
Command(mforhelp):<--m
Commandaction
atoggleabootableflag
beditbsddisklabel
ctogglethedoscompatibilityflag
ddeleteapartition
llistknownpartitiontypes
mprintthismenu
naddanewpartition
ocreateanewemptyDOSpartitiontable
pprintthepartitiontable
qquitwithoutsavingchanges
screateanewemptySundisklabel
tchangeapartition'ssystemid
uchangedisplay/entryunits
vverifythepartitiontable
wwritetabletodiskandexit
xextrafunctionality(expertsonly)
Command(mforhelp):<--t
Partitionnumber(1-4):<--1
Hexcode(typeLtolistcodes):<--L
0EmptyHiddenW95FAT180OldMinixbeSolarisboot
1FAT1224NECDOS81Minix/oldLinbfSolaris
2XENIXroot39Plan982Linuxswap/Soc1DRDOS/sec(FAT-
3XENIXusr3cPartitionMagic83Linux
4FAT16<32M0Venix84OS/2hiddenC:c6DRDOS/sec(FAT-
5Extended1PPCPRePBoot85Linuxextended
6FAT162SFS86NTFSvolumesetdaNon-FSdata
7HPFS/NTFS4dQNX4.x87NTFSvolumesetdbCP/M/CTOS/.
8AIX4eQNX4.x2ndpart88LinuxplaintextdeDellUtility
9AIXbootable10OPUS55EZ-Drivea6OpenBSDefEFI(FAT-12/16/
... (список обрезан для краткости в примере) ...
Hexcode(typeLtolistcodes):<--fd
Changedsystemtypeofpartition1tofd(Linuxraidautodetect)
Command(mforhelp):<--t
Partitionnumber(1-4):<--2
Hexcode(typeLtolistcodes):<--fd
Changedsystemtypeofpartition2tofd(Linuxraidautodetect)
Command(mforhelp):<--t
Partitionnumber(1-4):<--3
Hexcode(typeLtolistcodes):<--fd
Changedsystemtypeofpartition3tofd(Linuxraidautodetect)
Command(mforhelp):<--w
Thepartitiontablehasbeenaltered!
Callingioctl()tore-readpartitiontable.
Syncingdisks.
server1:~#Шаг 3 — очистка старых md суперблоков на /dev/sdb (если они есть):
mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdb2
mdadm --zero-superblock /dev/sdb3Если на диске не было предыдущих RAID‑компонентов, команды выдадут ошибку наподобие:
server1:~# mdadm --zero-superblock /dev/sdb1
mdadm: Unrecognised md component device - /dev/sdb1
server1:~#Это нормально: отсутствие суперблоков не критично.
Шаг 4 — создание массивов md и синхронизация
Этот шаг описан в отдельных разделах и зависит от того, хотите ли вы постепенно переводить разделы в RAID (создавать массивы с одним активным членом и одним запчастным) или сделать offline операции. Типичный безопасный сценарий для работающей системы:
- Создать RAID1 массив для /boot на /dev/sdb1 как деградированный массив с одним участником (/dev/sdb1) и без /dev/sda1, затем скопировать содержимое /boot и установить загрузчик на оба диска.
- Повторить для swap и корня: создать /dev/md2 как RAID1 с одним участником, смонтировать, синхронизировать данные, затем добавить /dev/sdaX в массив как второй участник или наоборот в зависимости от выбранной стратегии.
Примеры команд (внимательно проверьте перед выполнением):
- Создать массив с одной копией (degraded):
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 missing- Форматировать и копировать /boot (из /dev/sda1 → /dev/md0):
mkfs.ext3 /dev/md0
mount /dev/md0 /mnt
mount /dev/sda1 /boot-old
cp -a /boot-old/* /mnt/- Установить GRUB на оба диска (примерные команды):
grub-install /dev/sda
grub-install /dev/sdb
update-grub- Добавить второй член в массив (после того, как в /dev/md0 появятся нужные данные):
mdadm --add /dev/md0 /dev/sda1После добавления второго устройства массив начнет синхронизироваться; статус можно наблюдать через cat /proc/mdstat.
Важно: конкретные команды для создания и перехода корневого раздела в RAID требуют осторожности и обычно включают пересоздание initramfs и обновление /etc/fstab, чтобы корневой раздел монтировался как /dev/md2. Эти шаги зависят от конфигурации вашей системы и выходят за рамки базовой подготовки диска.
Проверки и тестирование
- Всегда проверяйте вывод cat /proc/mdstat для отслеживания синхронизации массивов.
- Перед установкой GRUB убедитесь, что /boot доступен и содержит правильные файлы ядра и initrd.
- Проведите тестовую перезагрузку после установки загрузчика и перед переводом корневого раздела в массив, если это возможно в безопасное окно.
- Тест отказоустойчивости: после синхронизации массива можно физически отключить один диск и проверить, что система загружается с оставшегося.
Когда этот подход не подходит и альтернативы
Когда метод не подходит:
- Если диски разного размера и вы хотите использовать весь объём — зеркалирование неэффективно. В таких случаях лучше использовать LVM поверх RAID (гибрид) или отдельные методы репликации.
- Если система критична по времени простоя и нельзя перезагружать систему — перевод корневого раздела в RAID онлайн требует сложных манипуляций и иногда плановой остановки.
- Если у вас аппаратный RAID контроллер с хорошей поддержкой — аппаратный RAID может быть проще в управлении.
Альтернативы:
- Настроить регулярное и атомарное резервное копирование (rsync, borg, bacula) вместо RAID для обеспечения целостности данных.
- Использовать LVM + mirroring или DRBD для репликации на уровне блоков между серверами.
Мини‑методология (пошаговый шаблон принятия решений)
- Оцените риски и создайте резервную копию.
- Убедитесь, что второй диск равен или больше по объёму.
- Скопируйте таблицу разделов: sfdisk -d /dev/sda | sfdisk /dev/sdb.
- Поменяйте тип разделов на fd на втором диске.
- Очистите суперблоки mdadm –zero-superblock.
- Создайте массивы md в режиме degraded, отформатируйте и перенесите данные.
- Установите загрузчик на оба диска.
- Добавьте второй член массива и дождитесь синхронизации.
- Обновите initramfs и /etc/fstab при необходимости.
- Проведите тесты отказоустойчивости.
Чеклист ролей
Администратор (подготовка):
- Резервная копия данных
- Проверено место на втором диске
- Установлен mdadm
- Скопирована таблица разделов
Операции (выполнение):
- Изменён тип разделов на fd
- Очистка суперблоков выполнена
- Созданы массивы в degraded режиме
- Данные /boot и другие разделы синхронизированы
- GRUB установлен на оба диска
- Проверена синхронизация mdstat
Тестирование (QA/инженер):
- Тест перезагрузки в контролируемом окне
- Тест отключения одного диска
- Мониторинг после внесения изменений
Риски и меры смягчения
- Риск: потеря данных при ошибке в разметке. Мера: перед началом — полная резервная копия.
- Риск: неправильная установка GRUB на второй диск. Мера: повторная установка grub-install на оба диска и тестовые перезагрузки.
- Риск: массив не синхронизируется. Мера: проверка /proc/mdstat, логов dmesg и mdadm –detail.
Критерии приёмки
- Все требуемые RAID‑массивы присутствуют и в состоянии clean в /proc/mdstat.
- GRUB установлен на обоих физических дисках и система успешно загружается при физическом отключении любого диска.
- /etc/fstab, initramfs и конфигурация mdadm актуальны и соответствуют новой разметке.
Однострочный глоссарий
- mdadm: утилита для управления программными массивами RAID под Linux; используйте её для создания/управления md‑устройствами.
Краткое резюме
Пошаговое переведение работающей Debian Etch системы на программный RAID1 состоит из: копирования таблицы разделов, установки типа разделов на Linux RAID, очистки старых метаданных, создания массивов в degraded режиме, переноса данных, установки GRUB на оба диска и добавления второго члена массива для синхронизации. Всегда выполняйте резервное копирование и тесты отказоустойчивости.
Если нужны конкретные команды для создания и перевода корневого раздела в RAID на вашей системе, укажите текущую конфигурацию /etc/fstab и вывод lsblk или blkid — я помогу составить точный план действий.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента