Pular para o conteúdo

Configurando uma Máquina Virtual com KVM no Fedora

Postado em 3 minutos de leitura

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

Execute o comando:

sudo 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:

sudo 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, primeiro é 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/Downloads/softwares/iso/CentOS-6.2-x86_64-LiveDVD.iso \
             --disk path=$HOME/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 o virt-manager, uma 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>

Alguma 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>