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

Создание RAID-массивов и перенос данных

7 min read Системное администрирование Обновлено 29 Sep 2025
Создание RAID и перенос данных
Создание RAID и перенос данных

TL;DR

Коротко: создаём два зеркальных RAID1-массива (/dev/md0 для /boot и /dev/md1 для LVM), временно используем “missing” для дисков, на которых система загружена, настраиваем mdadm, обновляем /etc/fstab и загрузчик GRUB, затем переносим данные с оригинальных дисков на новые RAID-диски и добавляем оставшиеся диски в массивы для синхронизации.

Важно: выполняйте операции с правами root и имейте резервную копию критичных данных перед изменением разделов, LVM или загрузчика.

Введение

В этом руководстве описан пошаговый процесс создания RAID1-массивов на существующем сервере CentOS и перенос на них данных, включая интеграцию с LVM и настройку загрузчика. Подход применим к похожим дистрибутивам Linux и использует инструменты mdadm, LVM (pvcreate, vgextend, pvmove и т. п.), и стандартный загрузчик GRUB.

Определения в одну строку:

  • RAID1 — зеркалирование: данные пишутся на два диска одновременно.
  • LVM — логический менеджер томов: абстракция над физическими дисками/разделами.
  • mdadm — утилита для управления программными RAID (Linux MD).

Основные цели этого шага

  • Создать /dev/md0 (для /boot) и /dev/md1 (для LVM) как RAID1 с временным плейсхолдером missing.
  • Создать файловую систему на /dev/md0 и подготовить /dev/md1 для LVM (pvcreate, vgextend).
  • Обновить конфигурацию mdadm, /etc/fstab, /etc/mtab и GRUB, чтобы система могла загрузиться с RAID.
  • Перенести данные с /dev/sda на /dev/sdb, затем добавить /dev/sda в массивы и дождаться синхронизации.

4 Создание RAID-массивов

Создадим два RAID1-массива: /dev/md0 и /dev/md1. Поскольку система сейчас загружена с /dev/sda1 и /dev/sda2, эти разделы нельзя сразу включить в массивы. При создании используем placeholder missing для временного отсутствующего устройства.

Выполните:

mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdb1
mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sdb2

Проверить состояние массивов можно через /proc/mdstat:

cat /proc/mdstat

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

[root@server1 ~]# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sdb2[1]
10377920 blocks [2/1] [_U]

md0 : active raid1 sdb1[1]
104320 blocks [2/1] [_U]

unused devices: 
[root@server1 ~]#

Примечание: [U] или [U] указывает, что массив деградирован (отсутствует один член), [UU] — массив в порядке.

Создание файловой системы на /dev/md0

Создаём ext3 для /boot на /dev/md0:

mkfs.ext3 /dev/md0

Подготовка /dev/md1 для LVM

Подготавливаем физический том на /dev/md1:

pvcreate /dev/md1

Добавляем его в существующую группу томов VolGroup00:

vgextend VolGroup00 /dev/md1

Проверить текущие PV и VG:

pvdisplay
vgdisplay

Пример вывода pvdisplay (теперь вы увидите /dev/md1 как PV):

[root@server1 ~]# pvdisplay
--- 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

--- Physical volume ---
PV Name               /dev/md1
VG Name               VolGroup00
PV Size               9.90 GB / not usable 22.69 MB
Allocatable           yes
PE Size (KByte)       32768
Total PE              316
Free PE               316
Allocated PE          0
PV UUID               u6IZfM-5Zj8-kFaG-YN8K-kjAd-3Kfv-0oYk7J

[root@server1 ~]#

Пример вывода vgdisplay (показывает обновлённую общую ёмкость VG):

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

[root@server1 ~]#

Обновление конфигурации mdadm и файловых таблиц

Создайте /etc/mdadm.conf на основании текущих массивов:

mdadm --examine --scan > /etc/mdadm.conf

Просмотрите файл:

cat /etc/mdadm.conf

В файле будут строки типа:

ARRAY /dev/md0 level=raid1 num-devices=2 UUID=0a96be0f:bf0f4631:a910285b:0f337164
ARRAY /dev/md1 level=raid1 num-devices=2 UUID=f9e691e2:8d25d314:40f42444:7dbe1da1

