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

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

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

Что будет сделано

  • Создание двух RAID1-массивов в режиме degraded (placeholder missing).
  • Форматирование /dev/md0 и подготовка /dev/md1 под LVM.
  • Обновление конфигураций mdadm, fstab, mtab и GRUB для загрузки с RAID.
  • Перенос LVM-данных с /dev/sda2 на /dev/md1 и синхронизация /dev/md1.
  • Копирование содержимого /boot на /dev/md0.

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

Теперь создадим RAID-массивы /dev/md0 и /dev/md1. /dev/sdb1 будет добавлен в /dev/md0, а /dev/sdb2 — в /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

Команда

cat /proc/mdstat

должна сейчас показать, что у вас два деградированных RAID-массива ([U] или [U] — массив деградирован, [UU] — массив в порядке):

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

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

unused devices: 
[root@server1 ~]#

Создание файловой системы и подготовка LVM

Создаём файловую систему ext3 на нашем не-LVM RAID /dev/md0:

mkfs.ext3 /dev/md0

Подготовка LVM на RAID /dev/md1 — сначала создаём PV:

pvcreate /dev/md1

Затем добавляем /dev/md1 в volume group VolGroup00:

vgextend VolGroup00 /dev/md1

Проверяем pvdisplay — вывод будет похож на этот (обратите внимание на /dev/md1 как PV):

