Гид по технологиям

Как настроить программный RAID1 на работающей системе LVM (включая конфигурацию GRUB) — CentOS 5.3

13 min read Серверы Обновлено 29 Oct 2025
RAID1 на LVM (CentOS 5.3): пошагово
RAID1 на LVM (CentOS 5.3): пошагово

Кратко: покажу пошагово, как добавить второй диск в уже работающую систему с LVM, создать программный RAID1 для /boot и для LVM PV, перенести данные, обновить initrd и установить GRUB на оба диска, чтобы система могла загрузиться при выходе из строя любого диска. Перед началом — сделайте полную резервную копию и протестируйте план на стенде.

Важно: все команды выполняются от root. Пример основан на CentOS 5.3 и двух одинаковых дисках /dev/sda и /dev/sdb.

Основная цель и варианты использования

Цель: получить зеркалирование (RAID1) для разделов /boot и для LVM PV (VolGroup00), при этом система должна продолжать работать во время преобразования и загружаться при отказе любого из дисков.

Варианты, покрытые в статье:

  • создание RAID1 для /boot с последующим переносом текущей /boot на md0;
  • создание RAID1 для LVM-партиции, создание PV на md и перемещение данных из старого PV;
  • установка GRUB в MBR обоих дисков и обновление initrd для работы с md.

Кому полезно: системным администраторам, инженерам DevOps, ответственным за отказоустойчивость серверов на CentOS 5.x.

Содержание

  • Предварительное примечание и состояние системы
  • Установка mdadm и загрузка модулей
  • Подготовка /dev/sdb: копирование таблицы разделов и переключение типа разделов
  • Очистка superblock’ов и создание деградированного массива на /dev/sdb
  • Копирование содержимого /boot на md0
  • Создание md1 и миграция LVM в зеркало
  • Настройка mdadm.conf и пересборка initrd
  • Установка GRUB в MBR обоих дисков
  • Тестирование и контрольные проверки
  • Критерии приёмки, чек-листы и план отката
  • Ментальные модели, когда этот подход не подходит
  • Decision-tree (Mermaid)

1 Предварительное примечание

В этом руководстве используется CentOS 5.3 с двумя дисками одинакового размера: /dev/sda (в рабочем состоянии) и /dev/sdb (пустой). На /dev/sda есть следующая схема разделов (типичное разбиение CentOS):

  • /dev/sda1 — /boot, ext3
  • /dev/sda2 — LVM PV (VolGroup00) с логическими томами LogVol00 (/) и LogVol01 (swap)

Желаемый финал:

  • /dev/md0 (из /dev/sda1 и /dev/sdb1) — /boot, ext3
  • /dev/md1 (из /dev/sda2 и /dev/sdb2) — LVM PV (VolGroup00) с логическими томами /

Ниже — выводы текущего состояния системы (оставлены в исходном виде для точности). Они демонстрируют, что в системе сейчас нет RAID-массивов и что /dev/sdb пуст:

df -h

