Мне интересно, как правильно перемещать виртуальную машину между двумя хостами KVM без использования какого-либо общего хранилища
Достаточно ли будет скопировать файлы на диске и дамп XML с исходного компьютера KVM на место назначения? Если да, какие команды нужно выполнить, чтобы импортировать vm в место назначения?
ОС является Ubuntu на Dom0 и DomU.
заранее спасибо
kvm-virtualization
ubuntu-12.04
Onitlikesonic
источник
источник
/dev/mapper/vgname-lvname
тудаПоскольку я пока не могу комментировать, я должен опубликовать это дополнение к ответу Дьясни таким образом.
Если у виртуальной машины есть снимки, которые вы хотите сохранить, вы должны выгрузить 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
Источники:
Список рассылки libvirt-users
http://kashyapc.com/2012/09/14/externaland-live-snapshots-with-libvirt/
источник
Да, достаточно просто скопировать файл XML и образы виртуальных дисков, но это, очевидно, исключает «живую» миграцию. Виртуальная машина должна быть отключена во время этой процедуры.
После копирования в место назначения его
libvirtd
необходимо перезагрузить или перезапустить, чтобы распознать новый файл XML.источник
virsh
. Я просто скопировал бы файлы напрямую и перезагрузилlibvirtd
.Подробные инструкции по копированию виртуальных машин с использованием blocksync.py
Эти инструкции применяются к виртуальной машине, использующей диск, предоставленный LVM, и предполагают, что Python находится на каждом из хостов.
Загрузите скрипт blocksync.py с веб-сайта https://gist.github.com/rcoup/1338263 и поместите хост-источник и целевой каталог в папку / home / user.
предвестник
Вам также необходимо иметь доступ sudo к root на обеих машинах.
В качестве альтернативы вы можете делать все как пользователь root, но только если ваш ключ ssh дает вам root-доступ по крайней мере к целевой машине. ** В этом случае удалите имя пользователя из командной строки.
Пример настроек
Процедура
Начальные шаги на исходном хосте
Скопируйте записанное определение на новый компьютер («целевой» хост), например:
вы можете изменить внутренний ip на имя вашего сервера назначения dom0 ** Примечание: лучше всего использовать ip-адрес для цели, например:Если вы не можете скопировать из-за ключей cat larry.xml и скопировать его, то вы можете ssh на другой компьютер и создать файл и вставить его.
Найдите размер и имя диска виртуальной машины, используя
,** Команда выше должна показывать размер точно в байтах. ** Имя диска машины находится в первом столбце списка, его группа томов - во втором, а размер - в последнем. ** Определите имя устройства как / dev // ** Проверьте его с помощью команды ll. Например, в следующих выходных данных: vm_larry vg1 -wi-ao ---- 69793218560B
Начальные шаги на целевом хосте
Создайте файл определения тома, например:
или со следующими строками: ПРИМЕЧАНИЕ. - Вам нужно будет взять размер в байтах от оригинальной виртуальной машины и поместить в скрипт ниже. Команда на исходном компьютере для определения размера была sudo lvs --units BПримечание. Это определение предназначено для диска 69793218560 байт для виртуальной машины. При необходимости измените его для реальной виртуальной машины.
Примечание: имя и последняя часть пути должны совпадать и будут использоваться как новое имя диска.
Создайте новый диск из определения, используя
будет сказано, что vol larry.domainname.com.au создан из larry.domainname.com.au-vol.xml
Сделайте файл дискового устройства доступным:
Отредактируйте скопированное определение xml, например:
Найдите определение диска в файле (найдите «source dev =») и замените устройство на только что созданное (вы можете ls / dev / centos / увидеть vm), например: / dev / drbd4 -> / dev / CentOS / larry.domainname.com.au
Это изменение моста было уникальным для нашей ситуации.
** Найдите любые ссылки на "br1" в разделах интерфейса и измените его на "br0", например, вы меняете исходный мост, поэтому линия выглядит следующим образом
Последние шаги на исходном хосте
Войдите в исходный хост, например
Рекомендуется отключить виртуальную машину на исходном хосте перед выполнением окончательной синхронизации, но это не нужно делать. (virsh shutdown NameOfMachine)
Если его еще нет на исходном хосте, загрузите сценарий blocksync.py с веб-сайта https://gist.github.com/rcoup/1338263.
Если ваше имя пользователя - пользователь (например), то скопируйте скрипт blocksync.py на обе машины в / home / user и chown user: user и chmod 755 сценарий.
Команда, которая делает копирование
Примечание: первое имя устройства для хоста источника, как определено командой 'lvs'; это от [[chewie]] исходного хоста.
Примечание: это уничтожит содержимое целевого диска, убедитесь, что /dev/mapper/centos-larry.domainname.com.au правильно!
Примечание: синхронизация займет много времени - около 100 секунд на гигабайт, то есть: 90 минут на диск объемом 60 гигабайт.
Однако вы можете выполнить синхронизацию во время использования виртуальной машины; последующие синхронизации могут быть до 25 процентов быстрее
Скрипт распечатает параметры, которые он использует (может появиться сообщение об устаревшем модуле, это нормально). Затем он отображает команду ssh, которую он использует, и запускает ее (вы увидите сообщение об этом только для авторизованного персонала). Во время синхронизации будет отображаться общее количество скопированных блоков и их средняя скорость. Наконец, он выводит сообщение о завершении с указанием количества секунд, которое потребовалось.
Что нужно знать
Вы можете отменить синхронизацию с помощью CTRL C и перезапустить ее позже, снова выполнив команду
Последние шаги на целевом хосте
Примечание: может потребоваться изменить детали виртуальной машины в соответствии с новой средой.
источник
Я столкнулся с этой проблемой с парой моих старых серверов KVM, но это действительно раздражает, когда это происходит, и может вызвать проблемы с любой из установленных виртуальных машин. В моем случае он регулярно переводил одну из моих виртуальных машин в состояние сброса, поскольку дисковое пространство медленно исчерпывалось. Приведенные ниже инструкции несколько чувствительны к версии KVM / Distro. В моем случае у меня CentOS 7.5
По умолчанию образы KVM расположены в каталоге / var / lib / libvirt / images /
Вам нужно найти имя виртуальной машины, для этого используйте список virsh
Остановите ВМ virsh, остановите VM-Name
Для меня я сначала копирую файл, а не двигаюсь. Скопируйте файл qcow в новое место
Отредактируйте xml-файл виртуальной машины, чтобы указать новое местоположение «исходного файла». Virsh edit VM-Name
Вы захотите изменить «исходный файл» на этот файл
Перезапустите сервис libvirtd
Затем перезапустите виртуальную машину, и все будет хорошо.
источник