Что происходит с виртуальной машиной при её запуске?

«Что происходит с виртуальной машиной при её запуске?» — вопрос из категории Виртуализация, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Запуск ВМ — это многоэтапный процесс инициализации виртуального оборудования и гостевой ОС. На примере KVM/Libvirt:

  1. Запрос к гипервизору: Инструмент управления (virsh start, virt-manager) отправляет запрос демону libvirtd, который через драйвер kvm загружает образ ВМ.
  2. Инициализация виртуального железа: Гипервизор KVM (модуль ядра Linux) создает изолированное окружение:
    • Эмулирует процессор (vCPU) с поддержкой аппаратной виртуализации (Intel VT-x/AMD-V).
    • Выделяет оперативную память, зарезервированную для ВМ.
    • Подключает виртуальные устройства: сетевой адаптер (virtio-net), диск (virtio-blk или IDE), VGA-адаптер.
  3. Загрузка прошивки: Выполняется код виртуальной прошивки (например, SeaBIOS или OVMF для UEFI). Она проводит самотестирование (POST) и ищет загрузочные устройства.
  4. Загрузка гостевой ОС: Прошивка считывает загрузочный сектор с виртуального диска (образ qcow2/raw) и передает управление загрузчику гостевой ОС (GRUB, Windows Boot Manager).
  5. Старт ядра и драйверов: Загружается ядро гостевой ОС. Для производительности критично использование паравиртуализированных драйверов virtio для сетевых карт и дисков.
  6. Настройка сети: На хосте срабатывают правила iptables/nftables и bridge-интерфейсы, настроенные для сети ВМ (например, virbr0 по умолчанию).

Команда для наблюдения за процессом на хосте:

# Просмотр логов libvirt для конкретной ВМ
sudo journalctl -u libvirtd -f | grep "<vm-name>"

# Мониторинг потребления ресурсов ВМ
sudo virt-top

В облачных средах (AWS EC2, GCP Compute Engine) этот процесс включает дополнительные этапы: получение метаданных, внедрение SSH-ключей и запуск cloud-init для начальной настройки.