Корректный способ переместить kvm vm

HP и Dell и предлагают платформы управления (InsightManager и OpenManage соответственно), которые теоретически делают это. Необходимо установить агенты на всем так, что это может вытащить корректную информацию о BIOS из каждого устройства, но это может быть сделано. Они - все еще склонный отказ и не всегда умеют вытащить информацию о поддержке из соответствующих веб-сайтов, хотя это лучше, чем отслеживание всего этого на страницах Wiki и электронных таблицах.

34
задан 2 October 2012 в 17:20
5 ответов

Многие примеры работают с конкретными конфигурациями. Этот всегда работает, независимо от того, какую конфигурацию использует ваш сервер Apache: virsh net-autostart NETNAME )

41
ответ дан 28 November 2019 в 19:52

Да, достаточно простого копирования XML-файла и образов виртуальных дисков, но это, очевидно, исключает «живую» миграцию. Во время этой процедуры виртуальную машину необходимо отключить.

После копирования в место назначения необходимо перезагрузить или перезапустить libvirtd , чтобы распознать новый файл XML.

3
ответ дан 28 November 2019 в 19:52

Поскольку я еще не могу комментировать, я должен опубликовать это дополнение к ответу dyasny следующим образом.

Если у виртуальной машины есть снимки, которые вы хотите сохранить, вы должны сбросить снимок xml -файлы в источнике с virsh snapshot-dumpxml $ dom $ name> file.xml для каждого снимка в списке снимков виртуальной машины virsh snapshot-list --name $ dom .

Затем в месте назначения используйте virsh snapshot-create --redefine $ dom file.xml , чтобы завершить миграцию снимков.

Если вам также важно, какой снимок является текущим, то дополнительно выполните в источнике:
virsh snapshot-current --name $ dom
и в месте назначения:
virsh snapshot-current $ dom $ name

Затем вы можете использовать virsh snapshot-delete - -metadata $ dom $ name для каждого снимка, чтобы удалить файлы xml в источнике, или вы можете просто удалить их из / var / lib / libvirt / qemu / snapshots / $ guestname


Источники:

  1. список рассылки libvirt-users [1 280] http://kashyapc.com/2012/09/14/externaland-live-snapshots-with-libvirt/

10
ответ дан 28 November 2019 в 19:52

Подробные инструкции по копированию виртуальных машин с помощью blockync.py

Эти инструкции применимы к виртуальной машине, использующей предоставленный LVM диск, и предполагается, что Python находится на каждом из хостов

Загрузить сценарий blockync.py из https://gist.github.com/rcoup/1338263 и поместите на исходный и целевой хосты в папку / home / user.

Предшественник

  • Вы будете для вашего пользователя должен быть доступ по ssh к обоим машинам (исходной и целевой).
  • Вам также потребуется доступ sudo к «root» на обеих машинах.

  • В качестве альтернативы вы можете делать все как root, но только если ваш ssh-ключ дает вам root-доступ по крайней мере к целевой машине. ** В этом случае удалите имя пользователя из командных строк.

Пример настроек

  • Виртуальная машина находится на хосте dom0, известном как chewie
  • Желаемое место назначения на хосте dom0, известном как darth, и было здесь внутренний IP 10.10.10.38 (для нашего примера)
  • В нашем фактическом случае мы используем centos 7 в качестве операционной системы dom0 на обеих машинах
  • ВИРТУАЛЬНАЯ машина, которую мы перемещаем, называется LARRY
  • пользователь, выполняющий действие, - ПОЛЬЗОВАТЕЛЬ (это будет ваше имя)
  • DOM0 означает фактический физический сервер

Процедура