Обновление /etc/fstab

Откройте /etc/fstab и замените запись LABEL=/boot или /dev/sda1 на /dev/md0. Пример /etc/fstab:

/dev/VolGroup00/LogVol00 /                       ext3    defaults        1 1
/dev/md0             /boot                   ext3    defaults        1 2
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
/dev/VolGroup00/LogVol01 swap                    swap    defaults        0 0

Обновление /etc/mtab

Обновите /etc/mtab, заменив /dev/sda1 на /dev/md0 (параметры монтирования должны соответствовать текущему состоянию):

/dev/mapper/VolGroup00-LogVol00 / ext3 rw 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
devpts /dev/pts devpts rw,gid=5,mode=620 0 0
/dev/md0 /boot ext3 rw 0 0
tmpfs /dev/shm tmpfs rw 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0
sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw 0 0

Настройка GRUB для fallback-загрузки с RAID

Откройте /boot/grub/menu.lst (или /boot/grub/grub.conf в зависимости от вашей системы) и добавьте fallback=1 после default=0, чтобы загрузчик попытался второй вариант при сбое первого:

default=0
fallback=1

Найдите секции с записями kernel/initrd и продублируйте первую запись, изменив root (hd0,0) на root (hd1,0). Пример:

title CentOS (2.6.18-128.el5)
        root (hd1,0)
        kernel /vmlinuz-2.6.18-128.el5 ro root=/dev/VolGroup00/LogVol00
        initrd /initrd-2.6.18-128.el5.img
