Под капотом · Виртуализация · Создание и запуск

Создание ВМ

Пользователь создаёт ВМ из заранее подготовленного XML-файла с её описанием. Вот какую команду он использует:

Команда
virsh define vm1.xml
libvirt API virDomainDefineXML(xml)

После выполнения команды ничего не запускается: libvirt сохраняет определение, ВМ видна в списке выключенной.

  • пользователь 1. Пользователь вводит команду создания
    virDomainDefineXML(xml)
    # то же самое: virsh define vm1.xml

    XML здесь - декларация желаемого состояния, а не команда запуска.

  • libvirt 2. Демон проверяет описание
    schema check по formatdomain
    при ошибке - отказ, объект не создаётся

    Опечатка в имени устройства отсекается здесь - до любых действий с дисками и правами.

  • libvirt 3. Описание ложится на диск
    конфигурация домена
    # qemu:///system: каталог конфигов libvirt (обычно /etc/libvirt/qemu)

    Persistent-ВМ переживёт выключение. Transient (virsh create) - нет: исчезнет вместе с процессом.

  • libvirt 4. ВМ становится объектом
    virDomainPtr
    state = defined (inactive), id отсутствует

    id выдаётся только при запуске - по нему и отличают «определена» от «работает».

  • QEMU 5. QEMU не запускается вообще
    нет процесса qemu-system-*
    нет QMP-сокета
    /dev/kvm не открыт

    Ключевой момент: define - чисто управляющая операция, гипервизор не задействован.

  • пользователь 6. Пользователь видит ВМ в списке
    virsh list --all
     → vm1   shut off

    «shut off» здесь означает «определена, но не запущена».