Ubuntu KVM e virt-manager

O KVM (Kernel-based Virtual Machine) transforma o próprio kernel Linux num hipervisor: o programa que roda máquinas virtuais. Com ele você roda outro Ubuntu, outra distribuição ou até o Windows dentro do seu computador, quase na velocidade do hardware real.

Você vai aprender
  • Quem é quem: KVM, QEMU, libvirt, virsh e virt-manager.
  • Como confirmar que o seu processador suporta virtualização.
  • Instalar tudo e usar sem sudo.
  • Criar uma VM pela interface gráfica, pelo virt-install e pelo atalho Multipass.
  • Ligar, desligar e listar VMs com o virsh, e por que às vezes ele "não mostra nada".

Conceito: as peças

PeçaPapelAnalogia
KVMMódulo do kernel que usa a virtualização do processadorO motor
QEMUPrograma que simula o computador da VM (disco, rede, tela)A carroceria
libvirtServiço que gerencia as VMs (libvirtd)O painel
virshComando de terminal para falar com a libvirtO volante no terminal
virt-managerInterface gráfica para a libvirtO volante com tela
MultipassAtalho da Canonical: VM Ubuntu com um comandoO táxi

Passo 1: o processador suporta?

Processadores Intel chamam a função de VT-x (sigla vmx) e AMD de AMD-V (sigla svm). Conte quantas vezes ela aparece na lista de recursos da CPU:

grep
Procura texto (veja grep).
-E
Expressão regular estendida: permite o | ("ou").
-c
Em vez das linhas, mostra quantas linhas bateram.
'vmx|svm'
O padrão: "vmx" ou "svm".
/proc/cpuinfo
Arquivo virtual com uma seção por núcleo do processador.
$ grep -Ec 'vmx|svm' /proc/cpuinfo
16                                 « maior que 0: suporta (um por núcleo lógico)
$ ls -l /dev/kvm
crw-rw----+ 1 root kvm 10, 232 Oct 15 08:00 /dev/kvm    « o kernel já ativou o KVM

Se der 0, a função pode estar desligada no BIOS/UEFI (procure "Intel Virtualization Technology", "SVM Mode" ou "AMD-V") ou você já está dentro de uma VM.

Forma 2: kvm-ok

$ sudo apt install cpu-checker
$ kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used

Passo 2: instalar

qemu-system-x86
O QEMU para PCs (antigamente chamado qemu-kvm).
libvirt-daemon-system
O serviço libvirt, com a rede padrão.
libvirt-clients
O comando virsh.
virtinst
O comando virt-install.
virt-manager
A interface gráfica.
$ sudo apt install qemu-system-x86 libvirt-daemon-system libvirt-clients virtinst virt-manager
$ systemctl is-active libvirtd
active

Usar sem sudo: grupos libvirt e kvm

$ sudo usermod -aG libvirt,kvm $USER
$ groups
ana adm cdrom sudo dip plugdev users lpadmin    « ainda não: saia e entre na sessão

Depois de sair e entrar, groups mostra libvirt e kvm. Assim como o grupo docker, o grupo libvirt dá muito poder sobre a máquina: só para quem já teria sudo.


Criar uma VM: três formas

Forma 1: virt-manager (gráfico)

  1. Abra Gerenciador de Máquinas Virtuais (ou rode virt-manager).
  2. Clique no ícone de nova VM e escolha Mídia de instalação local (ISO).
  3. Selecione a ISO (ex.: ~/Downloads/ubuntu-26.04-desktop-amd64.iso). Se o sistema não for detectado, desmarque a detecção e digite "Ubuntu".
  4. Escolha memória (2048 MB ou mais) e CPUs (2).
  5. Crie um disco de 25 GB ou mais.
  6. Dê um nome e clique em Concluir: a janela da VM abre com o instalador.

Forma 2: virt-install (terminal)

virt-install
Cria e inicia uma VM pela libvirt.
--name srv1
Nome da VM.
--memory 2048
Memória em MB.
--vcpus 2
Número de processadores virtuais.
--disk size=20
Cria um disco novo de 20 GB.
--cdrom …iso
De onde dar o boot para instalar.
--osinfo detect=on,require=off
Tenta descobrir o sistema pela ISO, sem falhar se não achar.
$ virt-install --connect qemu:///system --name srv1 --memory 2048 --vcpus 2 --disk size=20 --cdrom ~/Downloads/ubuntu-26.04-live-server-amd64.iso --osinfo detect=on,require=off
Iniciando a instalação…
Alocando "srv1.qcow2"                       |  20 GB  00:00:00
Criando domínio…                            |         00:00:00
Executando o visualizador gráfico de console para o convidado.

É um comando só, numa linha longa (role para o lado para ver tudo). Na libvirt, uma VM é chamada de domínio (domain). As mensagens desta página são ilustrativas: dependendo da versão e das traduções instaladas, parte delas aparece em inglês (Name, State, running, shut off).

Forma 3: Multipass (o atalho)

Para "quero um Ubuntu limpo para testar, agora", o Multipass cria a VM já instalada, sem ISO e sem perguntas:

