Xen 4.0 no Debian Squeeze: mudanças entre as edições

De Eriberto Wiki
Ir para navegação Ir para pesquisar
mSem resumo de edição
 
(33 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
{{revisão}}
{{exclamação1|Este artigo foi escrito para Debian [http://wiki.debian.org/DebianSqueeze Debian Squeeze].}}
<br>
{{exclamação1|Este artigo foi escrito para Debian [http://wiki.debian.org/DebianSqueeze Debian Squeeze] que, atualmente, encontra-se como [http://www.debian.org/devel/testing ''testing''] no [http://www.debian.org Projeto Debian]. Serão utilizados alguns pacotes existentes no repositório ''unstable''. Este aviso será modificado assim que alguma dessas situações se alterar, até que o Squeeze se torne estável.}}


[[Image:Xendeb.jpg|center]]
[[Image:Xendeb.jpg|center]]
Linha 15: Linha 13:


No Xen, a máquina real ou hospedeira recebe a demominação de Dom0. A máquina virtual é chamada de DomU. No Debian i386, o kernel Xen já possui PAE, ou seja, consegue endereçar a memória até 64 GB. Uma outra alternativa é utilizar o Debian AMD64. Escolha o que for melhor para o seu caso.
No Xen, a máquina real ou hospedeira recebe a demominação de Dom0. A máquina virtual é chamada de DomU. No Debian i386, o kernel Xen já possui PAE, ou seja, consegue endereçar a memória até 64 GB. Uma outra alternativa é utilizar o Debian AMD64. Escolha o que for melhor para o seu caso.
{{exclamação1|Este artigo foi criado na mesma semana da entrada do Xen 4.0 na release unstable. Nessa oportunidade, foram abertos alguns bugs relativos ao funcionamento do Xen no Debian AMD64. Com certeza, em breve, os problemas serão resolvidos e esta mensagem será removida.}}
<br><br>
<br><br>


Linha 36: Linha 32:
{{exclamação1|Se for necessário, instale pacotes adicionais que sejam essenciais para você, como algum editor de textos diferente ou algo assim.}}
{{exclamação1|Se for necessário, instale pacotes adicionais que sejam essenciais para você, como algum editor de textos diferente ou algo assim.}}


Agora, edite o arquivo ''/etc/apt/sources.list'' e crie a entrada para o repositório ''unstable''. Para isso, acresça a linha abaixo no final do arquivo:
Instale o metapacote de virtualização:
 
deb <nowiki>http://ftp.us.debian.org/debian/</nowiki> unstable main
 
A seguir, atualize a lista local de pacotes:
 
# apt-get update


Instale os pacotes de virtualização:
# apt-get install xen-linux-system-2.6-xen-686


# apt-get install xen-hypervisor-4.0-i386 xen-utils-4.0 xen-linux-system-2.6.32-5-xen-686
{{exclamação1|Se você estiver utilizando a arquitetura AMD64, substitua o pacote ''xen-linux-system-2.6-xen-686'' por ''xen-linux-system-2.6-xen-amd64''.}}
 
{{exclamação1|Se você estiver utilizando a arquitetura AMD64, substitua o pacote ''xen-hypervisor-4.0-i386'' por ''xen-hypervisor-4.0-amd64'' e o pacote ''xen-linux-system-2.6.32-5-xen-686'' por ''xen-linux-system-2.6.32-5-xen-amd64''.}}
<br><br>
<br><br>


== Configuração do GRUB2 ==
== Configuração do GRUB2 ==


Para configurar o GRUB para realizar o boot pelo Xen, crie o arquivo ''/etc/grub.d/09_xen'' e insira o seguinte conteúdo (considerando que você instalou o Debian em ''/dev/sda1'' e está utilizando a versão 686):
Para configurar o GRUB para realizar o boot pelo Xen, entre no diretório ''/etc/grub.d'' e renomeie o arquivo ''20_linux_xen'' para ''09_linux_xen''. Depois, execute o comando:


  #!/bin/bash
  # update-grub
exec tail -n +3 $0
menuentry "Debian GNU/Linux, XEN 4 with Linux 2.6.32-5-xen-686" --class debian --class gnu-linux --class gnu --class os {
        insmod ext2
        set root='(hd0,1)'
        multiboot /boot/xen-4.0-i386.gz
        module /boot/vmlinuz-2.6.32-5-xen-686 dummy=dummy root=/dev/sda1 ro quiet
        module /boot/initrd.img-2.6.32-5-xen-686
}
 
{{exclamação1|Na configuração anterior, nas linhas centrais, ou seja, todas as linhas exceto a primeira e a última, entre o início da linha e o próximo parâmetro, foi pressionada a tecla ''TAB''. No momento de criar o arquivo final do GRUB, o sistema respeitará esse TAB.}}
 
Caso opte pelo kernel AMD64, utilize a seguinte configuração:
 
#!/bin/bash
exec tail -n +3 $0
menuentry "Debian GNU/Linux, XEN 4 with Linux 2.6.32-5-amd64" --class debian --class gnu-linux --class gnu --class os {
        insmod ext2
        set root='(hd0,1)'
        multiboot /boot/xen-4.0-amd64.gz
        module /boot/vmlinuz-2.6.32-5-amd64 dummy=dummy root=/dev/sda1 ro quiet
        module /boot/initrd.img-2.6.32-5-amd64
}


A seguir, para gerar o novo GRUB, execute:
Reinicie a máquina real para testar a configuração e o funcionamento do novo kernel. Utilize o comando:


  # chmod 755 /etc/grub.d/09_xen
  # reboot
# update-grub


Por fim, teste a configuração realizando o boot do sistema operacional a partir do kernel Xen instalado. Após o boot, verifique o kernel ativo com o comando:
Após o boot, verifique o kernel ativo com o comando:


  # uname -a
  # uname -a
<br><br>
<br><br>
== O ajuste da rede na máquina real (Dom0) ==
== O ajuste da rede na máquina real (Dom0) ==


A rede da máquina real (Dom0) deverá trabalhar como bridge para que as máquinas virtuais (DomU) possam utilizá-la. Para tanto, se estiver utilizando endereço IP fixo, edite o arquivo ''/etc/network/interfaces'' e deixe-o como no exemplo a seguir:
A rede da máquina real (Dom0) deverá trabalhar como bridge para que as máquinas virtuais (DomU) possam fazer uso da mesma. Para tanto, se estiver utilizando endereço IP fixo, edite o arquivo ''/etc/network/interfaces'' e deixe-o como no exemplo a seguir:


  auto lo
  auto lo
  iface lo inet loopback
  iface lo inet loopback
   
   
  allow-hotplug br-xen
  auto br-xen
  iface br-xen inet static
  iface br-xen inet static
         address 10.0.0.10
         address 10.0.0.10
Linha 105: Linha 69:
         bridge_maxwait 0
         bridge_maxwait 0


{{exclamação1|Ajuste o exemplo anterior à realidade da sua rede, trocando, se necessário, a designação do adaptador de rede, o endereço IP, a máscara de rede e o gateway. Ainda, caso a interface de rede não entre no ar após o boot, mesmo com tentativas manuais, altere a linha ''allow-hotplug eth0'' para ''auto eth0''.}}
{{exclamação1|Ajuste o exemplo anterior à realidade da sua rede, trocando, se necessário o endereço IP, a máscara de rede e o gateway. Ainda, por algum motivo (BUG), interfaces configuradas como bridge no Debian só vão ao ar se inicializadas com ''auto'', ao invés de ''allow-hotplug''. Por isso foi utilizada a linha ''auto br-xen'' no lugar de ''allow-hotplug br-xen''. Depois de configurada, caso queira colocar a interface no ar manualmente (sem reiniciar a máquina), utilize o comando ''ifup''. Exemplo: ''# ifup br-xen''.}}


Caso queira utilizar DHCP na máquina real, utilize a seguinte configuração:
Caso queira utilizar DHCP na máquina real, utilize a seguinte configuração:
Linha 116: Linha 80:
         bridge_ports eth0
         bridge_ports eth0
         bridge_maxwait 0
         bridge_maxwait 0
{{exclamação1|Seja paciente! Bridges demoram alguns segundos para aprenderem sobre o ambiente antes de tornarem-se disponíveis para uso.}}
<br><br>
<br><br>
== A criação da máquina modelo ==
== A criação da máquina modelo ==


A máquina modelo, na verdade, é um diretório que conterá a estrutura de uma máquina virtual pré-configurada que será copiada para gerar cada máquina DomU.
A máquina modelo, na verdade, é um diretório que conterá a estrutura de uma máquina virtual pré-configurada que será copiada para gerar cada DomU.


Inicialmente, crie um diretório chamado ''modelo'' na raiz do sistema:
Inicialmente, crie um diretório chamado ''modelo'' na raiz do sistema:
Linha 130: Linha 97:
  # debootstrap squeeze /modelo <nowiki>http://ftp.us.debian.org/debian</nowiki>
  # debootstrap squeeze /modelo <nowiki>http://ftp.us.debian.org/debian</nowiki>


Copie os arquivos ''/etc/fstab'', ''/etc/hosts'' e ''/etc/network/interfaces'' para dentro do diretório ''/modelo'':
Copie os arquivos ''/etc/fstab'' e ''/etc/network/interfaces'' para dentro do diretório ''/modelo'':


  # cp /etc/fstab /modelo/etc/
  # cp /etc/fstab /modelo/etc/
# cp /etc/hosts /modelo/etc/
  # cp /etc/network/interfaces /modelo/etc/network
  # cp /etc/network/interfaces /modelo/etc/network


Linha 143: Linha 109:


  # mount /proc
  # mount /proc
Edite o arquivo ''/etc/apt/sources.list'' e adicione o repositório de segurança. A configuração final do citado arquivo ficará assim:
deb http://<nowiki>ftp.us.debian.org/debian</nowiki> squeeze main
deb http://<nowiki>security.debian.org/</nowiki> squeeze/updates main
Atualize a lista de pacotes depois de incluir o repositório de segurança:
# apt-get update


Será necessário definir as configurações de localização e internacionalização do Debian. Execute:
Será necessário definir as configurações de localização e internacionalização do Debian. Execute:


# apt-get update
  # apt-get install locales
  # apt-get install locales
  # dpkg-reconfigure locales
  # dpkg-reconfigure locales
Linha 152: Linha 126:
Na janela de diálogo que irá surgir, em ''Locales a serem gerados'', selecione ''pt_BR ISO-8859-1'' e ''pt_BR.UTF-8 UTF-8'' para gerar a configuração correta. Isso irá interferir no idioma e em outros fatores. Na tela seguinte, em ''Default locale for the system environment'', selecione ''pt_BR.UTF-8''.
Na janela de diálogo que irá surgir, em ''Locales a serem gerados'', selecione ''pt_BR ISO-8859-1'' e ''pt_BR.UTF-8 UTF-8'' para gerar a configuração correta. Isso irá interferir no idioma e em outros fatores. Na tela seguinte, em ''Default locale for the system environment'', selecione ''pt_BR.UTF-8''.


Como próximo passo, é chegado o momento de configurarmos o fuso horário. Execute o comando a seguir:
Atualize o sistema:
 
# apt-get dist-upgrade
 
Como próximo passo, configure o fuso horário. Execute o comando a seguir:


  # dpkg-reconfigure tzdata
  # dpkg-reconfigure tzdata
Linha 160: Linha 138:
Instale pacotes essenciais:
Instale pacotes essenciais:


  # apt-get install less linux-image-2.6-xen-686 ntpdate tcpdump
  # apt-get install less linux-image-2.6-xen-686 mc ntpdate tcpdump


{{exclamação1|Dentre os pacotes instalados, está o ''linux-image-2.6-xen-686''. Na verdade, na paravirtualização, a máquina DomU utilizará o kernel nativo da Dom0. Assim, o referido pacote está sendo instalado para que a DomU possua os módulos de kernel necessários no momento do seu boot. Se você estiver utilizando AMD64, substitua o pacote ''linux-image-2.6-xen-686'' por ''linux-image-2.6-xen-amd64''.}}
{{exclamação1|Dentre os pacotes instalados, está o ''linux-image-2.6-xen-686''. Na verdade, na paravirtualização, a máquina DomU utilizará o kernel nativo da Dom0. Assim, o referido pacote está sendo instalado para que a DomU possua os módulos de kernel necessários no momento do seu boot. Se você estiver utilizando AMD64, substitua o pacote ''linux-image-2.6-xen-686'' por ''linux-image-2.6-xen-amd64''.}}
Linha 168: Linha 146:
  # apt-get install localepurge
  # apt-get install localepurge


A seguir, na janela ''Selecionando arquivos de locale'', mantenha apenas os idiomas de interesse, selecionando ''en'', ''pt'', ''pt_BR'' e ''pt_BR.UTF-8''.
A seguir, na janela ''Selecionando arquivos de locale'', mantenha apenas os idiomas de interesse, selecionando ''pt_BR'' e ''pt_BR.UTF-8''.
 
Depois de instalar, você deve executar o ''localepurge'', manualmente, pela primeira vez. Depois, ele será executado após cada instalação de pacotes por ''apt-get''.
 
# localepurge


Crie uma senha para o usuário ''root''. Para isso, execute:
Crie uma senha para o usuário ''root''. Para isso, execute:
Linha 174: Linha 156:
  # passwd root
  # passwd root


Edite os arquivos ''/etc/hostname'' e ''/etc/hosts'' e, nos lugares certos, altere o nome da máquina para ''modelo''.
Edite o arquivo ''/etc/hostname'' e altere o nome da máquina para ''modelo''.


Ajuste a rede da máquina virtual. Para isso, edite o arquivo ''/etc/network/interfaces'' e altere o nome ''br-xen'' para ''eth0''. Ainda, remova as linhas ''bridge_ports'' e ''bridge_maxwait''. A seguir, um exemplo de como ficará a configuração final:
Edite o arquivo ''/etc/hosts'' e, logo abaixo de ''127.0.0.1'', adicione a linha:
 
<IP da máquina>    modelo
 
{{exclamação1|Na linha anterior, mantenha a sentença ''<IP da máquina>''. NÃO troque a sentença por um endereço IP.}}
 
Ajuste a rede da máquina virtual. Para isso, edite o arquivo ''/etc/network/interfaces'' e altere o nome ''br-xen'' para ''eth0'' (são duas linhas a serem alteradas). Ainda, remova as linhas ''bridge_ports'' e ''bridge_maxwait''. A seguir, um exemplo de como ficará a configuração final:


  auto lo
  auto lo
Linha 187: Linha 175:
         gateway 10.0.0.100
         gateway 10.0.0.100


Configure o arquivo ''/etc/resolv.conf' para que aponte para o(s) servidor(es) DNS correto(s). Em princípio, o arquivo já deverá estar corretamente ajustado.
Configure o arquivo ''/etc/resolv.conf'' para que aponte para o(s) servidor(es) DNS correto(s). Em princípio, o arquivo já deverá estar corretamente ajustado.


Edite o arquivo ''/etc/fstab'' e altere as linhas existentes para que fiquem compatíveis com a máquina virtual a ser criada. Esse arquivo deverá referir-se a uma nova máquina que, normalmente, terá um esquema de partições próprio, começando em ''/dev/xvda1'', pois dentro do Xen os HDs não são definidos como ''/dev/hdX'' ou ''/dev/sdX'' e sim ''/dev/xvdX''. A seguir, um exemplo de configuração:
Edite o arquivo ''/etc/fstab'' e altere as linhas existentes para que fiquem compatíveis com a máquina virtual a ser criada. Esse arquivo deverá referir-se a uma nova máquina que, normalmente, terá um esquema de partições próprio, começando em ''/dev/xvda1'', pois dentro do Xen os HDs não são definidos como ''/dev/hdX'' ou ''/dev/sdX'' e sim como ''/dev/xvdX''. A seguir, um exemplo de configuração:


  # <file system> <mount point> <type>  <options> <dump> <pass>
  # <file system> <mount point> <type>  <options> <dump> <pass>
Linha 196: Linha 184:
  /swapfile      none          swap    sw        0      0
  /swapfile      none          swap    sw        0      0


{{exclamação1|No dispositivo ''/dev/xvda1'', ''xvd'' significa Xen Virtual Disk. O ''a'' em ''xvda'' refere-se ao primeiro dispositivo ''xvd'', como em ''/dev/hda'', ''/dev/sda/'', ''/dev/sdb'', por exemplo. O ''1'', em ''xvda1'' refere-se à primeira partição de ''/dev/xvda''. No momento em que a máquina virtual for configurada para ir ao ar, serão atribuídas ligações entre os dispositivos ''xvd'' e as áreas de disco relativas aos mesmos. Assim sendo, ''/dev/xvda1'' (máquina virtual) será correlacionado com ''/dev/sda2'' (máquina real), por exemplo.}}
{{exclamação1|No dispositivo ''/dev/xvda1'', ''xvd'' significa Xen Virtual Disk. O ''a'' em ''xvda'' refere-se ao primeiro dispositivo ''xvd'', como em ''/dev/hda'', ''/dev/sda'', ''/dev/sdb'', por exemplo. O ''1'', em ''xvda1'', refere-se à primeira partição de ''/dev/xvda''. No momento em que a máquina virtual for configurada para ir ao ar, serão atribuídas ligações entre os dispositivos ''xvd'' e as áreas de disco relativas aos mesmos. Assim sendo, ''/dev/xvda1'' (máquina virtual) será correlacionado com ''/dev/sda2'' (máquina real), por exemplo.}}


Caso você esteja utilizando '''LVM''' em conjunto com o filesystem '''Ext4''' e apareçam mensagens referentes a erros durante a utilização de ''barriers'', altere a linha:
Futuramente, durante o boot da máquina virtual, caso você esteja utilizando [[Linux Volume Manager (LVM)|'''LVM''']] em conjunto com o filesystem '''Ext4''' e apareçam mensagens referentes a erros durante a utilização de ''barriers'', altere a linha:


  /dev/xvda1      /            ext4    defaults  0      1
  /dev/xvda1      /            ext4    defaults  0      1
Linha 211: Linha 199:
  # mkswap -f /swapfile
  # mkswap -f /swapfile


{{exclamação1|Em caso de dúvidas sobre os procedimentos utilizados para criar o swap em arquivo, consulte o artigo [[swap em arquivo]].}}
{{exclamação1|Em caso de dúvidas sobre os procedimentos utilizados para criar o swap, consulte o artigo [[swap em arquivo]].}}


Ajuste o arquivo ''/etc/inittab'', de forma que o mesmo tenha um único terminal texto e que este seja voltado para o Xen (dispositivo ''/dev/hvc0''). Para tanto, você deverá inserir a linha referente ao terminal ''/dev/hvc0'' e comentar todas as linhas referentes aos terminais ''/dev/ttyX''. A configuração final ficará da seguinte forma:
Ajuste o arquivo ''/etc/inittab'' de forma que o mesmo tenha um único terminal texto e que este seja voltado para o Xen (dispositivo ''/dev/hvc0''). Para tanto, você deverá inserir a linha referente ao terminal ''/dev/hvc0'' e comentar todas as linhas referentes aos terminais ''/dev/ttyX''. A configuração final ficará da seguinte forma:


  xen:2345:respawn:/sbin/getty 38400 hvc0
  xen:2345:respawn:/sbin/getty 38400 hvc0
Linha 225: Linha 213:
{{exclamação1|<nowiki>Curiosidade: hvc = Hypervisor Virtual Console.</nowiki>}}
{{exclamação1|<nowiki>Curiosidade: hvc = Hypervisor Virtual Console.</nowiki>}}


A seguir, apague os arquivos ''.deb'' utilizados nas instalações:
A seguir, apague os arquivos ''.deb'' utilizados nos APT-GETs:


  # apt-get clean
  # apt-get clean
Linha 244: Linha 232:
Conforme foi dito no item ''[[Xen 4.0 no Debian Squeeze#O download e a instalação do Debian Squeeze (testing)|O download e a instalação do Debian Squeeze (testing)]]'', deveria ser deixada uma partição livre para a cada máquina virtual a ser criada ou, se for o caso, utilizar [[Linux Volume Manager (LVM)|LVM]]. Partirei do princípio que você optou pela partição ''/dev/sda2''.
Conforme foi dito no item ''[[Xen 4.0 no Debian Squeeze#O download e a instalação do Debian Squeeze (testing)|O download e a instalação do Debian Squeeze (testing)]]'', deveria ser deixada uma partição livre para a cada máquina virtual a ser criada ou, se for o caso, utilizar [[Linux Volume Manager (LVM)|LVM]]. Partirei do princípio que você optou pela partição ''/dev/sda2''.


Inicialmente, na máquina real (Dom0), formate a partição, implementando o filesystem Ext4:
Inicialmente, na máquina real (Dom0), formate a partição que receberá a máquina virtual (DomU), implementando o filesystem Ext4, mantendo apenas 0,5% de espaço para administração em caso de lotação do disco:


  # mkfs.ext4 /dev/sda2
  # mkfs.ext4 -m .5 /dev/sda2


{{exclamação1|Caso surja o erro ''mkfs.ext4: /lib/libblkid.so.1: version `BLKID_2.17' not found (required by mkfs.ext4)'', ainda com o repositório ''unstable'' instalado, execute: ''# apt-get install libblkid1''.}}
{{exclamação1|Caso surja o erro ''mkfs.ext4: /lib/libblkid.so.1: version `BLKID_2.17' not found (required by mkfs.ext4)'', ainda com o repositório ''unstable'' instalado, execute: ''# apt-get install libblkid1''.}}
Linha 271: Linha 259:
  # umount /mnt
  # umount /mnt
<br><br>
<br><br>
== A criação da configuração Xen para a máquina virtual ==
== A criação da configuração Xen para a máquina virtual ==
O próximo passo será criar a configuração que ativará a máquina virtual. Para tanto, crie o arquivo ''/etc/xen/vm0-teste'', com o seguinte conteúdo:
O próximo passo será gerar a configuração que ativará a máquina virtual. Para tanto, crie o arquivo ''/etc/xen/vm0-teste'', com o seguinte conteúdo:


  import commands
  import commands
Linha 279: Linha 268:
  kernel='/boot/vmlinuz-' + KERNEL0
  kernel='/boot/vmlinuz-' + KERNEL0
  ramdisk='/boot/initrd.img-' + KERNEL0
  ramdisk='/boot/initrd.img-' + KERNEL0
  memory=400
  '''memory=400'''
  vif=[ 'bridge=br-xen' ]
  vif=[ 'bridge=br-xen' ]
  disk=[ 'phy:/dev/sda2,xvda1,w' ]
  disk=[ 'phy:'''/dev/sda2''',xvda1,w' ]
  extra='root=/dev/xvda1 ro rootdelay=10'
  extra='root=/dev/xvda1 ro rootdelay=10'


{{exclamação1|Você poderá substituir o nome ''teste'' pelo nome da máquina virtual em questão. Exemplo: ''vm0-aquarius''.}}
{{exclamação1|Você poderá substituir o nome ''teste'' pelo nome da máquina virtual em questão. Exemplo: ''vm0-aquarius''. Ainda, na maioria dos casos, somente os elementos em negrito necessitarão de modificações.}}


Na configuração anterior, temos as seguintes linhas com as seguintes funções:
Na configuração anterior, temos as seguintes linhas com as seguintes funções:


* '''import commands''': esta linha é utilizada para permitir a execução de comandos oriundos do sistema operacional.
* '''import commands''': esta linha é utilizada para permitir a execução de comandos oriundos do sistema operacional.
* '''KERNEL0=commands.getoutput('uname -r')''': com esta linha, o Xen obterá a versão do kernel utilizado no DomU. Isso facilitará a configuração, uma vez que se houver a troca do kernel, o arquivo de configuração se adaptará sozinho.
* '''KERNEL0=commands.getoutput('uname -r')''': com esta linha, o Xen obterá a versão do kernel utilizado no DomU. Isso facilitará a configuração, uma vez que se houver a troca do kernel, o arquivo de configuração se adaptará automaticamente.
* '''kernel='/boot/vmlinuz-' + KERNEL0''': aqui será informado o kernel a ser utilizado. Em outras palavras, esta linha é responsável por chamar o kernel da máquina real (Dom0) para atuar também como kernel da máquina hospedada (máquina virtual, DomU). Note a presença da variável KERNEL0.
* '''kernel='/boot/vmlinuz-' + KERNEL0''': aqui será informado o kernel a ser utilizado. Em outras palavras, esta linha é responsável por chamar o kernel da máquina real (Dom0) para atuar também como kernel da máquina hospedada (máquina virtual, DomU). Note a presença da variável KERNEL0.
* '''ramdisk='/boot/initrd.img-' + KERNEL0''': agora está sendo informado o arquivo initrd a ser utilizado. Novamene vemos a variável KERNEL0.
* '''ramdisk='/boot/initrd.img-' + KERNEL0''': agora está sendo informado o arquivo initrd a ser utilizado. Novamente vemos a variável KERNEL0.
* '''memory=400''': esta linha está especificando que a máquina virtual (DomU) utilizará 400 MB de RAM.
* '''memory=400''': esta linha está especificando que a máquina virtual (DomU) utilizará 400 MB de RAM. Modifique a quantidade de memória de acordo com as suas necessidades.
* '''vif=[ 'bridge=br-xen' ]''': a linha ''vif'' (Virtual Interface) é responsável por especificar as configurações de rede. Com isso, a interface br-xen, que é uma bridge na máquina real, servirá as máquinas virtuais.
* '''vif=[ 'bridge=br-xen' ]''': a linha ''vif'' (Virtual Interface) é responsável por especificar as configurações de rede. Com isso, a interface ''br-xen'', que é uma bridge na máquina real, servirá as máquinas virtuais.
* '''disk=[ 'phy:/dev/sda2,xvda1,w' ]''': nesta linha, a partição real ''/dev/sda2'' está sendo associada à partição ''/dev/xvda1'' da máquina real e em modo leitura/escrita (''w'').
* '''disk=[ 'phy:/dev/sda2,xvda1,w' ]''': nesta linha, a partição real ''/dev/sda2'' está sendo associada à partição ''/dev/xvda1'' da máquina real, em modo leitura/escrita (''w''). Modifique esta linha de acordo com as suas necessidades.
* '''extra='root=/dev/xvda1 ro rootdelay=10'''': algumas opções extras. Todos os dados são referentes ao boot da máquina virtual. A raiz do sistema, dentro da DomU, será ''/dev/xvda1''. Inicialmente, como em todo boot, tudo ocorrerá em regime ''read only''. Ainda, caso a raiz do sistema não seja encontrada para que haja ao boot corretamente, haverá novas tentativas somente durante 10 segundos.  
* '''extra='root=/dev/xvda1 ro rootdelay=10'''': algumas opções extras. Todos os dados são referentes ao boot da máquina virtual. A raiz do sistema, dentro da DomU, será ''/dev/xvda1''. Inicialmente, como em todo boot, tudo ocorrerá em regime ''read only''. Ainda, caso a raiz do sistema não seja encontrada para que haja ao boot corretamente, haverá novas tentativas somente durante 10 segundos.  
<br><br>
<br><br>
== O boot da nova máquina virtual ==
== O boot da nova máquina virtual ==


Para inicializar a primeira máquina virtual, utilize o comando:
Para inicializar, pela primeira vez, a máquina virtual, utilize o comando:


   # xm create -c vm0-teste
   # xm create -c vm0-teste


{{exclamação1|A opção ''-c'' força a disponibilização de um console durante o boot e após o mesmo. Para realizar um "boot em background", omita o ''-c''.}}
{{exclamação1|A opção ''-c'' força a disponibilização de um console durante o boot e após o mesmo. Para realizar um "boot em background", omita o ''-c''. Se for o caso, troque ''vm0-teste'' pelo nome que você utilizou.}}


Durante ou após o boot, para voltar para a máquina real, sem retirar a virtual do ar, utilize as teclas ''Ctrl ]''.
Durante ou após o boot, para voltar para a máquina real, sem retirar a virtual do ar, utilize as teclas ''Ctrl ]''.
Linha 313: Linha 302:


Dentro da VM é possível emitir os comandos ''# halt'' e ''# reboot''.  
Dentro da VM é possível emitir os comandos ''# halt'' e ''# reboot''.  
<br><br>
== Removendo o repositório ''unstable'' ==
Depois de realizar o boot da máquina virtual e verificar se tudo está funcionando corretamente, edite o arquivo ''/etc/apt/sources.list'' e comente a linha ''unstable'', deixando apenas as linhas que contêm ''squeeze''.
Esta ação é necessária para que o Debian não se torne ''unstable'', acidentalmente, depois de um ''# apt-get upgrade''.
<br><br>
<br><br>


Linha 329: Linha 325:
  # xm destroy vm0-teste
  # xm destroy vm0-teste
   
   
{{exclamação1|'''ATENÇÃO:''' esse comando equivalente a um ''kill -9'' ou a um desligamento abrupto de uma máquina real. Só utilize em casos extremos como, por exemplo, a perda de controle da máquina virtual. O uso desse comando porderá causar danos, como o corrompimento de filesystem e a perda de dados dentro da máquina virtual.}}
{{exclamação1|'''ATENÇÃO:''' esse comando equivalente a um ''kill -9'' ou a um desligamento abrupto de uma máquina real. Só utilize em casos extremos como, por exemplo, a perda de controle da máquina virtual. O uso desse comando porderá causar danos, como o corrompimento de filesystem e de dados dentro da máquina virtual.}}


'''Listar''' as máquinas virtuais (DomU) que estão sendo executadas:
'''Listar''' as máquinas virtuais (DomU) que estão sendo executadas:
Linha 359: Linha 355:


  # xm mem-set vm0-teste 256
  # xm mem-set vm0-teste 256
{{exclamação1|Note que a redefinição de memória ocorre apenas enquanto a máquina estiver no ar. Ao ser reiniciada, a mesma utilizará a quantidade de memória determinada no arquivo de configuração existente em ''/etc/xen''.}}
<br><br>
<br><br>
== Erros comuns ==
== Erros comuns ==


Linha 368: Linha 367:
{{exclamação1|Em caso de erros, verifique o log ''/var/log/xen/xend.log''.}}
{{exclamação1|Em caso de erros, verifique o log ''/var/log/xen/xend.log''.}}


Além do que foi dito aqui, em http://wiki.debian.org/Xen é possível obter a solução para os seguintes erros comuns (transcrição em inglês):
Além do que foi dito aqui, em http://wiki.debian.org/Xen é possível obter a solução para os seguintes erros comuns como (transcrição em inglês):


* dom0 automatic reboots
* dom0 automatic reboots
Linha 399: Linha 398:
Os dados das máquinas são salvos em ''/var/lib/xen/save'' e, basicamente, consistem em um dump de memória. Assim sendo, cada arquivo terá o tamanho da quantidade de memória atribuída a cada máquina.
Os dados das máquinas são salvos em ''/var/lib/xen/save'' e, basicamente, consistem em um dump de memória. Assim sendo, cada arquivo terá o tamanho da quantidade de memória atribuída a cada máquina.
<br><br><br>
<br><br><br>
== Automatizando a inicialização das máquinas ==
Se você quiser automatizar a inicialização das máquinas virtuais, crie o diretório ''/etc/xen/auto'' e, dentro dele, faça um link simbólico apontando para cada arquivo de configuração de cada uma das máquinas. Exemplo:
# ln -s /etc/xen/vm0-teste /etc/xen/auto/
Com isso, a máquina ''vm0-teste'' será inicializada logo após o boot do sistema operacional.
<br><br>


== Veja também ==
== Veja também ==
Linha 426: Linha 433:
* [http://www.xen.org Xen.Org]
* [http://www.xen.org Xen.Org]
* [http://wiki.debian.org/Xen Debian Wiki - Xen]
* [http://wiki.debian.org/Xen Debian Wiki - Xen]
* [http://wiki.xensource.com/xenwiki/XenHypervisorBootOptions Xen Hypervisor Boot Options]
* [http://wiki.xensource.com/xenwiki/XenFaq Xen FAQ]
* [http://wiki.xensource.com/xenwiki/XenFaq Xen FAQ]
* [http://bits.xensource.com/Xen/docs/user.pdf Xen Users Manual]
* [http://bits.xensource.com/Xen/docs/user.pdf Xen Users Manual]


=== Sites interessantes ===
=== Outras referências ===


* [http://www.xen.org/support/documentation.html Xen.Org - Xen Documentation Support]
* [http://www.xen.org/support/documentation.html Xen.Org - Xen Documentation Support]

Edição atual tal como às 11h30min de 10 de setembro de 2013

Este artigo foi escrito para Debian Debian Squeeze.

by (C) João Eriberto Mota Filho <eriberto (a) eriberto pro br>

Artigo criado em: 15 de junho de 2010.

Última atualização: veja o rodapé desta página.

Tiny URL ou bit.ly: http://tiny.cc/xen_squeeze



O Xen

O Xen (pronuncia-se Zêin) é um sistema de virtualização assistida (hypervisor) que pode ser instalado em arquiteturas x86, x86_64, IA64, ARM e outras. Sobre essas arquiteturas de hardware, os seguintes sistemas operacionais podem ser virtualizados: MS Windows, GNU/Linux, Solaris e alguns BSDs. Este artigo é uma atualização da página "Debian Sarge + Xen 3.0 + LVM + ReiserFS", publicada em 2006, e utilizará o Xen 4.0 com filesystem Ext4 e Debian Squeeze (6.0).

Para acompanhar os acontecimentos referentes ao pacote Xen no Debian, cadastre o seu e-mail em http://packages.qa.debian.org/x/xen.html. Se quiser acompanhar o kernel Linux 2.6, cadastre-se em http://packages.qa.debian.org/l/linux-latest-2.6.html.

No Xen, a máquina real ou hospedeira recebe a demominação de Dom0. A máquina virtual é chamada de DomU. No Debian i386, o kernel Xen já possui PAE, ou seja, consegue endereçar a memória até 64 GB. Uma outra alternativa é utilizar o Debian AMD64. Escolha o que for melhor para o seu caso.

O download e a instalação do Debian Squeeze (testing)

Inicialmente, faça o download do Debian testing (Squeeze) NetInst no seguinte link:

http://cdimage.debian.org/cdimage/daily-builds/daily/current
Escolha a arquitetura desejada e, a seguir, entre no diretório iso-cd. Clique em debian-testing-<arch>-netinst.iso, onde <arch> representa a arquitetura selecionada.

Depois do download, instale normalmente o Debian, deixando uma partição livre para cada máquina virtual que for criar. Sugiro que faça swap em arquivo na máquina real e nas virtuais. Isso vai reduzir a quantidade de partições utilizadas. Se você for construir mais de duas máquinas virtuais, sugiro também a utilização de LVM (cada máquina virtual estará sobre uma "partição" LVM diferente). Também aconselho a utilização do Ext4 na raiz do sistema, por ser um filesystem moderno e com muita estabilidade.

A instalação dos pacotes mínimos necessários

Inicialmente, instale os pacotes que serão úteis para a operação da máquina hopedeira (máquina real ou Dom0):

# apt-get install less ntpdate tcpdump
Se for necessário, instale pacotes adicionais que sejam essenciais para você, como algum editor de textos diferente ou algo assim.

Instale o metapacote de virtualização:

# apt-get install xen-linux-system-2.6-xen-686
Se você estiver utilizando a arquitetura AMD64, substitua o pacote xen-linux-system-2.6-xen-686 por xen-linux-system-2.6-xen-amd64.



Configuração do GRUB2

Para configurar o GRUB para realizar o boot pelo Xen, entre no diretório /etc/grub.d e renomeie o arquivo 20_linux_xen para 09_linux_xen. Depois, execute o comando:

# update-grub

Reinicie a máquina real para testar a configuração e o funcionamento do novo kernel. Utilize o comando:

# reboot

Após o boot, verifique o kernel ativo com o comando:

# uname -a



O ajuste da rede na máquina real (Dom0)

A rede da máquina real (Dom0) deverá trabalhar como bridge para que as máquinas virtuais (DomU) possam fazer uso da mesma. Para tanto, se estiver utilizando endereço IP fixo, edite o arquivo /etc/network/interfaces e deixe-o como no exemplo a seguir:

auto lo
iface lo inet loopback

auto br-xen
iface br-xen inet static
        address 10.0.0.10
        netmask 255.0.0.0
        gateway 10.0.0.100
        bridge_ports eth0
        bridge_maxwait 0
Ajuste o exemplo anterior à realidade da sua rede, trocando, se necessário o endereço IP, a máscara de rede e o gateway. Ainda, por algum motivo (BUG), interfaces configuradas como bridge no Debian só vão ao ar se inicializadas com auto, ao invés de allow-hotplug. Por isso foi utilizada a linha auto br-xen no lugar de allow-hotplug br-xen. Depois de configurada, caso queira colocar a interface no ar manualmente (sem reiniciar a máquina), utilize o comando ifup. Exemplo: # ifup br-xen.

Caso queira utilizar DHCP na máquina real, utilize a seguinte configuração:

auto lo
iface lo inet loopback

allow-hotplug br-xen
iface br-xen inet dhcp
        bridge_ports eth0
        bridge_maxwait 0
Seja paciente! Bridges demoram alguns segundos para aprenderem sobre o ambiente antes de tornarem-se disponíveis para uso.



A criação da máquina modelo

A máquina modelo, na verdade, é um diretório que conterá a estrutura de uma máquina virtual pré-configurada que será copiada para gerar cada DomU.

Inicialmente, crie um diretório chamado modelo na raiz do sistema:

# mkdir /modelo

A seguir, com o comando debootstrap, crie um Debian Squeeze dentro do diretório /modelo:

# apt-get install debootstrap
# debootstrap squeeze /modelo http://ftp.us.debian.org/debian

Copie os arquivos /etc/fstab e /etc/network/interfaces para dentro do diretório /modelo:

# cp /etc/fstab /modelo/etc/
# cp /etc/network/interfaces /modelo/etc/network

Depois, enjaule-se dentro do diretório /modelo:

# chroot /modelo

A seguir, já dentro da jaula, mount o diretório /proc:

# mount /proc

Edite o arquivo /etc/apt/sources.list e adicione o repositório de segurança. A configuração final do citado arquivo ficará assim:

deb http://ftp.us.debian.org/debian squeeze main
deb http://security.debian.org/ squeeze/updates main

Atualize a lista de pacotes depois de incluir o repositório de segurança:

# apt-get update

Será necessário definir as configurações de localização e internacionalização do Debian. Execute:

# apt-get install locales
# dpkg-reconfigure locales

Na janela de diálogo que irá surgir, em Locales a serem gerados, selecione pt_BR ISO-8859-1 e pt_BR.UTF-8 UTF-8 para gerar a configuração correta. Isso irá interferir no idioma e em outros fatores. Na tela seguinte, em Default locale for the system environment, selecione pt_BR.UTF-8.

Atualize o sistema:

# apt-get dist-upgrade

Como próximo passo, configure o fuso horário. Execute o comando a seguir:

# dpkg-reconfigure tzdata

Selecione America e Sao_Paulo (ou outro fuso específico, caso você esteja em uma região que não siga o horário de Brasília).

Instale pacotes essenciais:

# apt-get install less linux-image-2.6-xen-686 mc ntpdate tcpdump
Dentre os pacotes instalados, está o linux-image-2.6-xen-686. Na verdade, na paravirtualização, a máquina DomU utilizará o kernel nativo da Dom0. Assim, o referido pacote está sendo instalado para que a DomU possua os módulos de kernel necessários no momento do seu boot. Se você estiver utilizando AMD64, substitua o pacote linux-image-2.6-xen-686 por linux-image-2.6-xen-amd64.

Para diminuir o tamanho da máquina modelo, remova os arquivos de tradução para idiomas que não são do seu interesse. Para isso, execute:

# apt-get install localepurge

A seguir, na janela Selecionando arquivos de locale, mantenha apenas os idiomas de interesse, selecionando pt_BR e pt_BR.UTF-8.

Depois de instalar, você deve executar o localepurge, manualmente, pela primeira vez. Depois, ele será executado após cada instalação de pacotes por apt-get.

# localepurge

Crie uma senha para o usuário root. Para isso, execute:

# passwd root

Edite o arquivo /etc/hostname e altere o nome da máquina para modelo.

Edite o arquivo /etc/hosts e, logo abaixo de 127.0.0.1, adicione a linha:

<IP da máquina>    modelo
Na linha anterior, mantenha a sentença <IP da máquina>. NÃO troque a sentença por um endereço IP.

Ajuste a rede da máquina virtual. Para isso, edite o arquivo /etc/network/interfaces e altere o nome br-xen para eth0 (são duas linhas a serem alteradas). Ainda, remova as linhas bridge_ports e bridge_maxwait. A seguir, um exemplo de como ficará a configuração final:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
        address 10.0.0.1
        netmask 255.0.0.0
        gateway 10.0.0.100

Configure o arquivo /etc/resolv.conf para que aponte para o(s) servidor(es) DNS correto(s). Em princípio, o arquivo já deverá estar corretamente ajustado.

Edite o arquivo /etc/fstab e altere as linhas existentes para que fiquem compatíveis com a máquina virtual a ser criada. Esse arquivo deverá referir-se a uma nova máquina que, normalmente, terá um esquema de partições próprio, começando em /dev/xvda1, pois dentro do Xen os HDs não são definidos como /dev/hdX ou /dev/sdX e sim como /dev/xvdX. A seguir, um exemplo de configuração:

# <file system> <mount point> <type>   <options> <dump> <pass>
proc            /proc         proc     defaults  0      0
/dev/xvda1      /             ext4     defaults  0      1
/swapfile       none          swap     sw        0      0
No dispositivo /dev/xvda1, xvd significa Xen Virtual Disk. O a em xvda refere-se ao primeiro dispositivo xvd, como em /dev/hda, /dev/sda, /dev/sdb, por exemplo. O 1, em xvda1, refere-se à primeira partição de /dev/xvda. No momento em que a máquina virtual for configurada para ir ao ar, serão atribuídas ligações entre os dispositivos xvd e as áreas de disco relativas aos mesmos. Assim sendo, /dev/xvda1 (máquina virtual) será correlacionado com /dev/sda2 (máquina real), por exemplo.

Futuramente, durante o boot da máquina virtual, caso você esteja utilizando LVM em conjunto com o filesystem Ext4 e apareçam mensagens referentes a erros durante a utilização de barriers, altere a linha:

/dev/xvda1      /             ext4     defaults  0      1

para:

/dev/xvda1      /             ext4     defaults,nobarrier  0      1

Crie um arquivo de swap com 500 MB (ou mais, caso ache necessário). Para isso, emita os comandos:

# dd if=/dev/zero of=/swapfile bs=10M count=50
# mkswap -f /swapfile
Em caso de dúvidas sobre os procedimentos utilizados para criar o swap, consulte o artigo swap em arquivo.

Ajuste o arquivo /etc/inittab de forma que o mesmo tenha um único terminal texto e que este seja voltado para o Xen (dispositivo /dev/hvc0). Para tanto, você deverá inserir a linha referente ao terminal /dev/hvc0 e comentar todas as linhas referentes aos terminais /dev/ttyX. A configuração final ficará da seguinte forma:

xen:2345:respawn:/sbin/getty 38400 hvc0
#1:2345:respawn:/sbin/getty 38400 tty1
#2:23:respawn:/sbin/getty 38400 tty2
#3:23:respawn:/sbin/getty 38400 tty3
#4:23:respawn:/sbin/getty 38400 tty4
#5:23:respawn:/sbin/getty 38400 tty5
#6:23:respawn:/sbin/getty 38400 tty6
Curiosidade: hvc = Hypervisor Virtual Console.

A seguir, apague os arquivos .deb utilizados nos APT-GETs:

# apt-get clean

Desmonte o diretório /proc:

# umount /proc

Saia da jaula:

# exit

Se todos os procedimentos foram realizados corretamente, o diretório /modelo estará pronto.

A criação da máquina virtual (DomU) a partir da máquina modelo

Conforme foi dito no item O download e a instalação do Debian Squeeze (testing), deveria ser deixada uma partição livre para a cada máquina virtual a ser criada ou, se for o caso, utilizar LVM. Partirei do princípio que você optou pela partição /dev/sda2.

Inicialmente, na máquina real (Dom0), formate a partição que receberá a máquina virtual (DomU), implementando o filesystem Ext4, mantendo apenas 0,5% de espaço para administração em caso de lotação do disco:

# mkfs.ext4 -m .5 /dev/sda2
Caso surja o erro mkfs.ext4: /lib/libblkid.so.1: version `BLKID_2.17' not found (required by mkfs.ext4), ainda com o repositório unstable instalado, execute: # apt-get install libblkid1.

Depois de formatar a partição, monte-a em /mnt:

# mount /dev/sda2 /mnt

A seguir, copie os arquivos existentes no diretório /modelo para dentro de /mnt:

# cp -av /modelo/* /mnt

Depois de copiados os arquivos, enjaule-se em /mnt:

# chroot /mnt

Dentro da jaula, edite os arquivos /etc/hostname e /etc/hosts e altere o nome modelo para o nome da máquina virtual a ser executada. Ainda em /etc/hosts e também em /etc/network/interfaces, altere o endereço IP da máquina.

Verifique se o arquivo /etc/fstab está corretamente configurado.

Por fim, desenjaule-se e desmonte a partição /dev/sda2:

# exit
# umount /mnt



A criação da configuração Xen para a máquina virtual

O próximo passo será gerar a configuração que ativará a máquina virtual. Para tanto, crie o arquivo /etc/xen/vm0-teste, com o seguinte conteúdo:

import commands
KERNEL0=commands.getoutput('uname -r')

kernel='/boot/vmlinuz-' + KERNEL0
ramdisk='/boot/initrd.img-' + KERNEL0
memory=400
vif=[ 'bridge=br-xen' ]
disk=[ 'phy:/dev/sda2,xvda1,w' ]
extra='root=/dev/xvda1 ro rootdelay=10'
Você poderá substituir o nome teste pelo nome da máquina virtual em questão. Exemplo: vm0-aquarius. Ainda, na maioria dos casos, somente os elementos em negrito necessitarão de modificações.

Na configuração anterior, temos as seguintes linhas com as seguintes funções:

  • import commands: esta linha é utilizada para permitir a execução de comandos oriundos do sistema operacional.
  • KERNEL0=commands.getoutput('uname -r'): com esta linha, o Xen obterá a versão do kernel utilizado no DomU. Isso facilitará a configuração, uma vez que se houver a troca do kernel, o arquivo de configuração se adaptará automaticamente.
  • kernel='/boot/vmlinuz-' + KERNEL0: aqui será informado o kernel a ser utilizado. Em outras palavras, esta linha é responsável por chamar o kernel da máquina real (Dom0) para atuar também como kernel da máquina hospedada (máquina virtual, DomU). Note a presença da variável KERNEL0.
  • ramdisk='/boot/initrd.img-' + KERNEL0: agora está sendo informado o arquivo initrd a ser utilizado. Novamente vemos a variável KERNEL0.
  • memory=400: esta linha está especificando que a máquina virtual (DomU) utilizará 400 MB de RAM. Modifique a quantidade de memória de acordo com as suas necessidades.
  • vif=[ 'bridge=br-xen' ]: a linha vif (Virtual Interface) é responsável por especificar as configurações de rede. Com isso, a interface br-xen, que é uma bridge na máquina real, servirá as máquinas virtuais.
  • disk=[ 'phy:/dev/sda2,xvda1,w' ]: nesta linha, a partição real /dev/sda2 está sendo associada à partição /dev/xvda1 da máquina real, em modo leitura/escrita (w). Modifique esta linha de acordo com as suas necessidades.
  • extra='root=/dev/xvda1 ro rootdelay=10': algumas opções extras. Todos os dados são referentes ao boot da máquina virtual. A raiz do sistema, dentro da DomU, será /dev/xvda1. Inicialmente, como em todo boot, tudo ocorrerá em regime read only. Ainda, caso a raiz do sistema não seja encontrada para que haja ao boot corretamente, haverá novas tentativas somente durante 10 segundos.



O boot da nova máquina virtual

Para inicializar, pela primeira vez, a máquina virtual, utilize o comando:

 # xm create -c vm0-teste
A opção -c força a disponibilização de um console durante o boot e após o mesmo. Para realizar um "boot em background", omita o -c. Se for o caso, troque vm0-teste pelo nome que você utilizou.

Durante ou após o boot, para voltar para a máquina real, sem retirar a virtual do ar, utilize as teclas Ctrl ].

A partir da máquina real, para retornar à máquina virtual, utilize o comando:

 # xm console vm0-teste

Dentro da VM é possível emitir os comandos # halt e # reboot.

Removendo o repositório unstable

Depois de realizar o boot da máquina virtual e verificar se tudo está funcionando corretamente, edite o arquivo /etc/apt/sources.list e comente a linha unstable, deixando apenas as linhas que contêm squeeze.

Esta ação é necessária para que o Debian não se torne unstable, acidentalmente, depois de um # apt-get upgrade.

Comandos básicos para a administração de máquinas virtuais Xen

Shutdown sem estar dentro da máquina virtual:

# xm shutdown -H vm0-teste

Reboot sem estar dentro da máquina virtual:

# xm reboot vm0-teste

Desligar a máquina virtual, bruscamente, sem sincronizar ou desmontar discos:

# xm destroy vm0-teste

ATENÇÃO: esse comando equivalente a um kill -9 ou a um desligamento abrupto de uma máquina real. Só utilize em casos extremos como, por exemplo, a perda de controle da máquina virtual. O uso desse comando porderá causar danos, como o corrompimento de filesystem e de dados dentro da máquina virtual.

Listar as máquinas virtuais (DomU) que estão sendo executadas:

# xm list

Ao listar as máquinas, poderão aparecer algumas letras que indicam o estado das mesmas. As principais são:

  • r (running): indica que a máquina está executando alguma tarefa;
  • b (blocked): indica um bloqueio de atividade, geralmente causado por espera para acesso a dispositivos;
  • p (paused): indica que a VM sofreu pausa (veja a seguir como estabelecer pausa na execução);
  • s (shutdown): indica que a máquina está em processo de shutdown;
  • c (crashed): indica que máquina sofreu um "crash". Essa situação deve ser do conhecimento do hypervisor para que o estado "c" seja listado;
  • d (dying): indica que a máquina está saindo do ar mas ainda não terminou por algum motivo temporário. Esse estado geralmente ocorre durante um shutdown ou crash da máquina.

Top do sistema e das máquinas:

# xm top

Pausa na execução de uma máquina:

# xm pause vm0-teste

Retirar pausa na execução de uma máquina:

# xm unpause vm0-teste

Redefinir a quantidade de memória RAM utilizada por uma máquina em execução:

# xm mem-set vm0-teste 256
Note que a redefinição de memória ocorre apenas enquanto a máquina estiver no ar. Ao ser reiniciada, a mesma utilizará a quantidade de memória determinada no arquivo de configuração existente em /etc/xen.



Erros comuns

  • A partição referente a cada máquina virtual deverá estar desmontada no momento do boot de tais VMs.
  • Escrever modules ao invés de module dentro de /etc/grub.d/09_xen.
  • O daemon xend não estar no ar no momento da inicialização de uma máquina virtual.
Em caso de erros, verifique o log /var/log/xen/xend.log.

Além do que foi dito aqui, em http://wiki.debian.org/Xen é possível obter a solução para os seguintes erros comuns como (transcrição em inglês):

  • dom0 automatic reboots
  • Error "Device ... (vif) could not be connected"
  • error: CDROM boot failure
  • 4gb seg fixup errors
  • No login prompt when using `xm console`
  • 'clocksource/0: Time went backwards'
  • "Error: Bootloader isn't executable"
  • "ERROR (XendCheckpoint:144) Save failed on domain mydomu32 (X)."
  • "network routing for hvm guests:"



Checagem e correção de filesystems nas VMs

Em caso de problemas, a checagem de filesystems nas VMs poderá ser realizada normalmente. Para tanto, com a VM fora do ar (e a sua partição desmontada), utilize o comando:

# fsck /dev/<partição que contém a VM ou volume lógico se estiver utilizando LVM>

Exemplos:

# fsck /dev/sda2             ---> para partição comum
# fsck /dev/vms/vm0-teste    ---> para LVM



O desligamento da máquina real

Caso a máquina real seja desligada ou reiniciada por um comando regular, como # reboot, # halt, # shutdown -(h|r) now, # init 0, o estado de execução de cada máquina virtual será salvo automaticamente, dispensando a necessidade de retirá-las do ar previamente. No momento da reinicialização da máquina real, as máquinas virtuais serão recolocadas no ar com base nos dados salvos no momento do desligamento.

Os dados das máquinas são salvos em /var/lib/xen/save e, basicamente, consistem em um dump de memória. Assim sendo, cada arquivo terá o tamanho da quantidade de memória atribuída a cada máquina.


Automatizando a inicialização das máquinas

Se você quiser automatizar a inicialização das máquinas virtuais, crie o diretório /etc/xen/auto e, dentro dele, faça um link simbólico apontando para cada arquivo de configuração de cada uma das máquinas. Exemplo:

# ln -s /etc/xen/vm0-teste /etc/xen/auto/

Com isso, a máquina vm0-teste será inicializada logo após o boot do sistema operacional.

Veja também



Referências e suporte técnico

Ajuda on-line

# xm help
# man xm
# man xend-config.sxp

Chat (IRC)

  • Servidor: irc.freenode.net
  • Canais disponíveis:
    • ##xen (obs.: é com duas cerquilhas mesmo...)
    • #xen-br (obs.: canal brasileiro)

Referências utilizadas na confecção neste artigo

Outras referências

Listas de discussão



Redes sociais

  • Twitter: Para novidades sobre artigos, livros e palestras, siga-me em eribertomota.