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-toolsDepois, 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:
rebootExecute
uname -re 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:
rebootDepois,
xm dmesgdeve 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 --suitena 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 --mirrorse 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=udevAs 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.cfgroot@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.compara 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
xm destroy
xm list - Listar todos os sistemas em execução.
xm console
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-imagesroot@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
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.