Virtualização | Linux
- Virtualização | Linux
Visão geral (quem é quem)
- KVM: módulo do kernel Linux que usa a virtualização por hardware (Intel VT-x/AMD-V). Dá “velocidade de nativo”.
- QEMU: o processo de VM em espaço de usuário. Emula/disponibiliza CPU, disco, rede etc. Com KVM, fica acelerado.
- libvirt: camada de gerenciamento/automação. Fornece API, daemon e CLI (virsh), define VMs como XML, gerencia rede/armazenamento.
- virt-manager: GUI que fala com o libvirt. Criar/ligar/desligar VMs, snapshots, consoles (VNC/SPICE) etc.
- virt-install/virt-clone: CLIs “headless” para criar/clonar VMs usando libvirt.
Em resumo: virt-manager/virsh → pedem ao libvirt → que lança QEMU com KVM para rodar a VM.
Fluxo típico
- Instalar (ex. Debian/Ubuntu):
sudo apt update
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients virt-manager ovmf bridge-utils qemu-utils
sudo usermod -aG libvirt,kvm $USER
# re-login
virsh list --all # validar conexão
-
Criar VM (GUI): abrir virt-manager → “New VM” → ISO/Cloud image → escolher CPU/RAM/disk → rede “default (NAT)” → concluir.
-
Criar VM (CLI, ISO):
virt-install \
--name u22 \
--memory 4096 --vcpus 2 --cpu host-passthrough \
--disk size=30,format=qcow2 \
--cdrom ~/Downloads/ubuntu-22.04.iso \
--network network=default \
--graphics spice
- Criar VM (CLI, cloud-init):
qemu-img create -f qcow2 -b jammy-server-cloudimg-amd64.img u22.qcow2 20G
cloud-localds user-data.iso user-data meta-data
virt-install --name u22 --memory 4096 --vcpus 2 --cpu host-passthrough \
--disk path=u22.qcow2 --disk path=user-data.iso,device=cdrom \
--import --network network=default --graphics spice
Redes (opções comuns)
-
default (NAT): fácil; cria
virbr0+ DHCP (dnsmasq). A VM sai pra internet, mas não recebe conexões externas sem NAT/port-forward. -
Bridge (br0): VM sai na mesma LAN do host (IP “real”). Bom pra serviços. Dica rápida (NetworkManager):
nmcli con add type bridge ifname br0
nmcli con add type bridge-slave ifname eth0 master br0
nmcli con up br0Depois, em virt-manager: NIC → “Bridge br0”.
-
macvtap: simples pra dar IP da LAN à VM, mas comunicação host↔VM pode ser limitada.
-
SR-IOV/passthrough: para latência/throughput altos (rede/NIC virtual functions).
Armazenamento
-
Pools/Volumes (libvirt): organiza onde ficam discos (
/var/lib/libvirt/imagespor padrão).virsh pool-list
virsh vol-create-as default vm1.qcow2 40G --format qcow2 -
Formatos:
- qcow2: snapshots, thin-provision; ótimo geral.
- raw: um pouco mais rápido e simples; bom para bancos de dados/alta perf.
-
Desempenho de disco:
- Use VirtIO (virtio-blk/virtio-scsi) no guest.
- Cache
none+io=nativepara cargas pesadas. - Considere discard/TRIM (opção
discard=unmap) e prealocação quando fizer sentido.
-
Ferramentas úteis:
qemu-img info|resize|convert,virt-sparsify.
Vídeo/console
- SPICE (recomendado) ou VNC.
Use
virt-viewerpara console remoto com clipboard/álbum de cores melhor.
Snapshots & backup
-
Snapshots (qcow2 internos/externos):
virsh snapshot-create-as u22 snap1
virsh snapshot-list u22
virsh snapshot-revert u22 snap1Nota: snapshots impactam I/O; para backup consistente, prefira desligar a VM ou usar snapshots externos +
qemu-img convert.
Tuning de CPU/RAM
-
CPU:
--cpu host-passthroughdá ao guest as instruções reais do host (melhor perf). -
Pinagem:
virsh vcpupin vm 0 2 # vCPU0 -> CPU2 do host -
Hugepages: reduzir TLB misses; configure no host e habilite em XML (
memoryBacking/hugepages). -
Virtio-rng: melhor entropia no guest.
Passthrough de GPU/PCIe (avançado)
- Ativar IOMMU (GRUB:
intel_iommu=on/amd_iommu=on). - Usar
vfio-pcipara prender o device. - No XML libvirt, adicionar
<hostdev>. Requer grupos IOMMU isolados e compatibilidade da placa.
Migração ao vivo (live migration)
-
Pré-requisitos: hosts compatíveis (CPU/machine type), rede libvirt aberta, storage compartilhado ou migração por NBD.
virsh migrate --live vm qemu+ssh://dest/system --persistent
Segurança
- sVirt + SELinux/AppArmor: isola VMs por rótulos.
- Filtros de rede (libvirt nwfilter), TLS no libvirt remoto, e atualizações do QEMU/KVM sempre em dia.
Diagnóstico rápido
systemctl status libvirtd virtqemud
journalctl -u libvirtd -g ERROR --no-pager
tail -n 200 /var/log/libvirt/qemu/<vm>.log
virsh dominfo <vm>; virsh domifaddr <vm> # requer qemu-guest-agent no guest
Mini-cheatsheet (virsh)
virsh list --all
virsh start|shutdown|destroy <vm>
virsh autostart <vm>
virsh dominfo <vm>
virsh console <vm>
virsh edit <vm> # abre XML
virsh attach-disk <vm> /path/vdb.qcow2 vdb --persistent
virsh setvcpus <vm> 4 --config
virsh setmem <vm> 8G --config
Proxmox e Virt-Manager
- Virt-Manager + QEMU/KVM via libvirt = conjunto de ferramentas “genéricas” do Linux para criar/gerenciar VMs (foco em 1 host por vez, você monta o resto).
- Proxmox VE = plataforma completa de virtualização (KVM + LXC) com painel web, cluster/HA, backup, storage e rede integrados — pronta para datacenter.
Comparativo rápido
| Tema | Virt-Manager + libvirt | Proxmox VE |
|---|---|---|
| Camada de gestão | GUI simples (virt-manager) + CLI (virsh). Gerencia 1 host (ou vários, mas sem “cluster” real). | Painel web completo, API, CLI; pensado para múltiplos nós. |
| Cluster & HA | Sem cluster nativo/HA. Você mesmo teria que montar corosync/pacemaker etc. | Cluster nativo (corosync), HA com orquestração e migração ao vivo facilitada. |
| Backups | Sem mecanismo integrado (você usa scripts/vzdump-like, qemu-img, snapshots). | vzdump com agendamento, hooks; integração com Proxmox Backup Server (dedup, compress, verify, restore granular). |
| Storage | Você configura pools/vols no libvirt; snapshots dependem do backend. | Integra ZFS out-of-the-box, LVM-thin, Ceph, NFS/ISCSI; gerenciamento e monitoramento no painel. |
| Rede | Bridges/NAT/macvtap via libvirt; configuração manual no host. | Editor de rede no GUI (bridges, bonds, VLANs); SDN integrado (VXLAN, VRFs), firewall por VM/nó. |
| Contêineres | Não há LXC integrado (é focado em VMs; contêiner é por fora). | LXC nativo (templates, quotas, backup, métricas) além de VMs KVM. |
| Templates & cloud-init | Dá pra usar, mas você mesmo organiza imagens/scripts. | Templates prontos, cloud-init integrado (user-data, SSH keys, resize, etc.). |
| RBAC/Usuários | Depende do SO/SSH; sem RBAC específico. | RBAC completo (permissões por datacenter/nó/VM/storage). |
| Observabilidade | Logs locais, virt-top, collectd/Prometheus por conta própria. | Gráficos e métricas no GUI; syslogs centralizados; integra com Prometheus. |
| GPU/PCI passthrough | Funciona (libvirt/XML), mais “mão na massa”. | Assistentes/guias no painel; mais simples de repetir entre hosts. |
| Atualizações | Via distro do host (apt/dnf). | Repositórios próprios (enterprise/community), orquestrados para o stack. |
Quando usar cada um
- Escolha Virt-Manager/libvirt se você quer simplicidade, tem poucas máquinas (lab, workstation, 1–2 servidores) e curte configurar rede/storage/backup do seu jeito.
- Escolha Proxmox VE se precisa de cluster, alta disponibilidade, backup nativo, LXC + VMs, ZFS/Ceph e tudo via web — típico de ambiente prod.
Dá para “aproximar” um do outro?
- Com libvirt dá para montar um ambiente robusto combinando Ansible + ZFS + Ceph + corosync/pacemaker + backup próprio — mas você vira o integrador.
- No Proxmox, muita coisa já vem pronta e integrada (economiza tempo e reduz atrito operacional).