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 su2 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/cpuinfodeveria 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-ipxeDepois disso, devemos adicionar o usuário com o qual estamos logados (root) ao grupo libvirtd:
adduser `id -un` libvirtd
adduser `id -un` kvmVocê 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 listDeveria 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/interfacesAntes 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
ifconfigAgora 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:
rebootSe 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 --helppara 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=br0A 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#Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.