[root@server1 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00 8.6G 1.4G 6.8G 17% /
/dev/sda1 99M 13M 82M 14% /boot
tmpfs 250M 0 250M 0% /dev/shm
[root@server1 ~]#

fdisk -l

[root@server1 ~]# fdisk -l

Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 1305 10377990 8e Linux LVM

Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/sdb doesn’t contain a valid partition table
[root@server1 ~]#

pvdisplay

[root@server1 ~]# pvdisplay
/dev/hdc: open failed: No medium found
— Physical volume —
PV Name /dev/sda2
VG Name VolGroup00
PV Size 9.90 GB / not usable 22.76 MB
Allocatable yes (but full)
PE Size (KByte) 32768
Total PE 316
Free PE 0
Allocated PE 316
PV UUID aikFEP-FB15-nB9C-Nfq0-eGMG-hQid-GOsDuj

[root@server1 ~]#

vgdisplay

[root@server1 ~]# vgdisplay
/dev/hdc: open failed: No medium found
— Volume group —
VG Name VolGroup00
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 9.88 GB
PE Size 32.00 MB
Total PE 316
Alloc PE / Size 316 / 9.88 GB
Free PE / Size 0 / 0
VG UUID ZPvC10-cN09-fI0S-Vc8l-vOuZ-wM6F-tlz0Mj

[root@server1 ~]#

lvdisplay

[root@server1 ~]# lvdisplay
/dev/hdc: open failed: No medium found
— Logical volume —
LV Name /dev/VolGroup00/LogVol00
VG Name VolGroup00
LV UUID vYlky0-Ymx4-PNeK-FTpk-qxvm-PmoZ-3vcNTd
LV Write Access read/write
LV Status available

LV Size 8.88 GB
Current LE 284
Segments 1
Allocation inherit
Read ahead sectors auto

  • currently set to 256
    Block device 253:0

— Logical volume —
LV Name /dev/VolGroup00/LogVol01
VG Name VolGroup00
LV UUID Ml9MMN-DcOA-Lb6V-kWPU-h6IK-P0ww-Gp9vd2
LV Write Access read/write
LV Status available

LV Size 1.00 GB
Current LE 32
Segments 1
Allocation inherit
Read ahead sectors auto

  • currently set to 256
    Block device 253:1

[root@server1 ~]#


2 Установка mdadm и загрузка модулей

mdadm — основной инструмент для управления программными RAID в Linux. Установим его и mkinitrd (centos 5 использует mkinitrd для создания initrd):

yum install mkinitrd mdadm

Для избежания перезагрузки заранее подгрузим модули ядра, которые могут пригодиться (добавляйте только те, которые нужны на вашей системе):

modprobe linear
modprobe multipath
modprobe raid0
modprobe raid1
modprobe raid5
modprobe raid6
modprobe raid10

Проверим, что ядро видит поддержки RAID:

cat /proc/mdstat

Ожидаемый вид (в примере):

[root@server1 ~]# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
unused devices:
[root@server1 ~]#

Примечание: строки в /proc/mdstat появятся динамически по мере создания md-устройств.

3 Подготовка /dev/sdb

Шаг 1 — скопировать таблицу разделов с /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: 1305 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 208844 208782 83 Linux
/dev/sdb2 208845 20964824 20755980 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 — теперь оба диска должны иметь одинаковую схему.

Шаг 2 — изменить тип разделов на /dev/sdb на Linux raid autodetect (код fd):

fdisk /dev/sdb

В fdisk используем команду t => номер раздела => код fd и затем w для сохранения. В примере это выполнено для /dev/sdb1 и /dev/sdb2.

После этого fdisk -l должен показать для /dev/sdb тип разделей fd (Linux raid autodetect).

Шаг 3 — убедиться, что на новых разделах /dev/sdb* нет старых RAID-метаданных:

mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdb2

Если на разделе не было метаданных md, mdadm вернёт сообщение вида “Unrecognised md component device” — это нормально.


4 Создание деградированного md-массива на /dev/sdb и перенос /boot

Почему деградированный массив? Мы не хотим сразу убирать /dev/sda из-под системы: создадим RAID1 на /dev/sdb в “degraded” режиме (второй компонент отсутствует). Это позволит сформировать /dev/md0 и скопировать туда данные с /dev/sda1 без остановки системы.

Шаги (безопасная последовательность):

  1. Создать md0, используя только /dev/sdb1 и пометив второй диск как missing:
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 missing

Примечание: в CentOS 5.3 метаданные по умолчанию были совместимы с GRUB, но при сомнениях можно явно указать –metadata=0.90. В новых системах используют metadata 1.2, но GRUB legacy не может читать 1.2 с начала диска. Для этого конкретного сценария (CentOS 5.3, старый GRUB) рекомендуют metadata 0.90, так как с ней суперблок размещён в конце раздела.

  1. Отформатировать md0 в ext3 и смонтировать во временную точку:
mkfs.ext3 /dev/md0
mount /dev/md0 /mnt/md0
  1. Скопировать содержимое /boot на новый md0. Используйте rsync, чтобы сохранить права, ссылки и т. п.:
rsync -avH --delete /boot/ /mnt/md0/

(Альтернатива: cp -a /boot/* /mnt/md0/)

  1. Обновить /etc/fstab — вместо /dev/sda1 укажите /dev/md0 (рекомендуется использовать UUID или метку, но для совместимости CentOS 5 можно записать /dev/md0). Перед изменением fstab — сделайте резервную копию.

Пример строки в /etc/fstab:

/dev/md0   /boot   ext3   defaults   1 2
  1. Отмонтировать /mnt/md0 и примонтировать как /boot, чтобы проверить корректность:
umount /mnt/md0
mount /boot
mount | grep boot

Если всё успешно, в /boot должны появиться те же файлы.

  1. Убедиться, что md0 собирается корректно и что в /proc/mdstat видно массив:
cat /proc/mdstat
mdadm --detail /dev/md0

5 Создание md1 и миграция LVM в зеркало

Миграция LVM PV на md1 состоит из следующих высокоуровневых шагов:

  1. Создать деградированный RAID1 из /dev/sdb2 (второй компонент missing):
mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdb2 missing
  1. Создать LVM PV на /dev/md1 и добавить в VolGroup00:
pvcreate /dev/md1
vgextend VolGroup00 /dev/md1
  1. Перенести данные с текущего PV (/dev/sda2) на /dev/md1 с помощью pvmove. Это позволит переместить все extents без остановки системы:
pvmove /dev/sda2 /dev/md1

Замечание: pvmove может занять время в зависимости от объёма данных и скорости дисков. Наблюдайте состояние через pvdisplay и lvdisplay.

  1. После успешного pvmove удалите старый PV из VG и обновите настройки:
vgreduce VolGroup00 /dev/sda2
  1. Теперь, когда все данные находятся на /dev/md1, вы можете добавить /dev/sda2 как второй компонент массива md1:
mdadm --add /dev/md1 /dev/sda2

Теперь md1 начнёт синхронизацию и в итоге станет полноценным RAID1 с двумя активными устройствами.

  1. Убедитесь, что LVM всё ещё видит LogVol’ы и что корневая FS доступна.
lvdisplay
pvdisplay
vgdisplay

6 Настройка mdadm.conf и пересборка initrd

Чтобы система при загрузке знала, какие md-массивы монтировать и как их собирать, надо сохранить конфигурацию mdadm и пересобрать initrd, чтобы md и LVM собирались до монтирования корня.

  1. Создать/обновить /etc/mdadm.conf:
echo "DEVICE partitions" > /etc/mdadm.conf
mdadm --detail --scan >> /etc/mdadm.conf

Проверьте /etc/mdadm.conf — там должны быть строки вида:

ARRAY /dev/md0 metadata=0.90 name=... UUID=...
ARRAY /dev/md1 metadata=0.90 name=... UUID=...
  1. Пересобрать initrd (mkinitrd используется в CentOS 5.x). Пример для текущего работающего ядра:
KVER=$(uname -r)
mkinitrd -f /boot/initrd-$KVER.img $KVER

Опция -f перезаписывает существующий initrd. Убедитесь, что в initrd включены модули md и LVM (mkinitrd обычно подхватывает нужные модули при наличии /etc/mdadm.conf и pvscan).

  1. Проверьте, что initrd создан и имеет корректный размер:
ls -l /boot/initrd-$(uname -r).img

7 Установка GRUB в MBR обоих дисков

Чтобы загрузка прошла при выходе из строя любого диска, установите GRUB в MBR обоих дисков (/dev/sda и /dev/sdb). В GRUB legacy это делают так:

  1. Запускаем grub-интерпретатор:
grub

В появившемся grub-приграничном режиме выполняем для /dev/sda:

root (hd0,0)
setup (hd0)
quit

и затем для /dev/sdb (в зависимости от порядка дисков в BIOS /dev/sdb может быть (hd1) — но grub-install распознаёт целевой девайс):

grub-install /dev/sda
grub-install /dev/sdb

Альтернатива: использовать grub-install и указать директорию с файлами grub (для CentOS 5):

grub-install --no-floppy /dev/sda
grub-install --no-floppy /dev/sdb
  1. Проверьте /boot/grub/grub.conf (или /etc/grub.conf) — он должен ссылаться на правильные корневые тома LVM, например:
default=0
timeout=5
title CentOS (2.6.x)
 root (hd0,0)
 kernel /vmlinuz-2.6.x ro root=/dev/mapper/VolGroup00-LogVol00 rhgb quiet
 initrd /initrd-2.6.x.img

Обычно kernel-lines не требуют изменений, если root указывает на LVM-том; главное — чтобы initrd содержал поддержку md и lvm.

  1. После установки GRUB в MBR обоих дисков перезагрузитесь для окончательной проверки (см. раздел тестирования).

8 Тестирование и контрольные проверки

Список проверок перед перезагрузкой:

  • /etc/fstab содержит запись /dev/md0 для /boot (и корректные UUID, если используете UUID);
  • /etc/mdadm.conf содержит секции ARRAY для md0 и md1;
  • initrd пересобран и содержит md и lvm (проверка — загрузка без ошибок на ранней стадии);
  • GRUB установлен в MBR обоих дисков;
  • Синхронизация md-синхронов идёт: cat /proc/mdstat показывает прогресс.

После перезагрузки:

  • Убедиться, что система загрузилась нормально;
  • Выполнить mdadm –detail /dev/md0 и /dev/md1 — оба должны показывать оба устройства (или один, если синхронизация ещё идёт);
  • Проверить состояние LVM (lvscan, vgdisplay, pvdisplay);
  • Проверить целостность /boot и корневой FS;
  • Смоделировать отказ диска: безопасно выключите систему и физически отсоедините один из дисков (или используйте mdadm –fail /dev/md1 /dev/sda2 и затем mdadm –remove). Затем перезагрузитесь и проверьте, что система всё ещё загружается и работает с оставшимся диском.

Откат симулированного отказа: снова подключите диск, выполните mdadm –add для возвращения диска в массив, дождитесь ресинхронизации.


9 Критерии приёмки

Система считается успешно преобразованной, если выполнены следующие пункты:

  • При полном отсутствии одного из физических дисков (MBR и разделы) система может загрузиться и корректно монтировать /boot и корневой LVM.
  • mdadm показывает, что массивы md0 и md1 в рабочем состоянии (ACTIVE).
  • Для всех логических томов VolGroup00 lvdisplay показывает статус available, и файловые системы не повреждены.
  • /etc/mdadm.conf и initrd содержат корректную конфигурацию и не выдают ошибок при загрузке.

10 План отката и Runbook при проблемах

Если что-то идёт не так — сохраняйте спокойствие и соблюдайте порядок:

  1. Не удаляйте исходные данные на /dev/sda до полной валидации миграции и загрузки с нового md-устройства.
  2. Если загрузка после изменений не удалась, загрузитесь с rescue-образа (LiveCD или установочного диска в rescue-mode), смонтируйте корень и /boot, проверьте /etc/fstab и /etc/mdadm.conf, восстановите initrd и заново установите GRUB в MBR исходного диска (/dev/sda).
  3. План отката: если перед началом вы сделали резервную копию /boot и LVM snapshot/backup, можно восстановить их с резервной копии.

Пример быстрого восстановления GRUB (rescue):

  • загрузиться с rescue CD
  • chroot /mnt/sysimage
  • grub-install /dev/sda
  • exit и перезагрузиться

11 Ментальные модели и когда этот подход не подходит

  • Подходит если: требуется отказоустойчивость на уровне дисков без аппаратного RAID-контроллера; есть возможность временно перераспределить I/O для синхронизации.
  • Не подходит если: минимальное время простоя критично и вы не можете позволить pvmove/ресинкрон при рабочей нагрузке; если используете очень старый загрузчик, не поддерживающий md1 в required metadata; если у вас нестандартная конфигурация (RAID на аппаратном контроллере, нестандартный LVM layout без свободных PE).

Альтернативы:

  • использовать аппаратный RAID на контроллере;
  • поднять кластеры репликации (DRBD + LVM) для более гибкой репликации на сетевом уровне;
  • установить горячее резервирование на уровне виртуализации (VM snapshots, миграция).

12 Полезные контрольные команды и cheat-sheet

Проверка md-состояния:

cat /proc/mdstat
mdadm --detail /dev/md0
mdadm --examine /dev/sda1
mdadm --examine /dev/sdb1

LVM-проверки:

pvdisplay
vgdisplay
lvdisplay
pvs
vgs
lvs

GRUB и initrd:

cat /boot/grub/grub.conf
ls -l /boot/initrd-$(uname -r).img
mkinitrd -f /boot/initrd-$(uname -r).img $(uname -r)
grub-install --no-floppy /dev/sda
grub-install --no-floppy /dev/sdb

Резервирование и откат:

  • всегда делайте резервную копию /boot и LVM snapshot перед pvmove;
  • проверяйте состояние бекапов перед проведением операций.

13 Риски и способы их уменьшения

  • Риск: потеря данных при ошибке в редактировании /etc/fstab или при форматировании. Митигейшн: резервные копии и тщательная проверка перед перезагрузкой.
  • Риск: длительная синхронизация приводит к деградации производительности. Митигейшн: выполняйте операции в часы низкой нагрузки, контролируйте ionice и nice, переносите тома поэтапно.
  • Риск: неправильная версия metadata мешает загрузке. Митигейшн: для CentOS 5.3 используйте metadata 0.90 для /boot-RAID, убедитесь, что initrd включает md модули.

14 Role-based checklist

Для инженера (прежде чем начать):

  • Сделать полный резерв.
  • Подготовить план отката.
  • Подготовить LiveCD/Rescue media.
  • Проверить свободное место и состояние SMART-дисков.

Для оператора в ходе работ:

  • Выполнять команды последовательно и фиксировать вывод.
  • Следить за /proc/mdstat и pvmove.
  • Не удалять старые разделы до успешного теста загрузки.

Для менеджера (готовность к изменению):

  • согласовать окно работ;
  • уведомить заинтересованных потребителей о риске краткой деградации производительности.

15 Decision-tree (Mermaid)

flowchart TD
  A[Начало: есть второй пустой диск?] -->|нет| B[Купить/добавить диск]
  A -->|да| C[Скопировать таблицу разделов]
  C --> D{Тип разделов /boot и LVM}
  D -->|стандартные| E[Изменить тип на fd и zero-superblock]
  D -->|нестандартные| F[Пересмотреть разметку, делать бекап]
  E --> G[Создать md0 из /dev/sdb1 'degraded']
  G --> H[Скопировать /boot на md0]
  H --> I[Изменить /etc/fstab на /dev/md0]
  I --> J[Создать md1 из /dev/sdb2 'degraded']
  J --> K[pvcreate /dev/md1; vgextend; pvmove]
  K --> L[mdadm --add /dev/md1 /dev/sda2]
  L --> M[Обновить /etc/mdadm.conf; mkinitrd]
  M --> N[Установить GRUB в /dev/sda и /dev/sdb]
  N --> O[Тест: reboot и simulate-failure]
  O --> P[Успех?]
  P -->|да| Z[Завершено]
  P -->|нет| R[Rescue: откат/восстановление]

16 Факт-бокс (ключевые числа и команды)

  • Совместимость metadata: для старого GRUB (CentOS5) рекомендуют metadata 0.90 (суперблок в конце раздела).
  • Основные команды: mdadm, pvcreate, vgextend, pvmove, vgreduce, mdadm –add, mkinitrd, grub-install.
  • Проверка статуса: cat /proc/mdstat, mdadm –detail, pvdisplay, lvdisplay.

17 Совместимость и заметки по миграции

  • Этот сценарий ориентирован на CentOS 5.x и GRUB legacy. На системах с GRUB2 и более новыми версиями mdadm стоит использовать metadata 1.2 по умолчанию и другой набор команд для initramfs.
  • На виртуальных машинах и современных дистрибутивах команды и поведение могут отличаться — проверяйте версии mdadm, mkinitrd, initramfs-tools.

18 Итог и рекомендации

Кратко: последовательность действий — подготовка диска, дублирование разметки, смена типа разделов, удаление старых md-метаданных, создание деградированных md0 и md1 на /dev/sdb, копирование /boot, создание PV на md1 и pvmove, добавление /dev/sda* к массивам, обновление /etc/mdadm.conf, пересборка initrd и установка GRUB в MBR обоих дисков. Всегда имейте резервную копию и тестовую среду.

Полезные проверочные шаги: cat /proc/mdstat, mdadm –detail, pvmove мониторинг, тестовая перезагрузка, симуляция отказа диска.

Notes

  • Перед началом работ рекомендуется полностью прочитать руководство и составить пошаговый план с ожидаемыми промежуточными состояниями.
  • Если вы сомневаетесь в совместимости metadata с GRUB, тестируйте на стенде.

Конец статьи.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Herodotus: механизм и защита Android‑трояна
Кибербезопасность

Herodotus: механизм и защита Android‑трояна

Включить новое меню «Пуск» в Windows 11
Windows руководство

Включить новое меню «Пуск» в Windows 11

Панель полей сводной таблицы в Excel — руководство
Excel

Панель полей сводной таблицы в Excel — руководство

Включить новое меню «Пуск» в Windows 11
Windows 11

Включить новое меню «Пуск» в Windows 11

Дубликаты Диспетчера задач в Windows 11 — как исправить
Windows

Дубликаты Диспетчера задач в Windows 11 — как исправить

История просмотров Reels в Instagram — как найти
Instagram

История просмотров Reels в Instagram — как найти