В данном материале описывается процесс миграции свежеустановленного гипервизора Proxmox 3.0 в программный RAID1. Разработчики Proxmox в своей wiki пишут о том, что данное решение официально не поддерживается и не рекомендуется к использованию. Взамен этого предлагается использовать решения на протестированных аппаратных raid-контроллерах. Тем не менее в сети можно найти несколько мануалов по этой теме и практики успешной эксплуатации softraid'а совместно с Proxmox'ом. К сожалению, большинство этих мануалов нельзя назвать пошаговыми руководствами к действию: все они содержат те или иные ошибки, которые мешают достигнуть требуемого результата. Взяв за основу один из таких мануалов, я попытался исправить эту ситуацию. Приведённое ниже решение несколько раз было по шагам протестировано сначала в виртуалке, а затем использовано для миграции данных на реальном железе. В результате этого получился рабочий how-to, который предлагается вашему вниманию. Кому интересно, добро пожаловать под cut.
Перед началом миграции у нас имеется следующее:
- Сервер с двумя 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.
root@kvm0:~# apt-get update
root@kvm0:~# aptitude install mdadm screen
1. Подготовка дисков к переводу в RAID1.
Копируем разметку диска sda на sdb. Здесь и далее я привожу полный вывод команд, чтобы на каждом шаге можно было свериться с результатом.
root@kvm0:~# sfdisk -d /dev/sda | sfdisk -f /dev/sdb
Checking that no-one is using this disk right now ...
OK
Disk /dev/sdb: 4177 cylinders, 255 heads, 63 sectors/track
sfdisk: ERROR: sector 0 does not have an msdos signature
/dev/sdb: unrecognized partition table type
Old situation:
No partitions found
New situation:
Units = sectors of 512 bytes, counting from 0
Device Boot Start End #sectors Id System
/dev/sdb1 * 2048 1048575 1046528 83 Linux
/dev/sdb2 1048576 67108863 66060288 8e Linux LVM
/dev/sdb3 0 - 0 0 Empty
/dev/sdb4 0 - 0 0 Empty
Warning: partition 1 does not end at a cylinder boundary
Warning: partition 2 does not start at a cylinder boundary
Warning: partition 2 does not end at a cylinder boundary
Successfully wrote the new partition table
Re-reading the partition table ...
If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
to zero the first 512 bytes: dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)
Помечаем разделы диска sdb, как «Linux raid auto».
root@kvm0:~# sfdisk -c /dev/sdb 1 fd
Done
root@kvm0:~# sfdisk -c /dev/sdb 2 fd
Done
Чтобы убедиться, что на диске нет информации о ранее созданных RAID-массивах, делаем следующее.
root@kvm0:~# mdadm --zero-superblock /dev/sdb1
mdadm: Unrecognised md component device - /dev/sdb1
root@kvm0:~# mdadm --zero-superblock /dev/sdb2
mdadm: Unrecognised md component device - /dev/sdb2
Если диск чист, то видим вышеприведённые сообщения. В противном случае вывод команды будет пустой.
Создаем RAID-массив.
root@kvm0:~# mdadm --create -l 1 -n 2 /dev/md0 missing /dev/sdb1 --metadata=1.1
mdadm: array /dev/md0 started.
root@kvm0:~# mdadm --create -l 1 -n 2 /dev/md1 missing /dev/sdb2 --metadata=1.1
mdadm: array /dev/md1 started.
Добавляем информацию о массиве в mdadm.conf
root@kvm0:~# cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf_orig
root@kvm0:~# mdadm --examine --scan >> /etc/mdadm/mdadm.conf
2. Перенос /boot на /dev/md0.
Создаём файловую систему на /dev/md0. Монтируем её в /mnt/md0 и копируем туда содержимое /boot.
root@kvm0:~# mkfs.ext3 /dev/md0
mke2fs 1.42.5 (29-Jul-2012)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
131072 inodes, 522944 blocks
26147 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67633152
64 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409
Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
root@kvm0:~# mkdir /mnt/md0
root@kvm0:~# mount /dev/md0 /mnt/md0
root@kvm0:~# cp -ax /boot/* /mnt/md0
3. Модификация /etc/fstab.
Комментируем в /etc/fstab монтирование boot-раздела через UUID и прописываем монтирование раздела через /dev/md0.
root@kvm0:~# sed -i 's/^UUID/#UUID/' /etc/fstab
root@kvm0:~# echo '/dev/md0 /boot ext3 defaults 0 1' >> /etc/fstab
В итоге /etc/fstab должен выглядеть так.
root@kvm0:~# 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.
root@kvm0:~# echo 'GRUB_DISABLE_LINUX_UUID=true' >> /etc/default/grub
root@kvm0:~# echo 'GRUB_PRELOAD_MODULES="raid dmraid"' >> /etc/default/grub
root@kvm0:~# echo raid1 >> /etc/modules
root@kvm0:~# 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.
root@kvm0:~# sfdisk -c /dev/sda 1 fd
Done
root@kvm0:~# mdadm --add /dev/md0 /dev/sda1
mdadm: added /dev/sda1
Теперь нам нужно перенести данные с LVM-раздела /dev/sda2 в /dev/md1. Перенос данных при помощи pvmove занимает довольно большое время, поэтому дальнейшие действия выполняем в screen'е.
root@kvm0:~# screen bash
root@kvm0:~# pvcreate /dev/md1
Writing physical volume data to disk "/dev/md1"
Physical volume "/dev/md1" successfully created
root@kvm0:~# vgextend pve /dev/md1
Volume group "pve" successfully extended
root@kvm0:~# pvmove /dev/sda2 /dev/md1
/dev/sda2: Moved: 2.0%
/dev/sda2: Moved: 14.5%
/dev/sda2: Moved: 17.5%
/dev/sda2: Moved: 19.2%
/dev/sda2: Moved: 20.3%
/dev/sda2: Moved: 24.7%
/dev/sda2: Moved: 31.4%
/dev/sda2: Moved: 32.5%
/dev/sda2: Moved: 43.6%
/dev/sda2: Moved: 63.3%
/dev/sda2: Moved: 81.4%
/dev/sda2: Moved: 100.0%
root@kvm0:~# vgreduce pve /dev/sda2
Removed "/dev/sda2" from volume group "pve"
Добавляем второй раздел исходного диска в RAID1.
root@kvm0:~# sfdisk --change-id /dev/sda 2 fd
Done
root@kvm0:~# mdadm --add /dev/md1 /dev/sda2
mdadm: added /dev/sda2
Наливаем себе чашечку кофе и наблюдаем за синхронизацией массива через cat /proc/mdstat.
На этом миграция Proxmox 3.0 VM в software RAID1 завершена.
URLs:
pve.proxmox.com/wiki/Software_RAID
pve.proxmox.com/wiki/Install_Proxmox_VE_on_Debian_Wheezy
dominicpratt.de/proxmox-ve-3-0-software-raid/
www.howtoforge.com/proxmox-2-with-software-raid
www.howtoforge.com/how-to-set-up-software-raid1-on-a-running-system-incl-grub2-configuration-debian-squeeze
Автор: paramobilus