KVM: uma opção fácil ao VirtualBox e ao VMware
Autor: Anderson Bordin | Publicado: 2012-05-14T11:26:00-07:00



Embora seja um software open-source bastante antigo e conhecido, o Qemu nunca foi muito usado, pois era muito lento. Diferente do VMware e do VirtualBox, que são virtualizadores, capazes de rodarem outros sistemas operacionais com um overhead relativamente baixo, o Qemu é um emulador, que funciona de forma similar aos emuladores de consoles antigos, que usamos para rodar jogos de SNES e Mega-Drive no PC.

Em vez de utilizar um sistema de virtualização, ele tenta processar todas as instruções, o que acaba demorando mais tempo e fazendo com que a performance seja menor. Em geral, o VMware consegue fazer com que o sistema guest rode com de 70 a 90% do desempenho que teria se estivesse rodando diretamente, enquanto que o Qemu obtém de 5 a 10%.

Em 2005 o Qemu ganhou um módulo adicional, o Kqemu, um "acelerador" que faz com que ele passe a ser capaz de virtualizar as instruções, passando a oferecer um desempenho muito melhor. O Kqemu melhorou consideravelmente o desempenho do Qemu, mas, ainda assim, ele continuou atrás do VMware em questão de desempenho. Como o Kqemu era um componente proprietário, ele continuou sendo pouco usado.

O segundo salto veio em 2007, com o lançamento do KVM (http://kvm.qumranet.com/kvmwiki), um sistema de virtualização incluído diretamente no Kernel, disponível a partir da versão 2.6.20. O KVM substituiu o Kqemu como "acelerador" e, por ser licenciado sob a GPL, passou a ser desenvolvido de forma ativa, incorporando melhorias rapidamente, se tornando uma opção viável de virtualização, que passou a ser cada vez mais usado em servidores, concorrendo com o Xen, o VMware e o Virtuozzo.

Em se tratando de desktops, a principal vantagem do KVM é a facilidade de instalação e de criação das máquinas virtuais, combinada com o baixo impacto sobre o desempenho do sistema host, diferente do VMware, onde o processador fica ocupado o tempo todo enquanto a VM está ativa, mesmo que nada esteja sendo feito dentro dela.

O KVM pode ser instalado rapidamente sobre praticamente qualquer distribuição atual (com kernel 2.6.20 ou mais recente); basta procurar pelos pacotes "kvm" e "qemu". No caso do Debian Lenny e do Ubuntu 8.10, você pode instalá-los diretamente via apt.

O primeiro passo é instalar os dois pacotes. A grande vantagem do KVM é que, por ser um virtualizador open-source, ele é bastante simples de instalar nas distribuições atuais. O módulo vem incluído diretamente no kernel e os demais componentes podem ser instalados usando o gerenciador de pacotes:

# apt-get install kvm qemu

Depois de instalar, adicione o usuário que estiver utilizando no grupo "kvm", para que ele tenha permissão para usar o acelerador:

# adduser gdh kvm

Com isso a instalação está concluída. Falta apenas começar a criar os discos virtuais e rodar as VMs. Assim como no caso do VMware, o KVM suporta o uso de discos virtuais dinâmicos, que começam como arquivos vazios e vão crescendo conforme você instala coisas dentro da VM. O comando para criar os discos virtuais é o "qemu-img create nome.img -f qcow tamanho", como em:&nbsp;$ qemu-img create ubuntu.img -f qcow 10G

Este comando deve ser executado com o seu login de usuário (e não mais como root), já que ele é quem deve ser o dono do arquivo. Se você criar as imagens usando o root, você não terá permissão para escrever dentro dos arquivos ao usar o KVM, o que vai fazer com que a instalação dentro da VM falhe com uma mensagem "não é possível escrever no disco", ou similar.

Como pode imaginar, o "ubuntu.img" é o nome do arquivo e o "10G" é o limite máximo de tamanho para o disco virtual. Ele é originalmente criado como um arquivo vazio, que ocupa apenas alguns kbytes e pode crescer até o limite especificado.

É recomendável agrupar os discos virtuais em uma mesma pasta, para fins de organização, mas isso fica a seu critério. Se quiser espelhá-los pelo HD, não há problema. :)

Com o disco virtual criado, falta apenas inicializar a VM usando o CD/DVD ou a imagem ISO com o sistema de boot e começar a instalação do sistema.

O comando agora é o "kvm", seguido pelo arquivo ISO com a imagem de boot (pode ser tanto o ISO de uma distribuição Linux quanto uma imagem de uma mídia de instalação do Windows), seguido pelo disco virtual que será usado, a quantidade de memória RAM reservada à VM (em MB) e a opção "-boot d", que faz com que o KVM inicialize a VM a partir do CD-ROM:

$ kvm -cdrom /dev/cdrom -hda ubuntu.img -m 512 -boot d

Se quiser usar diretamente um CD ou DVD gravado dentro do drive, especifique o dispositivo "/dev/cdrom", que permite acesso direto à mídia dentro do drive:

$ kvm -cdrom /dev/cdrom -hda ubuntu.img -m 512 -boot d

Assim como em outros virtualizadores, uma nova janela é aberta e o boot ocorre da maneira tradicional. Ao clicar sobre a janela, o mouse fica "preso" dentro dela; para soltá-lo, pressione&nbsp;Ctrl+Alt:





O KVM não possui uma opção de tela cheia, mas você pode aumentar o espaço útil removendo a borda da janela, o que no KDE é feito clicando com o botão direito na barra de título e usando a opção "Avançado &gt; Sem Borda" (pressione "Alt+F3" para que ela volte a ser exibida). Você pode também mover a janela (o que é muito útil em casos em que o sistema dentro da VM configura o vídeo com uma resolução vertical maior que a área útil da tela), segurando a tecla Alt e arrastando a janela usando o botão esquerdo do mouse.

Em alguns casos (que estão se tornando cada vez mais raros, conforme o software evolui), o KVM pode apresentar erros diversos durante a instalação de alguns sistemas operacionais específicos. Nesse caso, você tem a opção de desativar o KVM, ficando apenas com o Qemu sem aceleração que, embora muito mais lento, consegue completar a instalação na maioria dos casos. Para isso, basta executar o mesmo comando, substituindo o "kvm" por "qemu -no-kvm":

$ qemu -no-kvm -cdrom /dev/cdrom -hda ubuntu.img -m 512 -boot d

Estes problemas se manifestam apenas durante a instalação, de maneira que você pode voltar a usar o KVM normalmente depois que ela estiver concluída.

Outra opção destinada a solucionar problemas de instalação é a "-no-acpi" (que era necessária para instalar o Windows em versões anteriores do KVM), que pode ser adicionada no final do comando, como em:

$ kvm -cdrom winxp.iso -hda xp.img -m 256 -boot d -no-acpi

Depois de instalado o sistema dentro da VM, o comando para inicializá-la daí em dia é bem mais simples, indicando apenas o disco virtual e a quantidade de memória reservada, como em:

$ kvm -hda ubuntu.img -m 512

Para facilitar, crie ícones de atalho para as VMs criadas. Basta indicar o comando, especificando o caminho completo para o arquivo do disco virtual:





O KVM inclui um sistema de compartilhamento de conexão, que simplesmente compartilha a conexão de rede via NAT, permitindo que o sistema guest configure a rede via DHCP. Graças a isso, você não precisa executar nenhum passo adicional para que a VM acesse a web, basta deixar que ela obtenha a configuração de rede via DHCP durante a instalação. Este modo é equivalente às opções "-net nic -net user", que precisavam ser especificadas manualmente em versões antigas.

Concluindo, se ao abrir a VM você receber um erro como:

open /dev/kvm: Permission deniedCould not initialize KVM, will disable KVM support

... significa que o KVM não está carregado, ou que (mais provável) as permissões de acesso ao dispositivo virtual não foram ajustadas corretamente ao instalar o pacote. Nesse caso, carregue o módulo (apenas por desencargo) e ajuste as permissões manualmente, como em:

# modprobe kvm# chown root:kvm /dev/kvm# adduser gdh kvm

Se você é o único que utiliza o PC, pode simplesmente abrir as permissões do dispositivo, de modo a não precisar mais se preocupar com isso:

# chmod 666 /dev/kvm

A principal limitação do KVM é que ele funciona apenas em processadores com suporte a virtualização via hardware, o que deixa de fora a maioria das máquinas antigas. Você pode checar se o processador possui ou não suporte à virtualização usando o comando "cat /proc/cpuinfo", onde o campo "flags" deve incluir o "vmx" ou o "svm", como em:

flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow rep_good nopl pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy 3dnowprefetch

É necessário também que o suporte a virtualização esteja ativado no Setup (caso a opção esteja disponível. Procure pela opção "Enable SVM" ou "Virtualization support".

Caso o processador não suporte nenhum dos dois, você ainda poderá usar o Qemu em modo de emulação (usando os mesmos comandos), mas tudo ficará muito lento. Nesse caso, o melhor seria partir para o VMware ou o VirtualBox, que não dependem de suporte especial por parte do processador.