Назад | Перейти на главную страницу

KVM Live или Near-Live Migration с LVM на серверную часть файловой системы

Моя гостевая машина имеет 2 раздела (80 ГБ + 1 ТБ). Оба они находятся на LVM. Я хочу перенести все диски на другую машину с минимальным временем простоя. Перенёс другую машину с nc. Это занимает 4 дня, и во время переноса моя ВМ была выключена.

Я пытался сделать снимок после переноса грязных страниц. Но AFAIK с LVM это невозможно. Моя целевая машина не имеет установки LVM и свободного неразделенного пространства. Итак, на дисках целевой машины должны быть необработанные образы файлов.

<disk type='block' device='disk'>
  <driver name='qemu' type='raw' cache='none'/>
  <source dev='/dev/vg-datastore/lv-vm-1138'/>
  <target dev='vda' bus='virtio'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</disk>
<disk type='block' device='disk'>
  <driver name='qemu' type='raw' cache='none'/>
  <source dev='/dev/vg-datastore-sata/lv-vm-1138-2'/>
  <target dev='vdb' bus='virtio'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
</disk>

Исходный хост:

Целевой хост:

KVM / libvirt поддерживает динамическую миграцию виртуальных машин с миграцией хранилища (установка без общего доступа), хотя и с некоторыми ограничениями. Ваша основная проблема в том, что пулы хранения имеют разную конфигурацию, поэтому я не уверен libvirt без проблем перенесет образ виртуальной машины.

Команда для выполнения живой миграции + копии хранилища:

virsh migrate  --live --copy-storage-all --persistent qemu+ssh://root@/system

Эта команда предполагает, что у вас есть действующее соединение с удаленным хостом на основе libvirt.

Если у вас возникли проблемы с переносом виртуальных дисков, вы можете попытаться создать заглушки целевых файлов виртуальных дисков, выполнив (на целевом хосте) что-то похожее на fallocate /dev/vg-datastore/lv-vm-1138 -l 80G и /dev/vg-datastore-sata/lv-vm-1138-2 -l 1T.

В любом случае, из-за различий между хозяевами это может быть ухабистая дорога.

Более простой способ перенести образы виртуальных машин - использовать метод инкрементного копирования дисков с использованием blocksync. Коротко:

  • когда виртуальная машина работает, сделайте первую копию виртуальных дисков на целевой хост. Эта первая копия воля быть бессвязным и ненадежным, но работать как «семя» для следующей копии;
  • в соответствующее время выключите виртуальную машину и выполните вторая копия виртуальных дисков. Эта вторая копия перенесет только измененные блоки и будет намного быстрее, чем первая;
  • Когда закончите, определите виртуальный домен и запустите виртуальную машину на целевом хосте.

Обратите внимание, что связанный blocksync программа представляет собой персональную форковую версию, основанную на этот оригинальный сценарий (который, кстати, является улучшенной версией этот сценарий). Я очевидно предполагаю ОТСУТСТВИЕ ОТВЕТСТВЕННОСТИ для кода, и я настоятельно рекомендую вам тщательно проверить это перед использованием на производственных виртуальных машинах / дисковых файлах. Как всегда ты ДОЛЖЕН прежде чем что-либо делать, нужно иметь подтвержденную резервную копию.

РЕДАКТИРОВАТЬ: как предлагается в комментарии ниже, еще одно отличное программное обеспечение для синхронизации файла блочного устройства / виртуального образа - bdsync. Подход в основном тот же: возьмите первую «начальную» копию дискового файла во время работы виртуальной машины, затем остановите виртуальную машину и сделайте еще одну окончательную копию. Раньше я даже спрашивал bdsync разработчик по аналогичному вопросу; Смотрите здесь для получения дополнительной информации.