Начальные шаги на исходном хосте

  • Войдите на хост dom0, на котором в данный момент находится машина ( "исходный" хост), например:
     ssh (скрыто) как ваш пользователь, поэтому не становитесь пользователем sudo
     * Список машин с
     
     sudo virsh --all 
  • Создайте дамп определения машины, используя, например:
     sudo virsh dumpxml larry> larry.xml 
  • Скопируйте скопированное определение на новую машину («целевой» хост), например :

     scp -p larry.xml 10.10.10.38:larry.xml
    вы можете изменить внутренний IP-адрес на имя целевого сервера dom0 ** Примечание: лучше всего использовать IP-адрес для цели, например:
     scp -p larry.xml (скрытый) вы не можете скопировать из-за ключей cat larry.xml и скопируйте его
    Затем вы можете использовать ssh на другом компьютере, создать файл и вставить его. 

  • Найдите размер и имя диска виртуальной машины, используя

     sudo lvs --units B 
    .
    ** Приведенная выше команда должна показывать размер точно в байтах. ** Имя диска машины находится в первом столбце списка, его группа томов - во втором, а размер - в последнем. ** Определите имя устройства как / dev // ** Проверьте это с помощью команды 'll' Например, в этом выводе: vm_larry vg1 -wi-ao ---- 69793218560B

LV        VG   Attr       LSize         Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv_root   vg1  -wi-ao----  53687091200B
  lv_swap   vg1  -wi-ao----  17179869184B
  vm_vsrv1  vg1  -wi-ao---- 193273528320B
  vm_vsrv10 vg1  -wi-ao----  64424509440B
  vm_vsrv11 vg1  -wi-ao---- 161061273600B
  vm_vsrv12 vg1  -wi-ao---- 204010946560B
  vm_vsrv2  vg1  -wi-ao---- 140110725120B
  vm_vsrv3  vg1  -wi-ao---- 128849018880B
  vm_larry  vg1  -wi-ao----  69793218560B
  vm_vsrv5  vg1  -wi-ao---- 257698037760B
  vm_vsrv6  vg1  -wi-ao----  64424509440B
  vm_vsrv7  vg1  -wi-ao---- 161061273600B
  vm_vsrv8  vg1  -wi-ao----  64424509440B
  vm_vsrv9  vg1  -wi-ao---- 214748364800B
  • Имя диска - vm_larry, группа томов - vg1.
  • Имя устройства - / dev / vg1 / vm_larry
  • Вывод, например:
     ls -l / dev / vg1 / vm_larry 
    : lrwxrwxrwx. 1 root root 8 31 января 13:57 / dev / vg1 / vm_larry -> ../dm-11

Начальные шаги на целевом хосте

  • Войдите на целевой хост, например
     ssh (скрытый) как  ваш собственный пользователь.  т.е. не становитесь root. 
  • Создайте файл определения тома, например:

     vi larry.domainname.com.au-vol.xml 
    или
     nano larry.domainname.com.au-vol.xml 
    со следующими строками: ПРИМЕЧАНИЕ. Вам нужно будет взять размер в байтах от исходной виртуальной машины и поместить в сценарий ниже. Команда для размера на исходной машине была sudo lvs --units B
     
       larry.domainname.com.au 
       69793218560 
       69793218560 
      <цель>
       /dev/centos/larry.domainname.com.au 
      <разрешения>
       0600 
       0 
       6 
      
      
      
     
     

Примечание: это определение для диска размером 69793218560 байтов для виртуальной машины, при необходимости измените виртуальную машину.

Примечание:имя и последняя часть пути должны совпадать и использоваться в качестве имени нового диска.

Создайте новый диск из определения, используя

   sudo virsh vol-create --pool centos larry.domainname.com.au-vol.xml

, он скажет Vol larry.domainname.com.au, созданный из larry. domainname.com.au-vol.xml

Сделайте файл дискового устройства доступным:

sudo chgrp wheel /dev/mapper/centos-larry.domainname.com.au
sudo chmod g+rw /dev/mapper/centos-larry.domainname.com.au

Отредактируйте скопированное определение xml, например:

vi larry.xml

