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

Как перенести гостевую систему KVM с хоста на другой?

У меня есть гость KVM, которую мне нужно перенести с одного хоста на другой. Миграцию не нужно выполнять в горячем режиме. Его хранилище в настоящее время поддерживается блочными устройствами LVM с мостовым сетевым адаптером. На обоих серверах одинаковое ядро, версия libvirt, qemu и т. Д. Как проще всего это сделать?

Я предполагаю, что это:

dd the block devices from server A to server B
export the xml VM definition on A, copy it to B
edit the xml to refer to the new physical device names
create the machine referencing that xml file

Ты прав. Я делал это несколько раз. я использовал netcat для создания образа дисков по сети. Это метод, который я использовал:

  1. Создайте логический том на целевом объекте. Он должен быть того же размера, что и исходный том.
  2. Бегать nc -l 1234 | dd of=/dev/<vgname>/<lvname> на целевом хосте. Это говорит netcat для прослушивания сетевого порта и передачи всего на логический том.
  3. Завершите работу исходной машины, чтобы все записать на диск.
  4. Бегать dd if=/dev/<vgname>/<lvname> | nc <targetip> 1234 на исходном хосте. Это говорит netcat чтобы передать все по сети на целевой хост.
  5. Иди принеси чашку кофе. Это займет несколько минут в зависимости от размера тома и скорости сети.
  6. Скопируйте определения xml из /etc/libvirt/qemu/ от источника к цели.
  7. Отредактируйте место хранения часть файла xml и любые другие необходимые биты, такие как имя сетевого моста, если они отличаются.
  8. Перезагрузите libvirt на целевой машине, чтобы прочитать xml. An /etc/init.d/libvirt-bin reload должен сработать (или systemctl restart libvirtd для дистрибутивов, использующих systemd)
  9. Запустите машину на целевом хосте.

KVM (начиная с qemu 1.3) теперь включает функцию миграции хранилища, поэтому больше нет необходимости выполнять какие-либо хакерские действия, показанные в старых ответах. Просто перенесите виртуальную машину, как обычно, например virsh migrate "Guest Name" qemu+ssh://dest-hypervisor/system или нажмите приятные кнопки в любом графическом интерфейсе пользователя.

Я придерживался в чем-то похожего подхода с различиями в деталях, поскольку мне нужно было направить машину через небезопасное соединение и использовать virsh:

  1. поделиться pubkey между двумя хостами с ssh-copy id root@newserver с "старого сервера"
  2. создать логический том на taget
  3. Источник выключения
  4. Подключите том к целевому хосту с помощью dd if=/dev/<vgname>/<lvname> | ssh root@targethost 'dd of=/dev/<vgname>/<lvname>'
  5. сбросить определения xml virsh dumpxml <machinename> dump.xml
  6. Перенести xml-файл scp dump.xml root@targethost:/root/
  7. Отредактируйте файл любым редактором по вашему выбору
  8. Определите машину на цель virsh define dump.xml затем машина создается из xml. Не используй virsh create machine, то после перезагрузки необходимо переопределить машину.
  9. virsh start machinename

Если на новой машине нет подключения к Интернету с NAT, убедитесь, что IP-переадресация включена.

На Ubuntu nano /etc/sysctl.conf раскомментировать net.ipv4.ip_forward=1