Вы здесь

Миграция PROXMOX VE 3.0 в software RAID1

Перед началом миграции у нас имеется следующее:

  • Сервер с двумя HDD одинаковой емкости (/dev/sda и /dev/sdb). Диски не в RAID'e.
  • Proxmox 3.0 установлен с нуля на первый HDD (/dev/sda)
  • В системе установлены все последние обновления (aptitude update && aptitude upgrade)

По окончании миграции оба HDD будут объединены в Soft RAID1, при этом мы сохраним данные, которые были на диске до начала миграции.

Миграция будет происходить в несколько этапов:
0. Установка необходимого ПО.
1. Подготовка дисков к переводу в RAID1.
2. Перенос /boot на /dev/md0.
3. Модификация /etc/fstab.
4. Модификация Grub2.
5. Перенос LVM на /dev/md1, перевод исходного диска в RAID1.

0. Установка необходимого ПО.

Ставим mdadm и screen. При установке mdadm спросит, какие модули нужно включить при загрузке. Отвечаем «all». Screen ставить не обязательно, но он поможет нам подстраховаться на 5-м этапе, когда мы будем переносить LVM.

# aptitude install mdadm screen

1. Подготовка дисков к переводу в RAID1.

Если разметку диска не нужно менять - просто копируем:

#  sgdisk -R /dev/sdb /dev/sda

Если нужно изменить разметку диска то выполняем следующие команды:

очищаем полностью таблицу разделов на нем при помощи команды:

#  sgdisk --zap-all /dev/sdb

Затем устанавливаем на него таблицу разделов GPT:

sgdisk --mbrtogpt --clear /dev/sdb

Теперь разбиваем диск sdb:

#  sgdisk --new=1:2048:8388641 /dev/sdb
#  sgdisk --new=2:8390656:16777249 /dev/sdb

Помечаем разделы диска sdb, как «Linux raid auto».

#  sgdisk --typecode=1:fd00 /dev/sdb
#  sgdisk --typecode=2:fd00 /dev/sdb

Для первого раздела ставим флаг загрузочности:

#  sgdisk --attributes=1:set:2 /dev/sdb

Чтобы убедиться, что на диске нет информации о ранее созданных RAID-массивах, выполняем команду для каждого раздела.

# mdadm --zero-superblock /dev/sdb1

В выводе должны получить:

mdadm: Unrecognised md component device - /dev/sdb1

В противном случае вывод команды будет пустой.

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

# mdadm --create -l 1 -n 2 /dev/md0 missing /dev/sdb1 --metadata=1.1
# mdadm --create -l 1 -n 2 /dev/md1 missing /dev/sdb2 --metadata=1.1

Добавляем информацию о массиве в mdadm.conf

# cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf_orig
# mdadm --examine --scan >> /etc/mdadm/mdadm.conf

2. Перенос /boot на /dev/md0.

Создаём файловую систему на /dev/md0. Монтируем её в /mnt/md0 и копируем туда содержимое /boot.

# mkfs.ext3 /dev/md0
# mkdir /mnt/md0
# mount /dev/md0 /mnt/md0
# cp -ax /boot/* /mnt/md0

3. Модификация /etc/fstab.

Комментируем в /etc/fstab монтирование boot-раздела через UUID и прописываем монтирование раздела через /dev/md0.

# sed -i 's/^UUID/#UUID/' /etc/fstab
# echo '/dev/md0 /boot ext3 defaults 0 1' >> /etc/fstab

В итоге /etc/fstab должен выглядеть так.

# cat /etc/fstab
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/pve/root / ext3 errors=remount-ro 0 1
/dev/pve/data /var/lib/vz ext3 defaults 0 1
#UUID=eb531a48-dea8-4356-9b56-8aa800f14d68 /boot ext3 defaults 0 1
/dev/pve/swap none swap sw 0 0
proc /proc proc defaults 0 0
/dev/md0 /boot ext3 defaults 0 1

Перезагружаемся...

4. Модификация Grub2.

Добавляем поддержку RAID1.

# echo 'GRUB_DISABLE_LINUX_UUID=true' >> /etc/default/grub
# echo 'GRUB_PRELOAD_MODULES="raid dmraid"' >> /etc/default/grub
# echo 'GRUB_TERMINAL=console' >> /etc/default/grub
# echo raid1 >> /etc/modules
# echo raid1 >> /etc/initramfs-tools/modules

Устанавливаем загрузчик на оба диска (здесь я указал кроме команд еще и вывод самих команд - ксли вывод будет отличаться, могут возникнуть проблемы с загрузкой системы).

root@kvm0:~# grub-install /dev/sda --recheck
Installation finished. No error reported.
root@kvm0:~# grub-install /dev/sdb --recheck
Installation finished. No error reported.
root@kvm0:~# update-grub
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.32-20-pve
Found initrd image: /boot/initrd.img-2.6.32-20-pve
Found memtest86+ image: /memtest86+.bin
Found memtest86+ multiboot image: /memtest86+_multiboot.bin
done
root@kvm0:~# update-initramfs -u
update-initramfs: Generating /boot/initrd.img-2.6.32-20-pve

5. Перенос LVM на /dev/md1, перевод исходного диска в RAID1.

Добавляем boot-раздел на исходном диске /dev/sda в RAID1.

#  sgdisk --typecode=1:fd00 /dev/sda
# mdadm --add /dev/md0 /dev/sda1

Теперь нам нужно перенести данные с LVM-раздела /dev/sda2 в /dev/md1. Перенос данных при помощи pvmove занимает довольно большое время, поэтому раздел лучше сжать по макимуму и дальнейшие действия выполняем в screen'е.

# screen bash
# pvcreate /dev/md1
# vgextend pve /dev/md1
# pvmove /dev/sda2 /dev/md1
.......
# vgreduce pve /dev/sda2

Добавляем второй раздел исходного диска в RAID1.

#  sgdisk --typecode=3:fd00 /dev/sdb
# mdadm --add /dev/md1 /dev/sda2

Наливаем себе чашечку кофе и наблюдаем за синхронизацией массива через cat /proc/mdstat.
На этом миграция Proxmox 3.0 VM в software RAID1 завершена.