Пользователь
0,0
рейтинг
16 июля 2013 в 17:53

Администрирование → Миграция PROXMOX VE 3.0 в software RAID1 tutorial


В данном материале описывается процесс миграции свежеустановленного гипервизора Proxmox 3.0 в программный RAID1. Разработчики Proxmox в своей wiki пишут о том, что данное решение официально не поддерживается и не рекомендуется к использованию. Взамен этого предлагается использовать решения на протестированных аппаратных raid-контроллерах. Тем не менее в сети можно найти несколько мануалов по этой теме и практики успешной эксплуатации softraid'а совместно с Proxmox'ом. К сожалению, большинство этих мануалов нельзя назвать пошаговыми руководствами к действию: все они содержат те или иные ошибки, которые мешают достигнуть требуемого результата. Взяв за основу один из таких мануалов, я попытался исправить эту ситуацию. Приведённое ниже решение несколько раз было по шагам протестировано сначала в виртуалке, а затем использовано для миграции данных на реальном железе. В результате этого получился рабочий how-to, который предлагается вашему вниманию.

Перед началом миграции у нас имеется следующее:
  • Сервер с двумя 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:~# 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 'GRUB_TERMINAL=console' >> /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
K. @paramobilus
карма
21,0
рейтинг 0,0
Пользователь
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Администрирование

Комментарии (17)

  • +2
    Я, в свое время, ставил debian сначала, а потом накатывал на него проксмокс.
  • НЛО прилетело и опубликовало эту надпись здесь
    • НЛО прилетело и опубликовало эту надпись здесь
      • 0
        В принципе да. Тут надо было просто «освободить» /dev/sda1, чтобы потом можно было его добавить в массив. Добавил
        root@kvm0:~# umount /boot
        root@kvm0:~# mount /boot
        

        Так получится без перезагрузки.
    • 0
      А еще интереснее так :)
      watch -d cat /proc/mdstat
      
  • 0
    Скажите, а в чем преимущество программного RAID1 перед аппаратным?
    Он вроде и в установке проще и в случае краха HDD можно тупо заменить и все.
    • +1
      В универсальности. При отказе аппаратного райд-контроллера вам нужно будет заменить его на точно такой же, чтобы восстановить работоспособность массива. При отказе компа с софтрайдом просто меняем комп, поднимаем софтрайд и продолжаем пользоваться. Ну и плюс большая производительность софтрайда по сравнению со встроенными fakeraid'ами в материнских платах. Да, если винт вылетает, нужно провести несколько больше манипуляций для вывода плохого HDD из массива и ввод в массив исправного, но это временные неудобства, которые компенсируются остальными преимуществами.
      • 0
        Кстати, fakeraid в proxmox завести — не так просто (по крайней мере, в 2.3). Там md в ядре не знает формата метаданных imsm. Пришлось поставить ataraid (это предшественник нормального dmraid), сделать образы ФС проксмокса, а потом сделать раид, загрузиться с partedmagic и развернуть образы обратно. После этого можно трахаться с установкой загрузчика. А потом проксмокс видит массивы как /dev/mapper/iwg_какой-то-id_имя-массива
        • +1
          В отличии от fakeraid программный mdadm рейд работает очень надежно и за годы его использования на значительном числе >50 систем не подвёл ни разу. Главное обеспечить уведомление о проблемах дисков и вовремя менять их! Вот тут «боевой» мануал для PROXMOX 2.X-3.X формата копипаст, который я писал для максимального автоматизма установки большого числа систем на удаленных филиалах, а так-же для самостоятельной настройки специалистами с низким знанием linux систем.
          • 0
            Да fakeraid работает не менее надёжно, уверяю вас. В линуксе он собственно реализуется тем же самым кодом md — с чего бы быть отличиям? Формат метаданных другой — может быть ddf или imsm.

            Да, если это нормальный линукс.

            Есть в проксмоксе несколько глупостей, и самая большая глупость — отношение его разработчиков к программным раидам. Строят систему на базе линукса, у которого с этими раидами всё более чем прекрасно — за 10+ лет код доведён до идеального состояния, но зачем-то отказываются от этих возможностей.
  • НЛО прилетело и опубликовало эту надпись здесь
  • +1
    Не хватает важного момента:
    Необходимо раскомментировать строку GRUB_TERMINAL=console в /etc/default/grub
    Иначе смерть первого диска приведёт к невозможности загрузить граб. Проверено на личном опыте.
    • 0
      Спасибо за замечание! Мануал поправил.
  • 0
    Огромное спасибо! Давно пытался сделать аналогичное, по разным мануалам — не получалось что-то. По вашему ману — всё заработало с полпинка.
  • 0
    Премного благодарен. Я за время пользования Proxmox успел создать ещё одну VG на третьем разделе, но по аналогии с sda2 в вашем мануале успешно создал для неё RAID.
  • +1
    Кстати, pvmove, не обязательно запускать в screen. Ему нужно отдать специальную команду для прерывания.
    Если закрыть терминал с бегущими «процентимками» — перемещение продолжится в фоне.

    Чтобы прервать надо ввести:
    pvmove --abort
    

    посмотреть состояние после отключения от сервера:
    pvmove -i5
    

    Оно настолько живучее, что продолжает работать после перезагрузки.
  • +1
    Присоединяюсь, огромное спасибо! Денег на аппаратный рейд не хватило а жить как-то надо =)

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.