Создание RAID-массивов и перенос данных
Что будет сделано
- Создание двух 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)
- Если после смены GRUB система не загружается с RAID — при старте выбрать загрузку с /dev/sda (fallback).
- Войти с rescue-режима или LiveCD, смонтировать /boot с /dev/sda1 и восстановить предыдущие записи menu.lst.
- Вернуть original initrd: mv /boot/initrd-
uname -r
.img_orig /boot/initrd-uname -r
.img и обновить конфигурации. - Если pvmove прерван — не отключайте диск; изучите логи и завершите перенос командой pvmove, либо восстановите из бэкапа.
Итог
Последовательные шаги: создать RAID (degraded), подготовить LVM, обновить конфигурации загрузки и fstab, синхронизировать массивы и корректно скопировать /boot. Внимательно следите за выводом команд (pvdisplay, vgdisplay, /proc/mdstat) и имейте резервную копию перед началом.
Похожие материалы
Отключить уведомления macOS High Sierra

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

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

Конвертировать Spotify в MP3 без премиум
RAID в Linux: создание и перенос данных
