Как настроить программный RAID1 на работающей LVM‑системе (включая конфигурацию GRUB) (Fedora 8)
Важно: Перед началом сделайте полную резервную копию данных. Операции с разделами и загрузчиком могут привести к потере данных при ошибках.
О чём эта инструкция
Цель: добавить зеркалирование (RAID1) к уже существующей LVM‑системе без переустановки. Пример использует Fedora 8 и два одинаковых по размеру диска: /dev/sda (в работе) и /dev/sdb (пустой). В результате должны появиться:
- /dev/md0: зеркальный раздел для /boot (из /dev/sda1 и /dev/sdb1), формат ext3;
- /dev/md1: зеркальный LVM‑физический том (из /dev/sda2 и /dev/sdb2), в который вписана существующая группа VolGroup00.
Короткие определения:
- RAID1 — зеркалирование данных между двумя и более дисками; при выходе одного диск остаётся доступным.
- LVM — логический менеджер томов; позволяет изменять размеры томов и управлять логическими разделами.
- mdadm — утилита для управления программными RAID на Linux.
Компоненты и требования
- Два диска одинакового (или совместимого по объёму) размера: /dev/sda (активный), /dev/sdb (пустой).
- root‑доступ.
- Установленные пакеты: mdadm, mkinitrd (в примере используется yum).
- Резервная копия критичных данных.
Сценарий из примера (исходное состояние)
Ниже приведены выводы команд, соответствующие начальной конфигурации системы в примере.
df -h[root@server1 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
4.1G 2.0G 2.0G 51% /
/dev/sda1 190M 13M 168M 7% /boot
tmpfs 151M 0 151M 0% /dev/shm
[root@server1 ~]#fdisk -l[root@server1 ~]# fdisk -l
Disk /dev/sda: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0008b885
Device Boot Start End Blocks Id System
/dev/sda1 * 1 25 200781 83 Linux
/dev/sda2 26 652 5036377+ 8e Linux LVM
Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000
Disk /dev/sdb doesn't contain a valid partition table
Disk /dev/dm-0: 4462 MB, 4462739456 bytes
255 heads, 63 sectors/track, 542 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000
Disk /dev/dm-0 doesn't contain a valid partition table
Disk /dev/dm-1: 637 MB, 637534208 bytes
255 heads, 63 sectors/track, 77 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x30307800
Disk /dev/dm-1 doesn't contain a valid partition table
[root@server1 ~]#Выводы LVM:
pvdisplay[root@server1 ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name VolGroup00
PV Size 4.80 GB / not usable 22.34 MB
Allocatable yes
PE Size (KByte) 32768
Total PE 153
Free PE 1
Allocated PE 152
PV UUID op2n3N-rck1-Pywc-9wTY-EUxQ-KUcr-2YeRJ0
[root@server1 ~]#vgdisplay[root@server1 ~]# vgdisplay
--- Volume group ---
VG Name VolGroup00
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
Cur LV 2
Open LV 2
Cur PV 1
Act PV 1
VG Size 4.78 GB
PE Size 32.00 MB
Total PE 153
Alloc PE / Size 152 / 4.75 GB
Free PE / Size 1 / 32.00 MB
VG UUID jJj1DQ-SvKY-6hdr-3MMS-8NOd-pb3l-lS7TA1
[root@server1 ~]#lvdisplay[root@server1 ~]# lvdisplay
--- Logical volume ---
LV Name /dev/VolGroup00/LogVol00
VG Name VolGroup00
LV UUID yt5b4f-m2XC-F3aP-032r-ulAT-Re5P-lmh6hy
LV Write Access read/write
LV Status available
# open 1
LV Size 4.16 GB
Current LE 133
Segments 1
Allocation inherit
Block device 253:0
--- Logical volume ---
LV Name /dev/VolGroup00/LogVol01
VG Name VolGroup00
LV UUID VrPqpP-40ym-55Gs-ShVm-Hlzs-Jzot-oYnonY
LV Write Access read/write
LV Status available
# open 1
LV Size 608.00 MB
Current LE 19
Segments 1
Allocation inherit
Block device 253:1
[root@server1 ~]#1. Установка mdadm и загрузка модулей
Установим mdadm и mkinitrd. В Fedora 8 используется yum:
yum install mkinitrd mdadmЗатем подгрузим нужные модули ядра, чтобы не перезагружаться:
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 #] 2. Подготовка /dev/sdb — копирование таблицы разделов
Чтобы диски имели одинаковую разметку, скопируем таблицу разделов со /dev/sda на /dev/sdb:
sfdisk -d /dev/sda | sfdisk /dev/sdbПримерный вывод при успешной записи разметки:
[root@server1 ~]# sfdisk -d /dev/sda | sfdisk /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 * 63 401624 401562 83 Linux
/dev/sdb2 401625 10474379 10072755 8e Linux LVM
/dev/sdb3 0 - 0 0 Empty
/dev/sdb4 0 - 0 0 Empty
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 оба диска должны выглядеть одинаково.
3. Изменение типа разделов на Linux raid autodetect
На /dev/sdb нужно изменить тип разделов с 83/8e на fd (Linux raid autodetect). Откроем fdisk и сменим коды:
fdisk /dev/sdbВ интерактивной сессии выберите t → номер раздела → код fd (введите L для списка кода). Затем w для записи.
Пример (сокращённый фрагмент сессии):
Command (m for help): <- t
Partition number (1-4): <- 1
Hex code (type L to list codes): <- fd
Changed system type of partition 1 to fd (Linux raid autodetect)
Command (m for help): <- t
Partition number (1-4): <- 2
Hex code (type L to list codes): <- fd
Changed system type of partition 2 to fd (Linux raid autodetect)
Command (m for help): <- w
The partition table has been altered!
Calling ioctl() to re‑read partition table.
Syncing disks.
[root@server1 ~]#После этого fdisk -l покажет для /dev/sdb1 и /dev/sdb2 тип fd — Linux raid autodetect.
4. Очистка возможных старых суперблоков md
Перед созданием массивов убедитесь, что на /dev/sdb нет остатков старых md‑метаданных:
mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdb2Если на разделе не было метаданных md, mdadm вернёт сообщение об «Unrecognised md component device», что нормально.
[root@server1 ~]# mdadm --zero-superblock /dev/sdb1
mdadm: Unrecognised md component device - /dev/sdb1
[root@server1 ~]#5. Общая последовательность действий (мини‑методология)
- Резервное копирование всех критичных данных.
- Установка mdadm и загрузка модулей.
- Клонирование таблицы разделов со «старого» диска на новый.
- Изменение типа разделов на fd (raid autodetect).
- Очистка md‑суперблоков.
- Создание массивов md для /boot и LVM‑физического тома.
- Копирование содержимого /boot (если создаёте новый md0).
- Добавление оригинальных разделов в массивы по одному и перестройка.
- Установка GRUB на оба диска и обновление initramfs (mkinitrd).
- Тестирование отказоустойчивости (извлечь один диск и загрузиться).
6. Примеры команд (что обычно делают дальше)
Ниже приведены типовые команды, которые в других инструкциях применяют для завершения миграции в RAID1. Они служат как примеры; подставьте свои устройства и пути.
- Создать RAID1 для /boot (если хотите зеркалить /boot):
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1- Создать RAID1 для LVM (физический том):
mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sda2 /dev/sdb2Если вы создаёте md1 и хотите использовать его как PV для LVM, нужно выполнить pvcreate на /dev/md1 и затем восстановить VG/ЛВ из резервной копии метаданных LVM или переместить данные. Этот момент требует внимания — корректные шаги зависят от того, действуете ли вы на работающей системе и хотите ли переместить текущий PV.
Установка GRUB на оба диска (пример):
grub-install /dev/sda
grub-install /dev/sdb- Обновление initramfs / начального ramdisk (если требуется):
mkinitrd -f /boot/initrd-`uname -r`.img `uname -r`Важно: точные параметры grub-install и mkinitrd зависят от версии GRUB и от структуры /boot в вашей системе. На Fedora 8 команды выше — типовой пример.
7. Критерии приёмки
- /dev/md0 и /dev/md1 созданы и отображаются в /proc/mdstat.
- /boot корректно читается с /dev/md0; система загружается с любого из дисков при отключении второго.
- LVM‑группа существует и все логические тома смонтированы после смены на md1 (при использовании md1 как PV).
- GRUB установлен на MBR обоих дисков (проверьте grub-install и содержимое /boot/grub/grub.conf).
- Выполнен успешный тест: отключённый второй диск — система загружается и работает.
8. Чек‑лист для ролей
Администратор (подготовка):
- Сделать резервную копию /boot, LVM метаданных и критичных данных.
- Проверить наличие свободного диска одинакового размера.
- Убедиться, что установлены mdadm и mkinitrd.
Оператор (выполнение):
- Скопировать таблицу разделов sfdisk.
- Изменить тип разделов на fd.
- Очистить суперблоки mdadm.
- Создать массивы md и следить за перестроением.
- Установить GRUB на оба диска и обновить initramfs.
Тестировщик (проверка):
- Перезагрузить и загрузиться с основного диска.
- Отключить/симулировать отказ одного диска и загрузиться с оставшегося.
- Проверить целостность данных и доступность LVM томов.
9. Когда подход не работает / ограничения (контрпримеры)
- Неодинаковый размер дисков. Если второй диск меньше, чем первый, зеркалирование полного PV не получится.
- Если исходная система использует особую схему загрузки (UEFI/GPT вместо MBR в старой Fedora), команды grub-install и sfdisk потребуют других параметров.
- Если LVM использовал несколько PV, простая замена одного PV на md1 может быть сложной и потребовать миграции данных между PV.
10. Альтернативные подходы
- Использовать аппаратный контроллер RAID — выключает необходимость mdadm, но привязывает конфигурацию к контроллеру.
- Создать RAID1 только для / (без LVM) — упрощает загрузчик, но требует переразбивки.
- Миграция на LVM‑зеркалирование (lvm mirror) вместо mdadm — LVM поддерживает собственное зеркало, но у него другие нюансы восстановления.
11. Советы и эвристики
- Всегда проверяйте /proc/mdstat и вывод mdadm –detail при создании/восстановлении массива.
- При создании массива md для /boot сначала создайте md0, отформатируйте и скопируйте данные /boot, затем установите GRUB на оба диска.
- Для минимизации риска разделы должны иметь выровненные границы и совпадать по типу.
12. Резюме
Эта инструкция показывает ключевые шаги для перевода работающей LVM‑системы в режим зеркалирования с помощью mdadm: установка утилит, копирование таблицы разделов, изменение типов на Linux raid, очистка старых md‑суперблоков и подготовка к созданию RAID‑массивов. Завершающие шаги включают создание md‑массивов, перенос/подключение LVM к md1 и установку GRUB на оба диска. Тестирование отказоустойчивости — обязательный финальный шаг.
Краткие рекомендации: протестируйте процедуру на ненужной машине или в контролируемом окружении до применения в проде. Если вы не уверены в шагах с LVM, сначала отработайте создание md0 (для /boot), а уже затем переходите к LVM‑части.
Фактбокс — ключевые числа из примера:
- Размер LV root: ~4.16 GB.
- Размер swap LV: ~608 MB.
- Количество PE в VG: 153.
Примечание: команды и последовательность могут требовать адаптации под вашу точную версию ядра, GRUB и утилит. Выполняйте операции под рутом и имейте резервные копии.
Похожие материалы
Herodotus: механизм и защита Android‑трояна
Включить новое меню «Пуск» в Windows 11
Панель полей сводной таблицы в Excel — руководство
Включить новое меню «Пуск» в Windows 11
Дубликаты Диспетчера задач в Windows 11 — как исправить