Найдите определение диска в файле (ищите "source dev =") и замените устройство на только что созданное (вы можете ls / dev / centos / увидеть vm), например: / dev / drbd4 -> /dev/centos/larry.domainname.com.au

Это изменение моста было уникальна для нашей ситуации.

** Найдите ссылки на «br1» в разделах интерфейса и измените его на «br0», например вы меняете исходный мост, поэтому строка выглядит так

Заключительные шаги на исходном хосте

  • Войдите на исходный хост, например,

     ssh (скрытый) рекомендуется выключить виртуальную машину на исходном хосте перед выполнением окончательной синхронизации, но это не обязательно  сделанный.  (virsh shutdown NameOfMachine) 

  • Если это еще не сделано на исходном хосте, загрузите скрипт blockync.py с https://gist.github.com/rcoup/1338263

  • Если ваше имя пользователя - user (например, ), затем скопируйте сценарий blocksync.py на обе машины в / home / user и chown user: user и chmod 755 сценарий.

  • Если он еще не находится на целевом хосте, скопируйте его туда, например:
scp -p blocksync.py user@10.10.10.38:blocksync.py
  • Используйте его для копирования исходного диска на целевой диск, например

Команда, которая выполняет копирование

sudo -E python blocksync.py /dev/vg1/vm_larry user@10.10.10.38 /dev/mapper/centos-larry.domainname.com.au -b 4194304

Примечание: имя первого устройства для исходного хоста, как определено командой lvs; это с исходного хоста [[chewie]].

Примечание: это уничтожит содержимое целевого диска, убедитесь, что /dev/mapper/centos-larry.domainname.com. au правильно!

Примечание: синхронизация займет много времени - около 100 секунд на гигабайт, то есть: 90 минут для 60-гигабайтного диска.

Однако вы можете выполнить синхронизацию во время использования виртуальной машины; последующие синхронизации могут быть на 25 процентов быстрее

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

Что нужно знать

Вы можете отменить синхронизацию, нажав CTRL C, и перезапустить ее позже, снова выполнив команду

Заключительные шаги на цели хост

  • Войдите на целевой хост, например
     ssh (скрытый) виртуальную машину, например: 
     virsh define larry.xml 
  • Запустите новую определенную машину, например:
     sudo virsh start larry  
  • Отметьте его для запуска при загрузке хоста, например:
     sudo virsh autostart larry 

Примечание: может потребоваться изменить детали виртуальной машины в соответствии с новой средой.

2
ответ дан 28 November 2019 в 19:52

Я столкнулся с этой проблемой с несколькими моими старыми KVM-серверами, но это действительно раздражает, когда это происходит, и может вызвать проблемы с любой из установленных виртуальных машин. В моем случае он регулярно переводил одну из моих виртуальных машин в состояние сброса, поскольку дисковое пространство медленно истощалось. Приведенные ниже инструкции в некоторой степени зависят от версии KVM / Distro. В моем случае у меня CentOS 7.5

CentOS Linux release 7.5.1804 (Core) and Qemu-KVM version 1.5.3

По умолчанию образы KVM расположены в / var / lib / libvirt / images /

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

virsh list
 Id    Name                           State
----------------------------------------------------
 12    VM-Name                        paused

Остановите виртуальную машину virsh stop VM-Name

Я сначала копирую файл, а не перемещаю. Скопируйте файл qcow в новое расположение

cp /var/lib/libvirt/images/VM-Name.qcow2 /home/VMImages/

Отредактируйте XML-файл виртуальной машины, чтобы указать новое расположение "исходного файла" virsh edit VM-Name

Вы захотите изменить "исходный файл" в этом файле

Перезапустите службу libvirtd

service libvirtd restart

Затем перезапустите виртуальную машину, и все будет в порядке.

virsh start VM-Name
1
ответ дан 28 November 2019 в 19:52

Теги

Похожие вопросы