$ sudo snap install multipass
$ multipass launch 26.04 --name lab --cpus 2 --memory 2G --disk 10G
Launched: lab
$ multipass list
Name                    State             IPv4             Image
lab                     Running           10.73.164.12     Ubuntu 26.04 LTS
$ multipass shell lab
$ lsb_release -ds
Ubuntu 26.04.1 LTS
$ exit
$ multipass stop lab
$ multipass delete lab && multipass purge     « delete marca, purge apaga de vez
FormaMelhor quando…
virt-managerVocê quer instalar qualquer sistema (inclusive Windows) com interface gráfica.
virt-installServidor sem tela, ou criar VMs por script.
MultipassVocê só quer um Ubuntu de teste em 1 minuto (combina com cloud-init).
LXD --vmVocê já usa LXD e quer VMs com os mesmos comandos.

Gerenciar com virsh

$ virsh -c qemu:///system list --all
 Id   Nome    Estado
-----------------------------
 1    srv1    executando
 -    win11   desligado
virsh
O cliente de terminal da libvirt.
-c qemu:///system
A "conexão": as VMs do sistema (as que o virt-manager cria por padrão).
list --all
Lista as VMs, inclusive desligadas (sem --all, só as ligadas).

Para não digitar o -c toda vez, coloque no seu ~/.bashrc (veja .bashrc):

export LIBVIRT_DEFAULT_URI=qemu:///system
$ virsh start win11
Domínio 'win11' iniciado
$ virsh shutdown srv1                « pede para desligar (como apertar o botão uma vez)
Domínio 'srv1' está sendo desligado
$ virsh destroy srv1                 « desliga à força (como tirar da tomada)
$ virsh autostart srv1               « liga junto com o computador
$ virsh dominfo srv1 | head -6
Id:             -
Nome:           srv1
UUID:           7c3f0a52-2d61-4f3e-9a51-0b1e2c3d4e5f
Tipo de SO:     hvm
Estado:         desligado
CPU(s):         2
Atenção: destroy não apaga, mas é brusco

virsh destroy só desliga à força, e a VM pode perder o que não foi salvo. Para apagar de verdade, use virsh undefine srv1 --remove-all-storage, que apaga também o disco, sem lixeira.


Quando não funciona

virsh list não mostra nada (mas a VM existe)
$ virsh list --all
 Id   Nome   Estado
--------------------
                                     « vazio!

O que aconteceu: sem o -c, um usuário comum conecta em qemu:///session, as VMs do usuário. As do virt-manager ficam em qemu:///system.

Como resolver: virsh -c qemu:///system list --all, ou defina LIBVIRT_DEFAULT_URI como acima.

"KVM acceleration can NOT be used"
$ kvm-ok
INFO: Your CPU does not support KVM extensions
KVM acceleration can NOT be used

O que aconteceu: a virtualização está desligada no BIOS/UEFI, ou você está dentro de uma VM sem virtualização aninhada. Como resolver: ative "Intel VT-x"/"SVM" no BIOS e reinicie.

"Failed to connect socket … Permission denied"
$ virsh -c qemu:///system list
erro: falha ao conectar-se ao hipervisor
erro: Failed to connect socket to '/var/run/libvirt/libvirt-sock': Permission denied

O que aconteceu: seu usuário não está no grupo libvirt nesta sessão. Como resolver: sudo usermod -aG libvirt $USER e saia/entre na sessão.

VirtualBox e KVM ao mesmo tempo

Os dois disputam a virtualização do processador. Se o VirtualBox reclamar ao iniciar uma VM com o KVM em uso, desligue as VMs da libvirt antes, ou use só um dos dois.


Referência do virsh

ComandoO que faz
virsh list --allLista VMs
virsh start NOMELiga
virsh shutdown NOMEDesliga com educação
virsh reboot NOMEReinicia
virsh destroy NOMEDesliga à força
virsh autostart [--disable] NOMELiga junto com o host
virsh dominfo NOMEInformações da VM
virsh console NOMEConsole de texto (sair: Ctrl+])
virsh snapshot-create-as NOME SNAPCria snapshot
virsh net-list --allRedes virtuais (a default é a NAT 192.168.122.0/24)
virsh undefine NOME --remove-all-storageApaga a VM e o disco

Exercícios

1. Suporte do processador

Complete para contar as linhas com vmx ou svm:

grep -Ec 'vmx|svm'

2. Listar todas as VMs do sistema

virsh -c list --all

3. Desligar com educação

virsh srv1

4. Você quer só um Ubuntu Server limpo para testar um script, em 1 minuto. O que é mais prático?


Resumo

  • KVM é o motor no kernel; QEMU simula o hardware; libvirt gerencia; virsh e virt-manager são os controles.
  • Confirme o suporte com grep -Ec 'vmx|svm' /proc/cpuinfo ou kvm-ok.
  • Instale os pacotes e entre nos grupos libvirt e kvm.
  • Use qemu:///system no virsh para ver as VMs do virt-manager.
  • Para testes rápidos, o Multipass cria uma VM Ubuntu com um comando.