Под капотом · Виртуализация · Обслуживание
Перенос ВМ на другой хост
Пользователь переносит работающую ВМ на другой хост. Для этого он вводит команду:
virsh migrate --live vm1 qemu+ssh://host2/system
После выполнения команды память уезжает по сети, диски либо общие, либо копируются - ABI гостя должен совпасть.
-
пользователь 1. Пользователь вводит команду миграции
virsh migrate --live vm1 qemu+ssh://dest/system
Транспорт бывает «родной» (быстрее) или туннелированный (проще с firewall, но лишние копии).
-
libvirt 2. Демон проверяет совместимость
модель CPU + machine type (ABI гостя) иначе гость на приёмнике не продолжится
Host-passthrough удобен, но проверить совместимость заранее нельзя.
-
QEMU 3. Память передаётся с догоняющими кругами
копия RAM → передача «грязных» страниц → … пока хвост не станет малым
Та же идея, что карта изменений для дисков: переносим только изменённое.
-
QEMU 4. Финальная остановка
stop vCPU → передача остатка → запуск на приёмнике
Это и есть те самые секунды простоя; всё остальное время гость работал.
-
диск / RAM 5. Что с дисками
общее хранилище → не копируем --copy-storage-all / --copy-storage-inc → NBD-копия
Для варианта «только верхний слой» образы на приёмнике надо создать заранее - пустые qcow2 с тем же backing, иначе миграция упадёт.
-
libvirt 6. Что с конфигурацией
--undefinesource → удалить описание на источнике --persistent → создать на приёмнике
/etc/libvirt нельзя делить между хостами - это прямое требование документации.