title CentOS (2.6.18-128.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-128.el5 ro root=/dev/VolGroup00/LogVol00
        initrd /initrd-2.6.18-128.el5.img

Объяснение: root (hd1,0) указывает GRUB на /dev/sdb, который уже участвует в RAID. Если прообраз с RAID не загрузится, будет использован fallback (hd0 -> /dev/sda).

Обновление initrd

Сделайте резервную копию текущего initrd и пересоздайте его, чтобы он включал mdadm/LVM-модули:

mv /boot/initrd-`uname -r`.img /boot/initrd-`uname -r`.img_orig
mkinitrd /boot/initrd-`uname -r`.img `uname -r`

Важно: убедитесь, что в initrd включены модули md и lvm, иначе система не сможет найти корневой том при загрузке с RAID.

5 Перенос данных на RAID

После обновления конфигурации можно переносить данные. Сначала переносим LVM-разделы, затем системный /boot.

Перемещение LVM PV на /dev/md1

Переносим содержимое /dev/sda2 в /dev/md1:

pvmove /dev/sda2 /dev/md1

Это может занять длительное время — дождитесь завершения. После переноса удаляем /dev/sda2 из VG и помечаем PV как неиспользуемый:

vgreduce VolGroup00 /dev/sda2
pvremove /dev/sda2

Проверим состояние PV:

pvdisplay

Ожидаемый вывод покажет только /dev/md1 как физический том:

[root@server1 ~]# pvdisplay
--- Physical volume ---
PV Name               /dev/md1
VG Name               VolGroup00
PV Size               9.90 GB / not usable 22.69 MB
Allocatable           yes (but full)
PE Size (KByte)       32768
Total PE              316
Free PE               0
Allocated PE          316
PV UUID               u6IZfM-5Zj8-kFaG-YN8K-kjAd-3Kfv-0oYk7J

[root@server1 ~]#

Изменение типа раздела и добавление /dev/sda2 в RAID

Измените тип раздела /dev/sda2 на Linux raid autodetect (код fd) с помощью fdisk:

fdisk /dev/sda

Пример интерактивных команд (вводимые вами отмечены стрелками в примере):

[root@server1 ~]# fdisk /dev/sda

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!

Внимание: иногда ядро не перечитывает таблицу разделов сразу (ошибка 16). В этом случае новые таблицы вступят в силу после перезагрузки. Однако добавление раздела в mdadm всё ещё возможно.

Добавим /dev/sda2 в /dev/md1:

mdadm --add /dev/md1 /dev/sda2

Проверяем синхронизацию:

cat /proc/mdstat

Пример прогресса синхронизации:

[root@server1 ~]# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sda2[2] sdb2[1]
10377920 blocks [2/1] [_U]
[====>................]  recovery = 23.4% (2436544/10377920) finish=2.0min speed=64332K/sec

md0 : active raid1 sdb1[1]
104320 blocks [2/1] [_U]

unused devices: 
[root@server1 ~]#

Совет: запустите мониторинг в реальном времени:

watch cat /proc/mdstat

Для выхода из watch: Ctrl+C.

Дождитесь, пока массив станет [UU]:

[root@server1 ~]# cat /proc/mdstat
...
md1 : active raid1 sda2[0] sdb2[1]
10377920 blocks [2/2] [UU]

md0 : active raid1 sdb1[1]
104320 blocks [2/1] [_U]

Монтирование /dev/md0 и копирование /boot

Создаём точку монтирования и монтируем /dev/md0:

mkdir /mnt/md0
mount /dev/md0 /mnt/md0

Проверяем вывод mount:

mount

Должны увидеть /dev/md0 на /boot и на /mnt/md0. Далее копируем содержимое /boot (который сейчас на /dev/sda1) на новый массив:

cd /boot
cp -dpRx . /mnt/md0

Копирование флагов: cp -dpRx сохраняет права, ссылки и рекурсивно копирует, не следуя симлинкам.

После копирования рекомендуется ещё раз проверить /mnt/md0 на наличие всех файлов, прав и совпадения с /boot.

Проверка и приёмка

Критерии приёмки — что должно быть подтверждено перед перезагрузкой и после неё:

  • /dev/md0 смонтирован и содержит корректные файлы ядра и initrd.
  • /dev/md1 как PV участвует в VolGroup00 и LV доступны.
  • /etc/mdadm.conf содержит ARRAY-записи для md0 и md1.
  • /etc/fstab и /etc/mtab указывают /dev/md0 для /boot.
  • GRUB содержит fallback=1 и обе записи kernel/root (hd1,0 и hd0,0).
  • После добавления /dev/sda в массивы оба массива имеют статус [UU].

Перед перезагрузкой: убедитесь, что у вас консольный доступ (IPMI/serial) или план восстановления, на случай, если загрузка не выполнится.

Команды — краткая шпаргалка

  • Создать RAID (placeholder missing): mdadm –create /dev/mdX –level=1 –raid-disks=2 missing /dev/sdY
  • Просмотр статуса RAID: cat /proc/mdstat
  • Создать FS: mkfs.ext3 /dev/md0
  • PV для LVM: pvcreate /dev/md1
  • Добавить PV в VG: vgextend VolGroup00 /dev/md1
  • Перенести PV: pvmove /dev/sda2 /dev/md1
  • Удалить PV из VG: vgreduce VolGroup00 /dev/sda2
  • Удалить PV: pvremove /dev/sda2
  • Добавить диск в массив: mdadm –add /dev/md1 /dev/sda2
  • Пересоздать initrd: mkinitrd /boot/initrd-uname -r.img uname -r

Типичные проблемы и способы их решения

  1. После пересоздания initrd загрузчик не находит LVM или md-массив:
    • Проверьте, что модули md и lvm включены в initrd. Повторно выполните mkinitrd и проверьте содержимое initrd (lsinitrd).
  2. Ядро не видит новую таблицу разделов после fdisk (ошибка при reread):
    • Это нормально; запись вступит в силу после перезагрузки. Если нельзя перезагружать, попробуйте partprobe, но это не всегда сработает.
  3. Массив долго синхронизируется:
    • Синхронизация зависит от размера и скорости дисков. Можно мониторить через /proc/mdstat. Не прерывайте процесс.
  4. После перезагрузки система не загружается с RAID:
    • Используйте доступную консоль/режим восстановления, проверьте наличие /etc/mdadm.conf, initrd и правильность GRUB-параметров.

Роли и чек-лист для команды (роль: системный администратор)

  • Подготовка:
    • Сделать резервную копию /boot и важных LVM-томов.
    • Убедиться в наличии доступа к консоли на случай сбоя загрузки.
  • Создание и настройка:
    • Создать md0 и md1 с missing.
    • Создать FS на md0 и pvcreate на md1.
    • Выполнить vgextend.
    • Обновить /etc/mdadm.conf, /etc/fstab, /etc/mtab, GRUB.
    • Пересоздать initrd.
  • Перенос данных:
    • Выполнить pvmove и дождаться завершения.
    • vgreduce и pvremove для старого диска.
    • Изменить тип раздела и добавить диск в RAID (mdadm –add).
    • Дождаться синхронизации массивов ([UU]).
    • Смонтировать md0 и скопировать /boot.
  • Завершение:
    • Протестировать загрузку (при возможности сначала с консолей или в maintenance-mode).
    • Наблюдать систему на предмет ошибок в логах (dmesg, /var/log/messages).

Мини-методология: почему сначала LVM, потом /boot

  1. LVM-томы обычно содержат корень и пользовательские данные; их перенос повышает доступность сразу после синхронизации.
  2. /boot хранит ядро и initrd; его перенос требуется до честной перезагрузки, поэтому мы копируем /boot после перемещения LVM и только когда MD и initrd готовы.

Диагностический поток (Mermaid)

flowchart TD
  A[Начало] --> B{Есть резервная копия?}
  B -- Да --> C[Создать md0 и md1 с missing]
  B -- Нет --> Z[Создать резервную копию]
  C --> D[mkfs.ext3 /dev/md0 и pvcreate /dev/md1]
  D --> E[vgextend VolGroup00 /dev/md1]
  E --> F[Обновить mdadm.conf, /etc/fstab, GRUB и initrd]
  F --> G[pvmove /dev/sda2 /dev/md1]
  G --> H[vgreduce и pvremove /dev/sda2]
  H --> I[Изменить тип /dev/sda2 и добавить в md1]
  I --> J[Дождаться синхронизации md]
  J --> K[mount /dev/md0 и копирование /boot]
  K --> L[Перезагрузка и проверка]
  L --> M{Система загрузилась?}
  M -- Да --> X[Завершение]
  M -- Нет --> Y[Использовать консоль/восстановление]

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

Ключевые моменты:

  • Всегда имейте резервную копию перед изменением разделов и загрузчика.
  • Создавайте массивы с placeholder missing, если активные разделы нельзя сразу добавить.
  • Обновляйте mdadm.conf и initrd, чтобы загрузчик мог найти RAID и LVM при старте.
  • После добавления всех дисков дождитесь, пока массивы перейдут в состояние [UU].

Примечание: этот процесс меняет структуру хранения данных — планируйте окно обслуживания и контролируйте нагрузку дисковой подсистемы во время синхронизаций.

Важно: при любом сомнении о состоянии загрузчика имейте внешний доступ к консоли или способ восстановить загрузку (LiveCD, rescue mode).

Сводка

  • Создали /dev/md0 и /dev/md1 с временным “missing” членом.
  • Подготовили /dev/md1 для LVM и расширили VolGroup00.
  • Обновили mdadm.conf, /etc/fstab, /etc/mtab и GRUB, пересоздали initrd.
  • Перенесли LVM-данные pvmove, удалили старый PV и добавили старый диск в массив для синхронизации.
  • Смонтировали /dev/md0 и скопировали содержимое /boot.

Критерии приёмки (напоминание): все массивы должны быть в статусе [UU], все LVM-тома доступны, и система должна успешно загружаться с RAID.

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

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

Резервная копия реестра Windows — как создать
Windows

Резервная копия реестра Windows — как создать

Как посмотреть понравившиеся публикации в Instagram
Социальные сети

Как посмотреть понравившиеся публикации в Instagram

Голосовой ввод в WhatsApp: Gboard и SwiftKey
Мессенджеры

Голосовой ввод в WhatsApp: Gboard и SwiftKey

Поиск общих фильмов и сотрудников на IMDb
Кино

Поиск общих фильмов и сотрудников на IMDb

Цитата на рабочем столе с Rainmeter
How-to

Цитата на рабочем столе с Rainmeter

NFS на AlmaLinux 9 — сервер и клиент
Linux

NFS на AlmaLinux 9 — сервер и клиент