Автор много лет держит кластер Proxmox из четырёх разношёрстных машин — от древнего Atom x5-Z8350 с 2 ГБ ОЗУ до i7-12700 со 128 ГБ. Ему надоело вечно выбирать между LXC-контейнерами (быстрыми, но не изолированными) и полноценными VM (изолированными, но медленными). LXC стартуют мгновенно, но если кто-то ломает ядро — ломаются все. Полноценные VM грузят BIOS, GRUB и кучу эмулированного легаси-железа, тратя на загрузку 5–10 секунд.
Автор хотел границы безопасности VM со скоростью контейнера. Он взял QEMU-машину microvm (ту, что для Firecracker) — без BIOS, GRUB и легаси-устройств. Прямая загрузка ядра в минимальное virtio-окружение. Получилось: микро-ВМ грузится за 300 мс в своей KVM-изоляции.
Так родился pve-microvm — один .deb-пакет, который патчит Perl-модули qemu-server прямо в Proxmox. Когда в конфиге VM пишешь machine: microvm, стандартный билдер команд делегирует сборку QEMU-командной строки свежему модулю MicroVM.pm. Никакой эмуляции чипсета, мостов PCI и VGA — только serial console, virtio-диски и virtio-сеть на PCIe.
В пакете есть:
— кастомное ядро Linux 6.12.22 (всего 12 МБ) с минимальным overlay — только virtio, vsock, virtiofs, 9p и модули для Docker;
— initrd на 1 МБ, который за 150 мс делает switch_root;
— утилита для сборки rootfs из OCI-образов (поддерживается 21 гостевая ОС — от Debian до NetBSD и Plan9);
— кнопки в веб-интерфейсе Proxmox: "Create µVM", выбор machine type, скрытие ненужных опций.
Загрузка: SmolBSD (NetBSD) стартует за 31 мс, полноценный Debian с Docker — до 8 секунд при первой настройке, потом стабильно 300 мс. У Linux-гостей есть нюанс — на QEMU 10.x MMIO-транспорт не цепляет сеть и последовательный порт, поэтому для Linux приходится использовать PCIe с non-transitional virtio. Это добавляет около 50 мс, что терпимо.
Ядро живёт не внутри гостя, а на хосте — /usr/share/pve-microvm/vmlinuz. Никакого /boot и GRUB в гостевом диске. Один kernel для всех микро-ВМ на ноде: обновил на хосте, перезагрузил гостей — и всё. Контейнерная консистентность ядра с VM-изоляцией.
Автор уже запустил несколько таких машин: Gitea с Caddy и Actions, агента для управления кластером, координатор распределённого инференса LLM, даже Synology DSM внутри микро-ВМ на Terramaster. Работает и на том самом древнем Atom x5-Z8350 — умещается шесть микро-ВМ до замедления.
Конфиг — обычный qm-гость с полями machine: microvm, args с путём к ядру и строкой console=ttyS0 root=/dev/vda. Сеть — обычный bridge на vmbr0 с VLAN, firewall работает штатно. IP настраивается systemd-networkd, от cloud-init отказались из-за хрупкости. Есть vsock (CID = VMID + 1000) для передачи SSH-ключей и virtiofs/9p.
Хранилище — любое: LVM, ZFS, Ceph, NFS, CIFS, снимки, клоны, vzdump. Живая миграция не работает (это ограничение QEMU microvm), но офлайн — норм: остановил, перенёс, запустил за секунду.
Минусы: пакет патчит Perl-код Proxmox, каждое обновление qemu-server может сломать сборку. Если после частичного апдейта pvedaemon не компилирует модуль — VM с onboot=1 может не найти корневую ФС (путает /dev/vda и /dev/sda). Нет VGA и USB, только serial console (Plan9 не в восторге). GPU-проброс отключён — автор разобрал RTX 3060, но решил сначала доделать агентов, а не пасстроу. Кастомное ядро — если надо модуль вне списка, придётся пересобирать.
Для установки: качаешь .deb, ставишь dpkg -i, создаёшь шаблон через pve-microvm-template, клонируешь qm clone, задаёшь machine: microvm — и готово. Шаблон собирается за минуту. Клоны — мгновенные через linked clones.
Автор хочет доделать GPU-проброс и AArch64, но признаёт: upstream в Proxmox через почтовую рассылку — это "слишком по 90-м", времени нет. Исходники открыты на GitHub, пакет не ломает Proxmox, 99% фич — от QEMU/KVM. Просто раздаёт.