[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

  --- Physical volume ---
  PV Name               /dev/md1
  VG Name               VolGroup00
  PV Size               4.80 GB / not usable 22.25 MB
  Allocatable           yes
  PE Size (KByte)       32768
  Total PE              153
  Free PE               153
  Allocated PE          0
  PV UUID               pS3xiy-AEnZ-p3Wf-qY2D-cGus-eyGl-03mWyg

[root@server1 ~]#

А вывод vgdisplay должен показать увеличенный VG и свободный PE для будущих логических томов:

[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               9.56 GB
  PE Size               32.00 MB
  Total PE              306
  Alloc PE / Size       152 / 4.75 GB
  Free  PE / Size       154 / 4.81 GB
  VG UUID               jJj1DQ-SvKY-6hdr-3MMS-8NOd-pb3l-lS7TA1

[root@server1 ~]#

Обновление конфигурации mdadm и fstab

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

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

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

cat /etc/mdadm.conf

В файле вы должны увидеть сведения о двух (деградированных) массивах, например:

ARRAY /dev/md0 level=raid1 num-devices=2 UUID=7d2bf9c3:7cd9df21:f782dab8:9212d7cb
ARRAY /dev/md1 level=raid1 num-devices=2 UUID=d93a2387:6355b5c5:25ed3e50:2a0e4f96

Далее модифицируем /etc/fstab — замените LABEL=/boot на /dev/md0, чтобы файл выглядел так:

vi /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

Также замените /dev/sda1 на /dev/md0 в /etc/mtab:

vi /etc/mtab
/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 для загрузки с RAID

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

vi /boot/grub/menu.lst
default=0
fallback=1

Скопируйте первый блок описания ядра и вставьте его перед первым существующим, заменив root (hd0,0) на root (hd1,0):

[...]
title Fedora (2.6.23.1-42.fc8)
        root (hd1,0)
        kernel /vmlinuz-2.6.23.1-42.fc8 ro root=/dev/VolGroup00/LogVol00
        initrd /initrd-2.6.23.1-42.fc8.img
title Fedora (2.6.23.1-42.fc8)
        root (hd0,0)
        kernel /vmlinuz-2.6.23.1-42.fc8 ro root=/dev/VolGroup00/LogVol00
        initrd /initrd-2.6.23.1-42.fc8.img
[...]

root (hd1,0) — это /dev/sdb, который уже участвует в наших RAID-массивах. После перезагрузки система попробует загрузиться с RAID; при неудаче произойдёт загрузка с /dev/sda (fallback=1).

Обновление initrd

Перемещаем текущий initrd и создаём новый для активного ядра:

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

Перенос данных на RAID-массивы

После изменения конфигураций можно скопировать содержимое диска /dev/sda на /dev/sdb (включая сделанные изменения).

Чтобы перенести LVM-раздел /dev/sda2 на LVM RAID /dev/md1, используйте pvmove:

pvmove /dev/sda2 /dev/md1

Это может занять некоторое время — подождите.

Затем удалите /dev/sda2 из volume group VolGroup00:

vgreduce VolGroup00 /dev/sda2

И сообщите системе, что /dev/sda2 больше не используется как PV:

pvremove /dev/sda2

pvdisplay теперь должен показать только /dev/md1 как PV:

[root@server1 ~]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/md1
  VG Name               VolGroup00
  PV Size               4.80 GB / not usable 22.25 MB
  Allocatable           yes
  PE Size (KByte)       32768
  Total PE              153
  Free PE               1
  Allocated PE          152
  PV UUID               pS3xiy-AEnZ-p3Wf-qY2D-cGus-eyGl-03mWyg

[root@server1 ~]#

Далее изменим тип раздела /dev/sda2 на Linux raid autodetect и добавим его в /dev/md1:

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!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
[root@server1 ~]#

Добавляем /dev/sda2 в 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]
      5036288 blocks [2/1] [_U]
      [=====>...............]  recovery = 28.8% (1454272/5036288) finish=2.8min speed=21132K/sec

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

unused devices: 
[root@server1 ~]#

Чтобы наблюдать процесс в реальном времени, можно запустить:

watch cat /proc/mdstat

Ожидайте завершения синхронизации. После неё вывод будет показывать [UU] для массива md1:

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

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

unused devices: 
[root@server1 ~]#

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

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

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

Проверяем, что массив смонтирован:

mount

Пример вывода:

[root@server1 ~]# mount
/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/md0 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/dev/md0 on /mnt/md0 type ext3 (rw)
[root@server1 ~]#

Теперь копируем содержимое /boot на /mnt/md0:

cd /boot
cp -dpRx . /mnt/md0

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

  • mdadm показывает оба массива и состояние [UU] для синхронизированных дисков.
  • /boot успешно смонтирован с /dev/md0 и содержит корректные файлы ядра и initrd.
  • LVM использует /dev/md1 как PV и VG содержит ожидаемое количество PE.
  • После перезагрузки система загружается с RAID (/dev/sdb) или с запасного /dev/sda при ошибке.

Важно

  • Перед началом обязательно сделайте полную резервную копию критичных данных.
  • Изменение таблицы разделов может потребовать перезагрузки для корректного применения.
  • Не прерывайте pvmove и синхронизацию mdadm без крайней необходимости.

Когда это не работает (обратные примеры)

  • Если pvcreate не сработал: проверьте, не размечен ли диск другим PV или LVM метаданными.
  • Если mdadm –add не принимает /dev/sda2: убедитесь, что тип раздела — fd (Linux raid autodetect).
  • Если GRUB не загружается с RAID: проверьте правильность записей root (hd1,0) и наличие initrd для ядра.

Альтернативные подходы

  • Использовать RAID10 вместо RAID1 для большей производительности и отказоустойчивости при достаточном количестве дисков.
  • Прямо установить систему на LVM поверх RAID при инсталляции, чтобы избежать рукопашных переносов.
  • Применять современные файловые системы (например, xfs) если требуется, но учтите совместимость с initrd и GRUB.

Чек-лист по ролям

Системный администратор:

  • Создать RAID командами mdadm.
  • Проверить /proc/mdstat и запустить mkfs для /dev/md0.
  • Выполнить pvcreate и vgextend.
  • Обновить /etc/mdadm.conf, /etc/fstab, /etc/mtab и /boot/grub/menu.lst.
  • Пересобрать initrd и протестировать загрузку.

Оператор резервного копирования:

  • Сделать полную резервную копию /boot и критичных LVM-томов до начала работ.
  • Контролировать прогресс pvmove и синхронизаций mdadm.
  • Проверить целостность данных после копирования.

Краткий глоссарий

  • mdadm — утилита управления программными RAID в Linux.
  • LVM — логический менеджер томов (Logical Volume Manager).
  • pvcreate/vgextend/pvmove — команды управления физическими и логическими томами LVM.
  • /proc/mdstat — виртуальный файл с текущим состоянием RAID-массивов.

План отката (runbook)

  1. Если после смены GRUB система не загружается с RAID — при старте выбрать загрузку с /dev/sda (fallback).
  2. Войти с rescue-режима или LiveCD, смонтировать /boot с /dev/sda1 и восстановить предыдущие записи menu.lst.
  3. Вернуть original initrd: mv /boot/initrd-uname -r.img_orig /boot/initrd-uname -r.img и обновить конфигурации.
  4. Если pvmove прерван — не отключайте диск; изучите логи и завершите перенос командой pvmove, либо восстановите из бэкапа.

Итог

Последовательные шаги: создать RAID (degraded), подготовить LVM, обновить конфигурации загрузки и fstab, синхронизировать массивы и корректно скопировать /boot. Внимательно следите за выводом команд (pvdisplay, vgdisplay, /proc/mdstat) и имейте резервную копию перед началом.

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

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

Отключить уведомления macOS High Sierra
Mac

Отключить уведомления macOS High Sierra

Как создать эффектный плакат — 6 шагов
Дизайн

Как создать эффектный плакат — 6 шагов

Как посмотреть дизлайки на YouTube — пошагово
YouTube

Как посмотреть дизлайки на YouTube — пошагово

Конвертировать Spotify в MP3 без премиум
Музыка

Конвертировать Spotify в MP3 без премиум

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

RAID в Linux: создание и перенос данных

Как создать мобильное приложение в 2023 году
Мобильные приложения

Как создать мобильное приложение в 2023 году