1. Създаване на VM — какво реално избирам в wizard-а
Wizard-ът за нова VM (Create VM) минава през няколко таба, но само няколко от полетата в тях реално имат последствия по-нататък. Останалото са разумни defaults, които рядко пипам.
VMID, име
ISO / guest type
machine, BIOS, agent
2. Machine Type — i440fx срещу q35
Machine type определя виртуалния „дънна платка“ модел на VM. Proxmox по подразбиране предлага
i440fx — стар, но много съвместим chipset. q35 е по-съвременен,
поддържа виртуална PCIe шина и е нужен, ако планирам PCIe/GPU passthrough.
| Machine type | Кога го избирам |
|---|---|
i440fx (default) |
Обикновена Linux VM без нужда от PCIe passthrough — работи без проблем в повечето случаи. |
q35 |
Планирам GPU/PCIe passthrough, искам vIOMMU емулация, или просто предпочитам по-модерен virtual hardware layout. |
q35
directно — chipset-ът е по-малко ограничен и не виждам сериозна причина да оставам на i440fx,
освен инерция. За Windows guest, обаче, machine version се фиксира при създаването на VM-а, така че
избора тук е по-труден за смяна по-късно.
3. BIOS: SeaBIOS срещу OVMF (UEFI)
SeaBIOS е default и покрива повечето сценарии. Минавам на OVMF (UEFI), когато:
- Планирам PCIe/GPU passthrough;
- Гостовата ОС изисква UEFI boot (например по-нови Windows инсталации със Secure Boot);
- Искам TPM emulation за Windows 11 изисквания.
4. CPU Type — kvm64 срещу host
Това е решение, което директно засяга и производителност, и live migration:
| CPU type | Ефект |
|---|---|
kvm64 (default) |
Генеричен, консервативен CPU модел. Позволява live migration между хостове с различни физически CPU-та. |
host |
VM вижда реалните CPU features на host-а — максимална производителност, но live migration между различни CPU модели вече не работи надеждно. |
Практическото ми правило: на единичен host без clustering ползвам host — няма какво
да мигрирам towards, а производителността е реална разлика при CPU-интензивни workload-и.
В клъстер с разнородни node-ове (Част 8) се връщам към по-консервативен, но съвместим тип.
kvm64, а не задължително host.
5. Disk — VirtIO SCSI, discard, SSD emulation
За SCSI controller избирам VirtIO SCSI single — дава по-добра производителност
от емулирания SATA/IDE и позволява iothread на диск, а не общ за целия controller.
scsihw: virtio-scsi-single
scsi0: local-lvm:vm-101-disk-0,discard=on,ssd=1,iothread=1
discard=on— позволява TRIM да минава от гост към storage backend-а (важно при thin provisioning);ssd=1— представя диска на госта като SSD, не механичен HDD (влияе на вътрешна оптимизация на госта);iothread=1— диска получава собствен I/O thread, вместо да чака общия.
discard=on реално връща освободено пространство
обратно на pool-а. Върху thick LVM или обикновен диск ефектът е минимален.
6. qemu-guest-agent — инсталирам го винаги
Guest agent-ът е малка услуга вътре в госта, която комуникира с Proxmox host-а — дава коректно IP адреси в UI, позволява чист shutdown вместо force-stop, и коректен filesystem freeze при snapshot.
В Proxmox: Options → QEMU Guest Agent → Enabled. Вътре в госта (Debian/Ubuntu):
apt update
apt install -y qemu-guest-agent
systemctl enable --now qemu-guest-agent
7. Cloud-init темплейт — създавам VM веднъж, клонирам многократно
За Linux VMs почти никога не минавам ръчна ISO инсталация повторно. Изграждам темплейт от официален cloud image веднъж, и клонирам от него нататък.
wget https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img
qm create 9000 \
--name ubuntu-noble-template \
--memory 2048 --cores 2 \
--net0 virtio,bridge=vmbr0 \
--machine q35 \
--agent enabled=1
qm importdisk 9000 noble-server-cloudimg-amd64.img local-lvm
qm set 9000 \
--scsihw virtio-scsi-single \
--scsi0 local-lvm:vm-9000-disk-0,discard=on,ssd=1
qm set 9000 --ide2 local-lvm:cloudinit
qm set 9000 --boot order=scsi0
qm set 9000 --serial0 socket --vga serial0
qm template 9000
От тук нататък, нова машина е просто клониране:
qm clone 9000 101 --name web1 --full
qm set 101 \
--ipconfig0 ip=192.168.1.101/24,gw=192.168.1.1 \
--sshkeys ~/.ssh/id_rsa.pub \
--ciuser fedia
qm start 101
8. CLI срещу wizard — кога избирам кое
За единична VM с еднократна цел, wizard-ът е по-бърз и по-малко склонен към печатни грешки. За темплейти, скриптируеми deployment-и или повтарящи се конфигурации, CLI ми дава възпроизводимост — мога да запазя командите като скрипт и да получа идентичен резултат следващия път.
9. Типични грешки
- Оставяне на CPU type
hostв клъстер с разнородни node-ове, което чупи live migration неочаквано. - Включен guest agent в Proxmox, но неинсталиран вътре в госта — VM „забива“ при shutdown от UI.
- OVMF без добавен EFI disk — VM не bootва, а причината не е очевидна от логовете на пръв поглед.
discard=onвърху storage, който не поддържа thin provisioning — очакван ефект, който не се случва.- Клониране на темплейт без промяна на
--sshkeys/мрежовата конфигурация — нови VMs с еднакъв SSH ключ или сблъскващи се IP адреси.
10. Най-важното от тази част
q35е по-съвременният machine type и е задължителен за PCIe/GPU passthrough.- CPU type
hostдава производителност, но чупи live migration между различни физически CPU-та. - VirtIO SCSI single с
discard,ssdиiothreadе предпочитаната конфигурация за диск. - qemu-guest-agent трябва да е включен в Proxmox и инсталиран вътре в госта — не само едното.
- Cloud-init темплейт от cloud image +
qm cloneзамества ръчна инсталация за всяка нова Linux VM.
Заключение
Разликите между default настройките на wizard-а и настройките, които реално използвам, не са козметични. Machine type, CPU type и storage конфигурацията на диска определят колко бързо работи VM-ът, колко лесно го мигрирам по-късно и колко предвидимо се държи при snapshot или backup.
В следващата част минавам към LXC контейнерите — как се различават практически от KVM VMs, разликата между privileged и unprivileged контейнер, и кога избирам едното пред другото за конкретна задача.