Создание RAID‑массивов и перенос данных
Введение
В этой инструкции описан практический пример создания двух RAID1‑массивов на существующем сервере, один «не‑LVM» для /boot и один для LVM‑томов. Описанные действия сохраняют текущую загрузочную систему, позволяют постепенно переместить данные и затем восстановить зеркалирование на второй диск. Краткие определения:
- RAID1 — зеркалирование данных между дисками. Гарантирует доступность при отказе одного диска.
- LVM — слой логического управления томами поверх физических устройств; позволяет перемещать PV и динамически управлять LV.
Важно: все команды выполняются от root или через sudo; перед изменениями рекомендуется сделать резервную копию важных данных.
4 Создание наших RAID‑массивов
Теперь создадим RAID‑массивы /dev/md0 и /dev/md1. /dev/sdb1 добавится в /dev/md0, /dev/sdb5 — в /dev/md1. /dev/sda1 и /dev/sda5 сейчас нельзя добавить, потому что система загружается с них. Поэтому при создании используем 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/sdb5После выполнения команды статус массивов можно проверить командой:
cat /proc/mdstatОжидаемый вывод покажет два деградированных массива: [U] или [U] означает, что массив деградирован; [UU] — массив в порядке:
server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sdb5[1]
4988032 blocks [2/1] [_U]
md0 : active raid1 sdb1[1]
248896 blocks [2/1] [_U]
unused devices:
server1:~# Создание файловой системы на /dev/md0
На нек‑LVM массиве /dev/md0 создаём файловую систему ext3:
mkfs.ext3 /dev/md0Подготовка LVM на /dev/md1
Подготовим /dev/md1 для LVM:
pvcreate /dev/md1Добавляем /dev/md1 в группу томов debian:
vgextend debian /dev/md1Проверим физические тома:
pvdisplayОжидаемый вывод будет похож на этот (в примере видно, что /dev/sda5 всё ещё в группе, а /dev/md1 пуст и доступен):
server1:~# pvdisplay — Physical volume — PV Name /dev/sda5 VG Name debian PV Size 4.75 GB / not usable 0 Allocatable yes (but full) PE Size (KByte) 4096 Total PE 1217 Free PE 0 Allocated PE 1217 PV UUID l2G0xJ-b9JF-RLsZ-bbcd-yRGd-kHfl-QFSpdg
— Physical volume — PV Name /dev/md1 VG Name debian PV Size 4.75 GB / not usable 0 Allocatable yes PE Size (KByte) 4096 Total PE 1217 Free PE 1217 Allocated PE 0 PV UUID YAnBb4-NJdb-aM68-Ks22-g851-IshG-bNgOXp
server1:~#
Проверим группу томов:
vgdisplayОжидаемый вывод:
server1:~# vgdisplay — Volume group — VG Name debian 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.51 GB PE Size 4.00 MB Total PE 2434 Alloc PE / Size 1217 / 4.75 GB Free PE / Size 1217 / 4.75 GB VG UUID j5BV1u-mQSa-Q0KW-PH4n-VHab-DB92-LyxFIU
server1:~#
Обновление конфигурации mdadm
Файл /etc/mdadm/mdadm.conf пока не содержит информации о новых массивах. Сохраним оригинал и дополним автоматически сгенерированной информацией о массивах:
cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf_orig
mdadm --examine --scan >> /etc/mdadm/mdadm.confВывести содержимое файла можно командой:
cat /etc/mdadm/mdadm.confВ файле вы увидите информацию о массивах, например:
| # mdadm.conf # # Please refer to mdadm.conf(5) for information about this file. # # by default, scan all partitions (/proc/partitions) for MD superblocks. # alternatively, specify devices to scan, using wildcards if desired. DEVICE partitions # auto-create devices with Debian standard permissions CREATE owner=root group=disk mode=0660 auto=yes # automatically tag new arrays as belonging to the local system HOMEHOST |
Примечание: в некоторых системах путь mdadm.conf может отличаться; проверьте путь и служебные скрипты сборки initramfs.
Обновление /etc/fstab и /etc/mtab
Замените в /etc/fstab запись /dev/sda1 на /dev/md0, чтобы /boot монтировался с RAID‑массива при загрузке:
vi /etc/fstab| # /etc/fstab: static file system information. # # |
Аналогично обновите /etc/mtab (или выполните монтирование и let system update it автоматически):
vi /etc/mtab| /dev/mapper/debian-root / ext3 rw,errors=remount-ro 0 0 tmpfs /lib/init/rw tmpfs rw,nosuid,mode=0755 0 0 proc /proc proc rw,noexec,nosuid,nodev 0 0 sysfs /sys sysfs rw,noexec,nosuid,nodev 0 0 udev /dev tmpfs rw,mode=0755 0 0 tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0 devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0 0 /dev/md0 /boot ext3 rw 0 0 |
Настройка GRUB для резервной загрузки
Откройте /boot/grub/menu.lst и добавьте fallback 1 сразу после default 0:
vi /boot/grub/menu.lst| [...] default 0 fallback 1 [...] |
Это позволит системе попробовать второй запись загрузчика, если первая не загрузится.
В том же файле скопируйте первую запись с ядром и вставьте её перед первой существующей записью, заменив root (hd0,0) на root (hd1,0):
| [...] ## ## End Default Options ## title Debian GNU/Linux, kernel 2.6.18-6-686 root (hd1,0) kernel /vmlinuz-2.6.18-6-686 root=/dev/mapper/debian-root ro initrd /initrd.img-2.6.18-6-686 savedefault title Debian GNU/Linux, kernel 2.6.18-6-686 root (hd0,0) kernel /vmlinuz-2.6.18-6-686 root=/dev/mapper/debian-root ro initrd /initrd.img-2.6.18-6-686 savedefault title Debian GNU/Linux, kernel 2.6.18-6-686 (single-user mode) root (hd0,0) kernel /vmlinuz-2.6.18-6-686 root=/dev/mapper/debian-root ro single initrd /initrd.img-2.6.18-6-686 savedefault ### END DEBIAN AUTOMAGIC KERNELS LIST |
root (hd1,0) указывает на /dev/sdb, который уже входит в наши RAID‑массивы. После перезагрузки система сначала попробует загрузиться с RAID; если загрузка неудачна, сработает fallback и система загрузится с /dev/sda.
Пересбор initramfs
Обновите ramdisk, чтобы в него попали новые конфигурации md и LVM:
update-initramfs -u5 Перенос данных на RAID‑массивы
После изменения конфигураций можно копировать содержимое /dev/sda на /dev/sdb, включая изменения конфигов.
Перемещение LVM‑данных на /dev/md1
Для переноса физических томов LVM используйте pvmove:
pvmove /dev/sda5 /dev/md1Это может занять значительное время — дождитесь завершения.
После окончания удаляем /dev/sda5 из группы:
vgreduce debian /dev/sda5И отмечаем /dev/sda5 как не‑LVM:
pvremove /dev/sda5Проверим pvdisplay — теперь /dev/md1 должен содержать все PE:
server1:~# pvdisplay — Physical volume — PV Name /dev/md1 VG Name debian PV Size 4.75 GB / not usable 0 Allocatable yes (but full) PE Size (KByte) 4096 Total PE 1217 Free PE 0 Allocated PE 1217 PV UUID YAnBb4-NJdb-aM68-Ks22-g851-IshG-bNgOXp
server1:~#
Присоединение старого раздела в RAID и синхронизация
Поменяем тип раздела /dev/sda5 на Linux raid autodetect и добавим его в md1.
fdisk /dev/sdaПример интерактивной сессии (нажмите t, затем номер 5, затем введите fd, затем w):
server1:~# fdisk /dev/sda
Command (m for help): <- t Partition number (1-5): <- 5 Hex code (type L to list codes): <- fd Changed system type of partition 5 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. server1:~#
Добавим раздел в массив:
mdadm --add /dev/md1 /dev/sda5Проверим статус синхронизации:
cat /proc/mdstatПример хода синхронизации:
server1:~# cat /proc/mdstat Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md1 : active raid1 sda5[2] sdb5[1] 4988032 blocks [2/1] [_U] [==========>……….] recovery = 52.5% (2623232/4988032) finish=0.5min speed=74705K/sec
md0 : active raid1 sdb1[1] 248896 blocks [2/1] [_U]
unused devices:
Можно использовать watch для наблюдения:
watch cat /proc/mdstat
Дождитесь, пока синхронизация завершится — массив покажет [UU] для md1.
### Монтирование и копирование /boot
Создаём точку монтирования и монтируем /dev/md0:
mkdir /mnt/md0 mount /dev/md0 /mnt/md0
Проверим вывод mount — /dev/md0 должен быть смонтирован на /boot и /mnt/md0:
server1:~# mount
/dev/mapper/debian-root on / type ext3 (rw,errors=remount-ro)
...
/dev/md0 on /boot type ext3 (rw)
/dev/md0 on /mnt/md0 type ext3 (rw)
server1:~#
Теперь копируем содержимое /boot (выполняется из /boot):
cd /boot cp -dpRx . /mnt/md0
Копирование флагов, атрибутов и симлинков выполняется флагами cp -dpRx.
Важно: после успешного копирования можно обновить GRUB на обоих дисках (установить загрузчик на /dev/sda и /dev/sdb) для полной отказоустойчивости.
Примечание: синтаксис и команды grub-install/update-grub зависят от версии GRUB и дистрибутива.
## Когда этот подход не подходит
- На системах с нестандартной разметкой или нестандартными загрузчиками (например, UEFI + GPT и старые инструкции для GRUB legacy) порядок действий отличается.
- Если у вас единственный накопитель без горячей замены, сначала необходимо добавить второй диск.
- На больших объёмах перенос pvmove может занимать очень много времени; оцените окно обслуживания.
## Альтернативные подходы
- Использовать RAID10 или RAID6 для более высокой отказоустойчивости и производительности (подходит для нескольких дисков).
- Создать RAID только для / и /boot с помощью md и затем разместить LVM на RAID (вариант, обратный описанному).
- Использовать аппаратный RAID-контроллер — снимает нагрузку с CPU, но снижает гибкость и переносимость.
## Мини‑методология: чеклист перед началом работ
1. Сделать резервную копию критичных данных.
2. Проверить состояние SMART дисков.
3. Убедиться, что есть второй физический диск с подходящей разметкой.
4. Подготовить live‑USB или доступную консоль для восстановления.
5. Провести все команды сначала в тестовой среде, если возможно.
## Ролевые обязанности (кто что делает)
- Системный администратор: выполняет команды, проверяет логи и mdstat, обновляет GRUB и initramfs.
- Оператор хранения: проверяет SMART, физическую установку дисков, кабели и RAID‑контроллеры.
- Руководитель смены: утверждает окно обслуживания и подтверждает откатные планы.
## Дерево принятия решения (Mermaid)
flowchart TD A[Начать: есть второй диск?] –>|Да| B[Создать md0/md1 с missing] A –>|Нет| Z[Добавить диск] B –> C[Создать FS на md0 и pvcreate md1] C –> D[vgextend debian /dev/md1] D –> E[Скопировать /boot -> md0] E –> F[Запустить pvmove /dev/sda5 /dev/md1] F –> G[Добавить /dev/sda5 в md1 и дождаться синхр.] G –> H[Установить GRUB на оба диска и обновить initramfs] H –> I[Тестирование и перезагрузка]
## Краткий глоссарий (1‑строчно)
- mdadm — утилита для управления программными RAID (Linux MD).
- pvcreate/vgextend/pvmove — LVM‑команды для создания PV, расширения VG и миграции данных.
- initramfs — начальный RAM‑образ, содержащий модули и скрипты для загрузки системы.
## Итог и проверка
- Проверьте /proc/mdstat — массивы должны быть [UU].
- Убедитесь, что /boot монтируется с /dev/md0 после перезагрузки.
- Проверьте, что все PV находятся на /dev/md1 и свободных PE нет на старом /dev/sda5.
Важное: если после перезагрузки система не грузится с RAID, используйте fallback, проверьте конфигурацию GRUB и содержимое /mnt/md0, затем откатите изменения согласно резервной копии.
Краткое резюме и следующие шаги в разделе «Ключевые выводы».
---
Ключевые выводы:
- Создайте массивы с missing, затем последовательно добавляйте старые разделы.
- Обновите mdadm.conf, fstab, mtab, GRUB и initramfs.
- Перенесите LVM через pvmove, затем vgreduce и pvremove.
- Дождитесь полной синхронизации md‑массивов прежде чем считать работу завершённой.Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента