Virtualização · 9 min read · Dec 09, 2025

Paravirtualização Com Xen 4.0 No Debian Squeeze (AMD64)

Paravirtualização Com Xen 4.0 No Debian Squeeze (AMD64)

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

Este tutorial fornece instruções passo a passo sobre como instalar o Xen 4.0 em um Debian Squeeze (6.0) sistema (AMD64) e criar convidados paravirtualizados (não confunda isso com convidados totalmente virtualizados, ou seja, virtualização de hardware (HVM)).

O Xen permite que você crie sistemas operacionais convidados (sistemas operacionais nix como Linux e FreeBSD), chamadas de “máquinas virtuais” ou domUs, sob um sistema operacional host (dom0). Usando o Xen, você pode separar suas aplicações em diferentes máquinas virtuais que são totalmente independentes umas das outras (por exemplo, uma máquina virtual para um servidor de e-mail, uma máquina virtual para um site de alto tráfego, outra máquina virtual que atende os sites de seus clientes, uma máquina virtual para DNS, etc.), mas ainda usar o mesmo hardware. Isso economiza dinheiro e, o que é ainda mais importante, é mais seguro. Se a máquina virtual do seu servidor DNS for invadida, isso não afetará suas outras máquinas virtuais. Além disso, você pode mover máquinas virtuais de um servidor Xen para o próximo.

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

1 Nota Preliminar

Estou usando um sistema Debian Squeeze (x86_64) com o nome do host server1.example.com e o endereço IP 192.168.0.100 como o sistema host (dom0). (A configuração pode diferir ligeiramente se você estiver em um sistema i386.) Usarei o Debian Squeeze para as máquinas virtuais (domU) também (mas também mostrarei as alterações que você precisa fazer se quiser instalar um convidado Ubuntu Maverick).

Este guia explicará como configurar máquinas virtuais baseadas em imagem e também máquinas virtuais baseadas em LVM.

2 Instalando o Xen

Para instalar o Xen, simplesmente executamos

apt-get install xen-hypervisor xen-linux-system xen-utils xenstore-utils xenwatch xen-tools

Depois, abrimos /etc/modules e nos certificamos de que temos a linha loop max_loop=64 nela (este passo é necessário apenas se você quiser criar máquinas virtuais baseadas em imagem - você pode ignorá-lo se quiser criar máquinas virtuais baseadas em LVM):

vi /etc/modules

| [...] loop max_loop=64 |

Em seguida, abrimos /etc/xen/xend-config.sxp…

vi /etc/xen/xend-config.sxp

… e descomentamos/adicionamos a linha (network-script ‘network-bridge antispoof=yes’) e comentamos todas as outras linhas (network-script …) (antispoof=yes ativa o firewall do Xen que impede que uma VM use um endereço IP que não é permitido, como, por exemplo, o IP do seu gateway). Também certifique-se de que a linha (vif-script vif-bridge) esteja habilitada:

| [...] (network-script 'network-bridge antispoof=yes') [...] (vif-script vif-bridge) [...] |

Então reinicie o sistema:

reboot

Execute

uname -r

e seu novo kernel Xen deve aparecer:

root@server1:~# uname -r
2.6.32-5-xen-amd64
root@server1:~#

Agora execute

xm dmesg 

Se você obtiver uma saída como esta…

root@server1:~# xm dmesg
WARNING! Can’t find hypervisor information in sysfs!
Error: Unable to connect to xend: No such file or directory. Is xend running?
root@server1:~#

… isso significa que você está apenas executando em um kernel pronto para Xen, mas não no próprio hipervisor Xen (o que significa que você não poderá inicializar máquinas virtuais). Para mudar isso, altere a ordem de inicialização de seus kernels da seguinte forma e atualize o carregador de inicialização GRUB:

mv /etc/grub.d/10_linux /etc/grub.d/50_linux
update-grub2

Isso garante que na próxima vez que você inicializar, o hipervisor Xen seja carregado.

Reinicie novamente:

reboot

Depois,

xm dmesg

deve mostrar que o hipervisor está em execução:

root@server1:~# xm dmesg
(XEN) Xen version 4.0.1 (Debian 4.0.1-2) ( [email protected]) (gcc version 4.4.5 (Debian 4.4.5-10) ) Wed Jan 12 14:04:06 UTC 2011
(XEN) Bootloader: GRUB 1.98+20100804-14
(XEN) Command line: placeholder
(XEN) Video information:
(XEN)  VGA is text mode 80x25, font 8x16
(XEN)  VBE/DDC methods: V2; EDID transfer time: 1 seconds
(XEN) Disc information:
(XEN)  Found 1 MBR signatures
(XEN)  Found 1 EDD information structures
(XEN) Xen-e820 RAM map:
(XEN)  0000000000000000 - 000000000009f000 (usable)
(XEN)  000000000009f000 - 00000000000a0000 (reserved)
(XEN)  00000000000e0000 - 0000000000100000 (reserved)
(XEN)  0000000000100000 - 00000000affa0000 (usable)
(XEN)  00000000affa0000 - 00000000affae000 (ACPI data)
(XEN)  00000000affae000 - 00000000afff0000 (reserved)
(XEN)  00000000afff0000 - 00000000b0000000 (reserved)
(XEN)  00000000fec00000 - 00000000fec01000 (reserved)
(XEN)  00000000fee00000 - 00000000fef00000 (reserved)
(XEN)  00000000ff700000 - 0000000100000000 (reserved)
(XEN)  0000000100000000 - 0000000140000000 (usable)
(XEN) ACPI: RSDP 000FA310, 0014 (r0 ACPIAM)
(XEN) ACPI: RSDT AFFA0000, 0044 (r1 052608 RSDT1415 20080526 MSFT       97)
(XEN) ACPI: FACP AFFA0200, 0084 (r1 052608 FACP1415 20080526 MSFT       97)
(XEN) ACPI: DSDT AFFA0450, 960C (r1  1AAAA 1AAAA000        0 INTL 20051117)
(XEN) ACPI: FACS AFFAE000, 0040
(XEN) ACPI: APIC AFFA0390, 0080 (r1 052608 APIC1415 20080526 MSFT       97)
(XEN) ACPI: MCFG AFFA0410, 003C (r1 052608 OEMMCFG  20080526 MSFT       97)
(XEN) ACPI: OEMB AFFAE040, 0073 (r1 052608 OEMB1415 20080526 MSFT       97)
(XEN) ACPI: HPET AFFA9A60, 0038 (r1 052608 OEMHPET0 20080526 MSFT       97)
(XEN) ACPI: INFO AFFAE0C0, 0124 (r1 052608 AMDINFO  20080526 MSFT       97)
(XEN) ACPI: NVHD AFFAE1F0, 0284 (r1 052608  NVHDCP  20080526 MSFT       97)
(XEN) ACPI: SSDT AFFA9AA0, 028A (r1 A M I  POWERNOW        1 AMD         1)
(XEN) Sistema RAM: 3839MB (3931388kB)
(XEN) Heap do domínio inicializado
(XEN) Processador #0 15:11 versão APIC 16
(XEN) Processador #1 15:11 versão APIC 16
(XEN) IOAPIC[0]: apic_id 2, versão 17, endereço 0xfec00000, GSI 0-23
(XEN) Habilitando modo APIC:  Flat.  Usando 1 I/O APICs
(XEN) Usando agendador: SMP Credit Scheduler (credit)
(XEN) Detectado processador 2600.088 MHz.
(XEN) Iniciando compartilhamento de memória.
(XEN) HVM: ASIDs habilitados.
(XEN) HVM: SVM habilitado
(XEN) AMD-Vi: IOMMU não encontrado!
(XEN) Virtualização de I/O desabilitada
(XEN) AMD: Desabilitando C1 Clock Ramping Node #0
(XEN) Total de 2 processadores ativados.
(XEN) HABILITANDO IRQs IO-APIC
(XEN)  -> Usando novo método ACK
(XEN) verificando sincronização TSC entre 2 CPUs:
(XEN) CPU#0 tinha -2 usecs de desvio TSC, corrigido.
(XEN) CPU#1 tinha 2 usecs de desvio TSC, corrigido.
(XEN) O temporizador da plataforma é 25.000MHz HPET
(XEN) Anel de console alocado de 16 KiB.
(XEN) Levantou 2 CPUs
(XEN)  CARREGANDO DOMÍNIO 0 
(XEN)  Kernel Xen: 64-bit, lsb, compat32
(XEN)  Kernel Dom0: 64-bit, PAE, lsb, paddr 0x1000000 -> 0x16ba000
(XEN) ARRANJO DE MEMÓRIA FÍSICA:
(XEN)  Dom0 aloc.:   0000000138000000->000000013c000000 (921455 páginas a serem alocadas)
(XEN) ARRANJO DE MEMÓRIA VIRTUAL:
(XEN)  Kernel carregado: ffffffff81000000->ffffffff816ba000
(XEN)  Init. ramdisk: ffffffff816ba000->ffffffff8323b600
(XEN)  Mapa Phys-Mach: ffffffff8323c000->ffffffff83963b78
(XEN)  Informações de início:    ffffffff83964000->ffffffff839644b4
(XEN)  Tabelas de páginas:   ffffffff83965000->ffffffff83986000
(XEN)  Pilha de inicialização:    ffffffff83986000->ffffffff83987000
(XEN)  TOTAL:         ffffffff80000000->ffffffff83c00000
(XEN)  ENDEREÇO DE ENTRADA: ffffffff81509200
(XEN) Dom0 tem máximo de 2 VCPUs
(XEN) Limpando RAM Livre: .feito.
(XEN) Buffers de rastreamento Xen: desabilitados
(XEN) Nível de log padrão: Erros e avisos
(XEN) Nível de log do convidado: Nada (Limite de taxa: Erros e avisos)
(XEN) Xen está renunciando console VGA.
(XEN) * Entrada serial -> DOM0 (tipo ’CTRL-a’ três vezes para mudar a entrada para Xen)
(XEN) Liberou 176kB de memória inicial.
(XEN) MCE: MSR 417 não é MSR MCA
(XEN) MCE: MSR 417 não é MSR MCA
root@server1:~#

3 Criando Máquinas Virtuais Baseadas em Imagem

Usaremos xen-tools para criar máquinas virtuais. xen-tools facilitam muito a criação de máquinas virtuais - por favor, leia este tutorial para saber mais: https://www.howtoforge.com/xen_tools_xen_shell_argo. Já instalamos xen-tools na etapa anterior (capítulo 2).

Agora editamos /etc/xen-tools/xen-tools.conf. Este arquivo contém os valores padrão que são usados pelo script xen-create-image, a menos que você especifique outros valores na linha de comando. Eu mudei os seguintes valores e deixei o resto inalterado:

vi /etc/xen-tools/xen-tools.conf

| [...] dir = /home/xen [...] # lvm = vg0 [...] dist = `xt-guess-suite-and-mirror --suite` # Distribuição padrão a ser instalada. [...] gateway = 192.168.0.1 netmask = 255.255.255.0 broadcast = 192.168.0.255 [...] passwd = 1 [...] kernel = /boot/vmlinuz-`uname -r` initrd = /boot/initrd.img-`uname -r` [...] mirror = `xt-guess-suite-and-mirror --mirror` [...] serial_device = hvc0 #padrão [...] disk_device = xvda #padrão [...] |

A linha dir especifica onde as imagens das máquinas virtuais serão armazenadas. Certifique-se de que ao mesmo tempo, lvm esteja comentado (essas configurações são mutuamente exclusivas!).

dist especifica a distribuição a ser instalada nas máquinas virtuais (se você executar o comando

xt-guess-suite-and-mirror --suite

na linha de comando, você verá que se traduz em squeeze, então neste caso o Debian Squeeze seria instalado, a menos que você especifique algo diferente na linha de comando).

Para descobrir quais distribuições você pode instalar em uma máquina virtual, execute:

gunzip /usr/share/doc/xen-tools/README.gz
cat /usr/share/doc/xen-tools/README

A linha passwd = 1 faz com que você possa especificar uma senha root ao criar um novo domínio convidado.

As linhas kernel e initrd especificam o kernel e o ramdisk que são instalados em uma máquina virtual. Se você quiser instalar o Debian Squeeze, use as configurações conforme mostrado acima (caso contrário, o convidado Debian Squeeze pode não inicializar). Se você quiser instalar o Ubuntu Maverick, por exemplo, pode usar as mesmas configurações, ou comentar ambas as linhas, caso em que o kernel padrão do Ubuntu seria usado (sim, o Xen 4.0 permite que você use kernels não-Xen em um convidado!).

Certifique-se de especificar um gateway, máscara de rede e endereço de broadcast. Se você não o fizer, e não especificar um gateway e máscara de rede na linha de comando ao usar xen-create-image, seus domínios convidados não terão rede, mesmo que você tenha especificado um endereço IP!

A linha mirror especifica o espelho a ser usado (o comando

xt-guess-suite-and-mirror --mirror

se traduz em um espelho Debian por padrão. Claro, você pode especificar outro espelho, por exemplo, da seguinte forma:

mirror = http://ftp.de.debian.org/debian/

ou

mirror = http://archive.ubuntu.com/ubuntu (para Ubuntu; neste caso, certifique-se de que você especifique uma versão do Ubuntu na linha dist, por exemplo, dist = maverick)

)

É muito importante que você adicione a linha serial_device = hvc0 porque, caso contrário, suas máquinas virtuais podem não inicializar corretamente!

disk_device = xvda faz com que os discos virtualizados sejam nomeados xvda1, xvda2, etc. Esta é a configuração correta para um convidado Debian Squeeze; convidados Ubuntu, especialmente ao usar um kernel não-Xen, podem não inicializar com esta configuração, mas você pode substituí-la com a opção –scsi que você passa para o comando xen-create-image - neste caso, os discos virtualizados serão nomeados sda1, sda2, etc.

Para resumir, as configurações acima são perfeitas para convidados Debian Squeeze; se você quiser instalar o Ubuntu Maverick em vez disso, terá que substituir algumas das configurações em /etc/xen-tools/xen-tools.conf (–dist, –mirror, –scsi switches; talvez também comentar kernel e initrd) - vou chegar a isso em um momento.

Antes de prosseguirmos, devemos criar o diretório onde as imagens das máquinas virtuais devem ser armazenadas:

mkdir /home/xen 

Agora vamos criar nosso primeiro domínio convidado, xen1.example.com, com o endereço IP 192.168.0.101:

xen-create-image --hostname=xen1.example.com --size=4Gb --swap=256Mb --ip=192.168.0.101 --memory=256Mb --arch=amd64 --role=udev

As opções que você especifica na linha de comando substituem as configurações em /etc/xen-tools/xen-tools.conf. As opções que não são especificadas na linha de comando são retiradas de /etc/xen-tools/xen-tools.conf. Certifique-se de adicionar –role=udev, ou sua máquina virtual pode não inicializar corretamente!

(Para saber mais sobre as opções disponíveis, dê uma olhada na página de manual do xen-create-image:

man xen-create-image

)

O comando xen-create-image agora criará a máquina virtual xen1.example.com para nós. Isso pode levar alguns minutos. A saída deve ser semelhante a esta:

root@server1:~# xen-create-image –hostname=xen1.example.com –size=4Gb –swap=256Mb –ip=192.168.0.101 –memory=256Mb –arch=amd64 –role=udev

Informações Gerais

Hostname       :  xen1.example.com
Distribuição   :  squeeze
Espelho        :  http://ftp.de.debian.org/debian/
Partições     :  swap            256Mb (swap)
/               4Gb   (ext3)
Tipo de imagem  :  sparse
Tamanho da memória:  256Mb
Caminho do kernel:  /boot/vmlinuz-2.6.32-5-xen-amd64
Caminho do Initrd:  /boot/initrd.img-2.6.32-5-xen-amd64

Informações de Rede

Endereço IP 1   : 192.168.0.101 [MAC: 00:16:3E:E8:61:97]
Máscara de Rede  : 255.255.255.0
Endereço de Broadcast: 192.168.0.255
Gateway        : 192.168.0.1

Criando imagem da partição: /home/xen/domains/xen1.example.com/swap.img
Feito

Criando swap em /home/xen/domains/xen1.example.com/swap.img
Feito

Criando imagem da partição: /home/xen/domains/xen1.example.com/disk.img
Feito

Criando sistema de arquivos ext3 em /home/xen/domains/xen1.example.com/disk.img
Feito
Método de instalação: debootstrap
Feito

Executando hooks
Feito

Função: udev
Arquivo: /etc/xen-tools/role.d/udev
Script de função concluído.

Criando arquivo de configuração Xen
Feito
Configurando senha root
Digite nova senha UNIX:
Digite novamente a nova senha UNIX:
passwd: senha atualizada com sucesso
Tudo pronto

Arquivo de log produzido em:
/var/log/xen-tools/xen1.example.com.log

Resumo da Instalação

Hostname        :  xen1.example.com
Distribuição    :  squeeze
Endereço(s) IP  :  192.168.0.101
Fingerprint RSA :  81:d1:7a:44:3b:07:41:3a:0f:46:d5:d5:30:bc:26:43
Senha Root      :  N/A

root@server1:~#

Para um convidado Ubuntu Maverick, você deve usar este comando em vez disso:

xen-create-image --hostname=xen1.example.com --size=4Gb --swap=256Mb --ip=192.168.0.101 --memory=256Mb --arch=amd64 --role=udev --scsi --dist maverick --mirror=http://archive.ubuntu.com/ubuntu 

(Para usar o kernel padrão do Ubuntu em vez do kernel Xen do Debian no convidado, você também pode comentar as linhas kernel e initrd em /etc/xen-tools/xen-tools.conf.)

Agora deve haver um arquivo de configuração xen1.example.com - /etc/xen/xen1.example.com.cfg. Dê uma olhada nele para se familiarizar com os arquivos de configuração de máquinas virtuais:

cat /etc/xen/xen1.example.com.cfg

| # # Arquivo de configuração para a instância Xen xen1.example.com, criado # pelo xen-tools 4.2 em Sex Mar 25 15:56:51 2011. # # # Kernel + tamanho da memória # kernel = '/boot/vmlinuz-2.6.32-5-xen-amd64' ramdisk = '/boot/initrd.img-2.6.32-5-xen-amd64' vcpus = '1' memory = '256' # # Dispositivo(s) de disco. # root = '/dev/xvda2 ro' disk = [ 'file:/home/xen/domains/xen1.example.com/disk.img,xvda2,w', 'file:/home/xen/domains/xen1.example.com/swap.img,xvda1,w', ] # # Volumes físicos # # # Nome do host # name = 'xen1.example.com' # # Rede # vif = [ 'ip=192.168.0.101,mac=00:16:3E:E8:61:97' ] # # Comportamento # on_poweroff = 'destroy' on_reboot = 'restart' on_crash = 'restart' |

(Observe: se você tiver um CPU dual-core ou quad-core e quiser que a máquina virtual use todos os núcleos da CPU, altere a linha vcpus para vcpus = ‘2’ ou vcpus = ‘4’.)

Para iniciar a máquina virtual, execute

xm create /etc/xen/xen1.example.com.cfg

root@server1:~# xm create /etc/xen/xen1.example.com.cfg
Usando o arquivo de configuração “/etc/xen/xen1.example.com.cfg”.
Domínio xen1.example.com iniciado (id=1)
root@server1:~#

Execute

xm console xen1.example.com

para fazer login nessa máquina virtual (digite CTRL+] se você estiver no console, ou CTRL+5 se estiver usando PuTTY para voltar ao dom0), ou use um cliente SSH para se conectar a ela (192.168.0.101).

Para obter uma lista de máquinas virtuais em execução, digite

xm list 

A saída deve ser semelhante a esta:

root@server1:~# xm list
Nome                                        ID   Mem VCPUs      Estado   Tempo(s)
Domain-0                                     0  2811     2     r—–    137.2
xen1.example.com                             1   256     1     -b—-      1.7
root@server1:~#

Para desligar xen1.example.com, faça isto:

xm shutdown xen1.example.com 

Se você quiser que xen1.example.com inicie automaticamente na próxima inicialização do sistema, faça isto:

mkdir /etc/xen/auto
ln -s /etc/xen/xen1.example.com.cfg /etc/xen/auto

Aqui estão os comandos mais importantes do Xen:

xm create -c /path/to/config - Iniciar uma máquina virtual.
xm shutdown - Parar uma máquina virtual.
xm destroy - Parar uma máquina virtual imediatamente sem desligá-la. É como se você desligasse o botão de energia.
xm list - Listar todos os sistemas em execução.
xm console - Fazer login em uma máquina virtual.
xm help - Lista de todos os comandos.

Uma lista de todas as máquinas virtuais que foram criadas com o comando xen-create-image está disponível em

xen-list-images

root@server1:~# xen-list-images
Nome: xen1.example.com
Memória: 256
IP: 192.168.0.101
root@server1:~#

Para saber mais sobre o que você pode fazer com xen-tools, dê uma olhada neste tutorial: https://www.howtoforge.com/xen_tools_xen_shell_argo

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.