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.
- 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-installe 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ça | Papel | Analogia |
|---|---|---|
| KVM | Módulo do kernel que usa a virtualização do processador | O motor |
| QEMU | Programa que simula o computador da VM (disco, rede, tela) | A carroceria |
| libvirt | Serviço que gerencia as VMs (libvirtd) | O painel |
| virsh | Comando de terminal para falar com a libvirt | O volante no terminal |
| virt-manager | Interface gráfica para a libvirt | O volante com tela |
| Multipass | Atalho da Canonical: VM Ubuntu com um comando | O 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)
- Abra Gerenciador de Máquinas Virtuais (ou rode
virt-manager). - Clique no ícone de nova VM e escolha Mídia de instalação local (ISO).
- 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". - Escolha memória (2048 MB ou mais) e CPUs (2).
- Crie um disco de 25 GB ou mais.
- 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
| Forma | Melhor quando… |
|---|---|
| virt-manager | Você quer instalar qualquer sistema (inclusive Windows) com interface gráfica. |
| virt-install | Servidor sem tela, ou criar VMs por script. |
| Multipass | Você só quer um Ubuntu de teste em 1 minuto (combina com cloud-init). |
| LXD --vm | Você 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
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-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.
$ 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.
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
| Comando | O que faz |
|---|---|
virsh list --all | Lista VMs |
virsh start NOME | Liga |
virsh shutdown NOME | Desliga com educação |
virsh reboot NOME | Reinicia |
virsh destroy NOME | Desliga à força |
virsh autostart [--disable] NOME | Liga junto com o host |
virsh dominfo NOME | Informações da VM |
virsh console NOME | Console de texto (sair: Ctrl+]) |
virsh snapshot-create-as NOME SNAP | Cria snapshot |
virsh net-list --all | Redes virtuais (a default é a NAT 192.168.122.0/24) |
virsh undefine NOME --remove-all-storage | Apaga a VM e o disco |
Exercícios
1. Suporte do processador
Complete para contar as linhas com vmx ou svm:
2. Listar todas as VMs do sistema
3. Desligar com educação
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;
virshe virt-manager são os controles. - Confirme o suporte com
grep -Ec 'vmx|svm' /proc/cpuinfooukvm-ok. - Instale os pacotes e entre nos grupos
libvirtekvm. - Use
qemu:///systemnovirshpara ver as VMs do virt-manager. - Para testes rápidos, o Multipass cria uma VM Ubuntu com um comando.