Создание RAID и перенос данных на RAID в Debian
Введение
Ниже — пошаговая инструкция по созданию RAID1-массивов на Debian, интеграции одного из массивов в LVM и безопасному переносу данных с диска /dev/sda на новый диск /dev/sdb. Команды и примеры вывода сохранены неизменными для удобства воспроизведения.
Важно: некоторые операции выполняются на работающей системе — используйте заглушку missing при создании массива, если текущий диск занят.
Создание RAID-массивов (/dev/md0 и /dev/md1)
Добавим /dev/sdb1 в /dev/md0 и /dev/sdb5 в /dev/md1. Так как /dev/sda1 и /dev/sda5 в данный момент используются системой, при создании массивов укажем временную метку 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Проверить состояние RAID можно через:
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
Файловая систему ext3 создаём на не-LVM массиве /dev/md0:
mkfs.ext3 /dev/md0Подготовка /dev/md1 для LVM
Подготавливаем /dev/md1 как физический том LVM:
pvcreate /dev/md1Добавляем /dev/md1 в volume group debian:
vgextend debian /dev/md1Проверить физические тома:
pvdisplayПример ожидаемого вывода (состояние до окончательной синхронизации):
server1:~# pvdisplay
--- Physical volume ---
PV Name /dev/sda5
VG Name debian
PV Size 4.76 GB / not usable 3.24 MB
Allocatable yes (but full)
PE Size (KByte) 4096
Total PE 1217
Free PE 0
Allocated PE 1217
PV UUID biVzjB-5f9A-yeZx-WDgY-RWaH-d2Ek-xlp4to
--- Physical volume ---
PV Name /dev/md1
VG Name debian
PV Size 4.76 GB / not usable 3.12 MB
Allocatable yes
PE Size (KByte) 4096
Total PE 1217
Free PE 1217
Allocated PE 0
PV UUID rwRQ4h-Cxii-coUC-ibA0-2tV0-umae-3XC083
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 4UfyCV-s32P-uZ5R-asRH-9Jjg-pkF6-d5wi32
server1:~#Обновление конфигураций 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 используется демоном mdadm для автоматического собирания массивов при загрузке.
Обновление /etc/fstab
Замените /dev/sda1 на /dev/md0 в /etc/fstab, чтобы загрузка использовала массив /dev/md0 для /boot:
vi /etc/fstab| # /etc/fstab: static file system information. # # |
Аналогично замените запись в /etc/mtab (пока вручную, затем система будет поддерживать её автоматически):
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 [...] |
Это означает, что если первый (номер 0) образ не загрузится, загрузчик попытается второй образ.
Далее скопируйте первую секцию ядра и вставьте её перед первой существующей, поменяв root (hd0,0) на root (hd1,0):
| [...] ## ## End Default Options ## title Debian GNU/Linux, kernel 2.6.26-2-686 root (hd1,0) kernel /vmlinuz-2.6.26-2-686 root=/dev/mapper/debian-root ro quiet initrd /initrd.img-2.6.26-2-686 title Debian GNU/Linux, kernel 2.6.26-2-686 root (hd0,0) kernel /vmlinuz-2.6.26-2-686 root=/dev/mapper/debian-root ro quiet initrd /initrd.img-2.6.26-2-686 title Debian GNU/Linux, kernel 2.6.26-2-686 (single-user mode) root (hd0,0) kernel /vmlinuz-2.6.26-2-686 root=/dev/mapper/debian-root ro single initrd /initrd.img-2.6.26-2-686 title Debian GNU/Linux, kernel 2.6.26-1-686 root (hd0,0) kernel /vmlinuz-2.6.26-1-686 root=/dev/mapper/debian-root ro quiet initrd /initrd.img-2.6.26-1-686 title Debian GNU/Linux, kernel 2.6.26-1-686 (single-user mode) root (hd0,0) kernel /vmlinuz-2.6.26-1-686 root=/dev/mapper/debian-root ro single initrd /initrd.img-2.6.26-1-686 ### END DEBIAN AUTOMAGIC KERNELS LIST |
root (hd1,0) соответствует /dev/sdb, который уже задействован в RAID. После перезагрузки система попытается загрузиться с RAID; если это не удастся, сработает fallback на /dev/sda.
Обновление initramfs
Обновите initramfs, чтобы он содержал актуальные настройки RAID/LVM:
update-initramfs -uПеренос данных на RAID (/dev/md1 и /dev/md0)
После обновления конфигураций можно переносить данные.
Перенос LVM томов с /dev/sda5 на /dev/md1
Переносим содержимое физического тома /dev/sda5 на /dev/md1:
pvmove /dev/sda5 /dev/md1Операция может занять значительное время — дождитесь её завершения.
После завершения удаляем /dev/sda5 из volume group debian:
vgreduce debian /dev/sda5И говорим системе больше не использовать /dev/sda5 как PV:
pvremove /dev/sda5Проверяем pvdisplay — теперь в списке должен остаться только /dev/md1:
server1:~# pvdisplay
--- Physical volume ---
PV Name /dev/md1
VG Name debian
PV Size 4.76 GB / not usable 3.12 MB
Allocatable yes (but full)
PE Size (KByte) 4096
Total PE 1217
Free PE 0
Allocated PE 1217
PV UUID rwRQ4h-Cxii-coUC-ibA0-2tV0-umae-3XC083
server1:~#Добавление /dev/sda5 в RAID-массив /dev/md1
Сменим тип раздела /dev/sda5 на Linux raid autodetect и добавим его в массив /dev/md1:
fdisk /dev/sdaПример интерактивной сессии:
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 = 33.4% (1672128/4988032) finish=0.5min speed=104508K/sec
md0 : active raid1 sdb1[1]
248896 blocks [2/1] [_U]
unused devices:
server1:~# Вы можете использовать:
watch cat /proc/mdstatчтобы следить за прогрессом в реальном времени. Нажмите CTRL+C, чтобы выйти из watch.
Дождитесь окончания синхронизации — после этого массив /dev/md1 должен быть в состоянии [UU]:
server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sda5[0] sdb5[1]
4988032 blocks [2/2] [UU]
md0 : active raid1 sdb1[1]
248896 blocks [2/1] [_U]
unused devices:
server1:~# Монтирование массива /dev/md0 и копирование /boot
Создаём точку монтирования и монтируем /dev/md0:
mkdir /mnt/md0mount /dev/md0 /mnt/md0Проверим, что массив смонтирован:
mountПример вывода:
server1:~# mount
/dev/mapper/debian-root on / type ext3 (rw,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
/dev/md0 on /boot type ext3 (rw)
/dev/md0 on /mnt/md0 type ext3 (rw)
server1:~#Копируем содержимое /boot на /dev/md0 (смонтирован в /mnt/md0):
cd /boot
cp -dpRx . /mnt/md0Важно: ключи cp (-dpRx) сохраняют разрешения, символьные ссылки и рекурсивно копируют содержимое. Проверьте, что файлы скопированы корректно перед перезагрузкой.
Контрольные проверки и критерии приёмки
Критерии приёмки:
- /proc/mdstat показывает [UU] для /dev/md1 и как минимум [_U] для /dev/md0 до перезагрузки; после добавления /dev/sda1 и синхронизации — [UU] для обоих.
- /boot доступен с /dev/md0: запись в /etc/fstab и /etc/mtab корректны.
- grub настроен с fallback и имеет запись root (hd1,0).
- initramfs обновлён (update-initramfs прошёл без ошибок).
- После перезагрузки система загружается с RAID; при отказе — с fallback на первый диск.
Шпаргалка — основные команды
- Создание RAID: mdadm –create /dev/mdX –level=1 –raid-disks=2 missing /dev/sdY
- Проверка статуса: cat /proc/mdstat
- Добавление PV: pvcreate /dev/md1
- Расширение VG: vgextend debian /dev/md1
- Перенос PV: pvmove /dev/sda5 /dev/md1
- Удаление из VG: vgreduce debian /dev/sda5
- Удаление PV: pvremove /dev/sda5
- Добавление раздела в RAID: mdadm –add /dev/md1 /dev/sda5
- Обновить initramfs: update-initramfs -u
Частые ошибки и рекомендации
- Ошибка: ioctl() re-read partition table failed (Device or resource busy). Решение: перезагрузка потребуется для применения изменений таблицы разделов, если kernel продолжает использовать старую таблицу.
- Если /boot не монтируется после перезагрузки — проверьте /etc/fstab, UUID и записи mdadm.conf.
- Не добавляйте активные корневые разделы в массив без fallback-стратегии и актуальной копии загрузчика на втором диске.
Ролевой чеклист для команды
Администратор (перед началом):
- Сделать полную резервную копию /boot и LVM-снимок, если возможно.
- Проверить свободное место и целостность диска /dev/sdb.
Оператор (выполнение):
- Выполнить mdadm –create с missing и проверить /proc/mdstat.
- Запустить pvcreate, vgextend и pvmove по плану.
- Добавить разделы в RAID и дождаться синхронизации.
Проверяющий (после изменений):
- Убедиться, что /boot присутствует на /dev/md0 и файлы корректны.
- Выполнить перезагрузку и проверить загрузку с RAID; при проблемах вернуть из резервной копии.
Резюме
Мы создали два RAID1-массива, подготовили один из них для использования под LVM, скорректировали конфигурацию mdadm и загрузчика, перенесли LVM-данные с /dev/sda5 на /dev/md1 и скопировали /boot на /dev/md0. Ключевые моменты — проверять /proc/mdstat, дождаться синхронизации массивов и обновить initramfs перед перезагрузкой.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента