Virtualização · 8 min read · Jan 12, 2026

Virtualização Com KVM No Ubuntu 12.04 LTS

Virtualização Com KVM No Ubuntu 12.04 LTS

Versão 1.0
Autor: Falko Timme
Siga-me no Twitter

Este guia explica como você pode instalar e usar o KVM para criar e executar máquinas virtuais em um servidor Ubuntu 12.04 LTS. Eu vou mostrar como criar máquinas virtuais baseadas em imagem e também máquinas virtuais que usam um volume lógico (LVM). KVM é a sigla para Kernel-based Virtual Machine e faz uso de virtualização de hardware, ou seja, você precisa de um CPU que suporte virtualização de hardware, por exemplo, Intel VT ou AMD-V.

Eu não dou nenhuma garantia de que isso funcionará para você!

1 Nota Preliminar

Estou usando uma máquina com o nome do host server1.example.com e o endereço IP 192.168.0.100 aqui como meu host KVM.

Como iremos executar todos os passos deste tutorial com privilégios de root, podemos ou adicionar a string sudo a todos os comandos neste tutorial, ou nos tornarmos root agora digitando

sudo su

2 Instalando KVM E vmbuilder

Primeiro verifique se sua CPU suporta virtualização de hardware - se este for o caso, o comando

egrep '(vmx|svm)' --color=always /proc/cpuinfo

deveria exibir algo, por exemplo, assim:

root@server1:~# egrep '(vmx|svm)' --color=always /proc/cpuinfo  
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 extd_apicid  
pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy 3dnowprefetch lbrv  
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 extd_apicid  
pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy 3dnowprefetch lbrv  
root@server1:~#

Se nada for exibido, então seu processador não suporta virtualização de hardware, e você deve parar aqui.

Para instalar o KVM e o vmbuilder (um script para criar máquinas virtuais baseadas em Ubuntu), executamos

apt-get install ubuntu-virt-server python-vm-builder kvm-ipxe

Depois disso, devemos adicionar o usuário com o qual estamos logados (root) ao grupo libvirtd:

adduser `id -un` libvirtd  
adduser `id -un` kvm

Você precisa sair e entrar novamente para que as novas associações de grupo tenham efeito.

Para verificar se o KVM foi instalado com sucesso, execute

virsh -c qemu:///system list

Deveria exibir algo como isto:

root@server1:~# virsh -c qemu:///system list  
 Id Name                 State  
----------------------------------  
  
root@server1:~#

Se exibir um erro em vez disso, então algo deu errado.

Em seguida, precisamos configurar uma ponte de rede em nosso servidor para que nossas máquinas virtuais possam ser acessadas de outros hosts como se fossem sistemas físicos na rede.

Para fazer isso, instalamos o pacote bridge-utils…

apt-get install bridge-utils

… e configuramos uma ponte. Abra /etc/network/interfaces:

vi /etc/network/interfaces

Antes da modificação, meu arquivo se parece com o seguinte:

| # Este arquivo descreve as interfaces de rede disponíveis em seu sistema # e como ativá-las. Para mais informações, veja interfaces(5). # A interface de rede de loopback auto lo iface lo inet loopback # A interface de rede primária auto eth0 iface eth0 inet static address 192.168.0.100 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1 dns-nameservers 8.8.8.8 8.8.4.4 |

Eu mudo para que fique assim:

| # Este arquivo descreve as interfaces de rede disponíveis em seu sistema # e como ativá-las. Para mais informações, veja interfaces(5). # A interface de rede de loopback auto lo iface lo inet loopback # A interface de rede primária auto eth0 iface eth0 inet manual auto br0 iface br0 inet static address 192.168.0.100 network 192.168.0.0 netmask 255.255.255.0 broadcast 192.168.0.255 gateway 192.168.0.1 dns-nameservers 8.8.8.8 8.8.4.4 bridge_ports eth0 bridge_fd 9 bridge_hello 2 bridge_maxage 12 bridge_stp off |

(Assegure-se de usar as configurações corretas para sua rede!)

Reinicie a rede…

/etc/init.d/networking restart

… e execute

ifconfig

Agora deve mostrar a ponte de rede (br0):

root@server1:~# ifconfig  
br0       Link encap:Ethernet  HWaddr 00:1e:90:f3:f0:02  
          inet addr:192.168.0.100  Bcast:192.168.0.255  Mask:255.255.255.0  
          inet6 addr: fe80::21e:90ff:fef3:f002/64 Scope:Link  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1  
          RX packets:29 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:29 errors:0 dropped:0 overruns:0 carrier:0  
          collisions:0 txqueuelen:0  
          RX bytes:1934 (1.9 KB)  TX bytes:2844 (2.8 KB)  
  
eth0      Link encap:Ethernet  HWaddr 00:1e:90:f3:f0:02  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1  
          RX packets:44613 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:23445 errors:0 dropped:0 overruns:0 carrier:0  
          collisions:0 txqueuelen:1000  
          RX bytes:63663064 (63.6 MB)  TX bytes:1792940 (1.7 MB)  
          Interrupt:41 Base address:0xa000  
  
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0  
          inet6 addr: ::1/128 Scope:Host  
          UP LOOPBACK RUNNING  MTU:16436  Metric:1  
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0  
          collisions:0 txqueuelen:0  
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)  
  
virbr0    Link encap:Ethernet  HWaddr 2a:4a:49:13:de:8f  
          inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1  
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0  
          collisions:0 txqueuelen:0  
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)  
  
root@server1:~#

Antes de começarmos nossa primeira máquina virtual, recomendo reiniciar o sistema:

reboot

Se você não fizer isso, pode receber um erro como open /dev/kvm: Permission denied nos logs da máquina virtual no diretório /var/log/libvirt/qemu/.

3 Criando Uma VM Baseada em Imagem

Agora podemos criar nossa primeira VM - uma VM baseada em imagem (se você espera muito tráfego e muitas operações de leitura e gravação para essa VM, use uma VM baseada em LVM em vez disso, como mostrado no capítulo 6 - VMs baseadas em imagem são pesadas em IO de disco rígido).

Eu quero criar minhas máquinas virtuais no diretório /var/lib/libvirt/images/ (elas não podem ser criadas no diretório /root porque o usuário libvirt-qemu não tem permissões de leitura nesse diretório).

Nós criaremos um novo diretório para cada VM que queremos criar, por exemplo, /var/lib/libvirt/images/vm1, /var/lib/libvirt/images/vm2, /var/lib/libvirt/images/vm3, e assim por diante, porque cada VM terá um subdiretório chamado ubuntu-kvm, e obviamente só pode haver um desses diretórios em /var/lib/libvirt/images/vm1, por exemplo. Se você tentar criar uma segunda VM em /var/lib/libvirt/images/vm1, por exemplo, você receberá uma mensagem de erro dizendo que ubuntu-kvm já existe (a menos que você execute o vmbuilder com o argumento –dest=DESTDIR):

root@server1:/var/lib/libvirt/images/vm1# vmbuilder kvm ubuntu -c vm2.cfg  
2009-05-07 16:32:44,185 INFO     Cleaning up  
ubuntu-kvm já existe  
root@server1:/var/lib/libvirt/images/vm1#

Usaremos a ferramenta vmbuilder para criar VMs. (Você pode aprender mais sobre o vmbuilder aqui.) o vmbuilder usa um modelo para criar máquinas virtuais - este modelo está localizado no diretório /etc/vmbuilder/libvirt/. Primeiro, criamos uma cópia:

mkdir -p /var/lib/libvirt/images/vm1/mytemplates/libvirt  
cp /etc/vmbuilder/libvirt/* /var/lib/libvirt/images/vm1/mytemplates/libvirt/

Agora chegamos à partição da nossa VM. Criamos um arquivo chamado vmbuilder.partition…

vi /var/lib/libvirt/images/vm1/vmbuilder.partition

… e definimos as partições desejadas da seguinte forma:

| root 8000 swap 4000 --- /var 20000 |

Isso define uma partição raiz (/) com um tamanho de 8000MB, uma partição swap de 4000MB e uma partição /var de 20000MB. A linha — faz com que a partição seguinte (/var neste exemplo) esteja em uma imagem de disco separada (ou seja, isso criaria duas imagens de disco, uma para root e swap e uma para /var). Claro, você é livre para definir quaisquer partições que desejar (desde que também defina root e swap), e claro, elas podem estar em apenas uma imagem de disco - isso é apenas um exemplo.

Eu quero instalar o openssh-server na VM. Para garantir que cada VM receba uma chave OpenSSH única, não podemos instalar o openssh-server quando criamos a VM. Portanto, criamos um script chamado boot.sh que será executado quando a VM for inicializada pela primeira vez. Ele instalará o openssh-server (com uma chave única) e também forçará o usuário (usarei o nome de usuário padrão administrator para minhas VMs junto com a senha padrão howtoforge) a mudar a senha quando ele fizer login pela primeira vez:

vi /var/lib/libvirt/images/vm1/boot.sh

| # Este script será executado na primeira vez que a máquina virtual inicializa # Ele é executado como root. # Expirar a conta do usuário passwd -e administrator # Instalar openssh-server apt-get update apt-get install -qqy --force-yes openssh-server |

Certifique-se de substituir o nome de usuário administrator pelo seu nome de login padrão.

(Você pode encontrar mais sobre isso aqui: https://help.ubuntu.com/community/JeOSVMBuilder#First%20boot)

(Você também pode definir um script de “primeiro login” conforme descrito aqui: https://help.ubuntu.com/community/JeOSVMBuilder#First%20login)

Agora dê uma olhada em

vmbuilder kvm ubuntu --help

para aprender sobre as opções disponíveis.

Para criar nossa primeira VM, vm1, vamos para o diretório da VM…

cd /var/lib/libvirt/images/vm1/

… e executamos o vmbuilder, por exemplo, da seguinte forma:

vmbuilder kvm ubuntu --suite=precise --flavour=virtual --arch=amd64 --mirror=http://de.archive.ubuntu.com/ubuntu -o --libvirt=qemu:///system --ip=192.168.0.101 --gw=192.168.0.1 --part=vmbuilder.partition --templates=mytemplates --user=administrator --name=Administrator --pass=howtoforge --addpkg=vim-nox --addpkg=unattended-upgrades --addpkg=acpid --firstboot=/var/lib/libvirt/images/vm1/boot.sh --mem=256 --hostname=vm1 --bridge=br0

A maioria das opções é autoexplicativa. –part especifica o arquivo com os detalhes da partição, relativo ao nosso diretório de trabalho (é por isso que tivemos que ir para o diretório da VM antes de executar o vmbuilder), –templates especifica o diretório que contém o arquivo de modelo (novamente relativo ao nosso diretório de trabalho), e –firstboot especifica o script de primeiro boot. –libvirt=qemu:///system diz ao KVM para adicionar esta VM à lista de máquinas virtuais disponíveis. –addpkg permite que você especifique pacotes do Ubuntu que deseja ter instalados durante a criação da VM (veja acima por que você não deve adicionar o openssh-server a essa lista e usar o script de primeiro boot em vez disso). –bridge configura uma rede em ponte; como criamos a ponte br0 no capítulo 2, especificamos essa ponte aqui.

Na linha –mirror, você pode especificar um repositório oficial do Ubuntu em –mirror, por exemplo, http://de.archive.ubuntu.com/ubuntu. Se você deixar de fora –mirror, então o repositório padrão do Ubuntu (http://archive.ubuntu.com/ubuntu) será usado.

O processo de construção pode levar alguns minutos.

Depois, você pode encontrar um arquivo de configuração XML para a VM em /etc/libvirt/qemu/ (=> /etc/libvirt/qemu/vm1.xml):

ls -l /etc/libvirt/qemu/
root@server1:/var/lib/libvirt/images/vm1# ls -l /etc/libvirt/qemu/  
total 8  
drwxr-xr-x 3 root root 4096 May 21 13:00 networks  
-rw------- 1 root root 2082 May 21 13:15 vm1.xml  
root@server1:/var/lib/libvirt/images/vm1#

As imagens de disco estão localizadas no subdiretório ubuntu-kvm/ do nosso diretório da VM:

ls -l /var/lib/libvirt/images/vm1/ubuntu-kvm/
root@server1:/var/lib/libvirt/images/vm1# ls -l /var/lib/libvirt/images/vm1/ubuntu-kvm/  
total 604312  
-rw-r--r-- 1 root root 324337664 May 21 13:14 tmpE4IiRv.qcow2  
-rw-r--r-- 1 root root 294715392 May 21 13:15 tmpxvSVOT.qcow2  
root@server1:/var/lib/libvirt/images/vm1#
Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.