KVM Logo

Virtualização com KVM

KVM (Kernel-based Virtual Machine) é uma solução de virtualização open source para Linux incluído por padrão no kernel a partir da versão 2.6.20.
A maioria das distros possuem as ferramentas necessárias para virtualização com KVM nos CDs de instalação ou repositórios de pacotes. Nesse artigo vou usar o Fedora 16 como host e instalar o CentOS como guest.

Instalação no Fedora 16

# yum install qemu-kvm python-virtinst libvirt virt-manager

Verificando suporte virtualização de hardware:

grep -E "(vmx|svm)" --color=always /proc/cpuinfo

Caso a saída do comando acima não retorne nenhuma informação na tela é porque o processador não suporta virtualização de hardware. Sendo asssim há apenas a opção de usar emulação com o QEMU.

Iniciando o serviço:

# service libvirtd start

Antes de instalar o sistema operacional no guest é necessário criar o virtual disk usado pela máquina virtual. KVM suporta o formato raw, qcow2 (nativo do QEMU), VMWare, dentre outros. Vou criar usando qcow2 e alocando 10GB de espaço:

$ qemu-img create -f qcow2 -o preallocation=metadata /home/gustavo/vm/hd-centos.qcow2 10G

As opções de rede disponíveis são bridge, virtual network e user.
bridge permite que à máquina virtual obter endereço IP como se fosse outra máquina na rede onde está o host;
virtual network cria uma rede virtual no qual apenas outros guests na mesma virtual network e o host consegueguem se comunicar;
user provê uma forma de NAT muito limitada, indicado apenas se for executar o kvm com usuário diferente de root.

Para usar o modo bridge primeiramente é preciso criar a interface br0. Os passos estão descritos nas instruções da documentação da libvirt em http://wiki.libvirt.org/page/Networking.

Criando uma Virtual Machine com KVM

Modo simples, especificando o path da iso de instalação e do virtual disk:

# virt-install --name=minha-vm-centos --arch=x86_64 --vcpus=1 --ram=512 --os-type=linux --os-variant=rhel5 --hvm --connect=qemu:///system --network bridge=br0 --cdrom=/home/gustavo/Downloads/softwares/iso/CentOS-6.2-x86_64-LiveDVD.iso --disk path=/home/gustavo/vm/hd-centos.qcow2,size=10 --graphics vnc,keymap=pt-br,  --noautoconsole

Modo muito simples, onde serão feitas perguntas ao usuário:

# /usr/sbin/virt-install --prompt

Rodando no modo gráfico é possível utilizar virt-manager – interface gráfica para gerenciar máquinas virtuais.

Gerenciando máquinas virtuais com o Virsh

Virsh é utilitário em modo texto que utiliza a API da libvirt para gerenciamento de máquinas virtuais. Abaixo os comandos mais utilizados.

Exibir todas as máquinas virtuais:

virsh list --all

Iniciar uma máquina virtual:

virsh start <nome da vm>

Desligar uma máquina virtual:

virsh shutdown <nome da vm>

Editar configuração:

virsh edit <nome da vm>

Forçar o desligamento:

virsh destroy <nome da vm>

Salvar um snapshot:

virsh save <nome da vm> <nome do arquivo>

Restaurar um snapshot:

virsh restore <nome do arquivo>

Acessar remotamente via ssh:

virsh -c qemu+ssh://<usuario>@<ip>/system <nome da vm>

Outras dicas

Para renomar uma máquina virtual no Virsh é necessário copiar o arquivo xml contendo as configurações, editar manualmente esse arquivo, criar uma máquina virtual com o novo nome e remover a antiga.

virsh dumpxml <nome da vm> > arquivo.xml
vim arquivo.xml #alterar o novo nome dentro do arquivo xml
virsh undefine <nome da vm>
virsh define arquivo.xml

Após aumentar o espaço de um virtual disk usando o qemu-img é necessário dar boot no guest com alguma distro livecd e usar o software gparted para redimensionar a partição sem perda de dados.

qemu-img resize /home/gustavo/vm/hd-centos.qcow2 +25GB

O processo de clonar uma máquina virtual consiste em criar uma cópia idêntica com outro nome que pode usar o mesmo virtual disk ou um clone.

virt-clone --connect=qemu:///system -o <nome da vm> -n <nome da vm clonada> -f <path do virtual disk>

Links

http://wiki.libvirt.org/page/Networking
http://www.techotopia.com/index.php/Installing_a_KVM_Guest_OS_from_the_Command-line_(virt-install)
http://www.linux-kvm.org/