
Debian
Sarge + Xen 3.0 + LVM + ReiserFS
(via Debian
Backports)
Versão
1.5 - 15 de setembro de 2006
By
João Eriberto Mota Filho
(eriberto a eriberto pro br)
(www.eriberto.pro.br)
1.
Introdução
O objetivo deste site é disponibilizar
um tutorial
personalizado e que realmente funcione. Por favor, caso encontre algum
erro, entre em contato comigo por e-mail. Mas adianto: não tenho
disponibilidade para tornar-me suporte técnico do Xen. Caso
precise de suporte, por favor, verifique o item
final deste site.
Existem dois tipos básicos de
virtualização de máquinas: a
virtualização total (full virtualization) e a
paravirtualização (paravirtualization). Na
virtualização total, há uma
virtualização dos elementos básicos de hardware e
de software (processador, memória, kernel etc). Na
paravirtualização, apenas alguns elementos são
virtualizados. O VMware,
por exemplo, trabalha com virtualização total. Isso faz
com que ele virtualize máquinas que são capazes de
executar o GNU/Linux, o MS Windows, o Novel NetWare e o Solaris x386.
Já o Xen (pronucia-se zêin) utiliza a técnica de
paravirtualização, chegando a utilizar o mesmo kernel
para a máquina real e para a máquina virtual. Assim
sendo, o Xen,
atualmente, está preparado para operar sobre Linux e NetBSD.
São vantagens do Xen:
- a utilização de um
único kernel base e de um micro kernel (apenas dois elementos)
para a máquina real e todas as virtuais ao mesmo tempo;
- a rapidez e a leveza, por
realizar pouca virtualização, ao aproveitar a maior parte
dos recursos existentes na máquina real;
- a estabilidade e a confiabilidade;
- a segurança, em virtude de isolar totalmente as
máquinas virtuais (só há comunicação
por rede);
- o perfeito controle sobre o uso da memória e do processador
por parte de cada máquina virtual;
- a não escravização de terminais dedicados para
cada uma das máquinas virtuais;
- é software livre com versão gratuita.
São desvantagens do Xen:
- a limitação a
poucos sistemas operacionais;
- a quantidade de passos necessários para executar toda a
instalação e configuração;
- a obrigatoriedade de utilizar um kernel modificado e um micro kernel
para estabelecer a máquina real e as máqunas virtuais.
O Xen, na verdade, é um monitor de
máquinas virtuais. As máquinas serão
construídas artesanalmente e o monitor irá
mantê-las em execução sobre um sistema operacional
principal (sistema operacional da máquina real). Assim,
serão estabelecidos os chamados "domínios". A
máquina real é conhecida como domínio0, domain0 ou xen0. Cada máquina
virtual é conhecida como guest,
domínioU, domainU ou xenU. Um micro kernel,
denominado hypervisor,
faz a ligação entre o xen0 e as xenU. As máquinas
virtuais não possuirão kernel (utilizarão o mesmo
da máquina real).
Este tutorial irá trabalhar com base nos
seguintes procedimentos e premissas:
- Utilização do Debian Sarge na máquina
real (xen0) e nas
virtuais (xenU).
- Utilização parcial do Debian Backports, uma vez
que, atualmente, os pacotes .deb do Xen, compilados para Sarge,
estão por lá. Backports são
compilações de pacotes mais novos, em cima do Sarge,
realizadas por integrantes do projeto Debian.
- Utilização de LVM, que permite uma grande
flexibilidade na montagem das máquinas virtuais sobre volumes
lógicos.
2.
Instalação do Xen na máquina real
(xen0)
- Baixe e instale o Debian Sarge
NetInst i386.
Utilize o
kernel 2.6 para isso, digitando linux26
na tela de inicialização. Isso
facilitará a
padronização do sistema, pois o kernel original
será trocado por outro da versão 2.6 compilado
com o Xen.
Deverá ser criada uma partição para
abrigar todas as máquinas virtuais que
serão colocadas no ar. Uma sugestãode particionamento:
- 01
partição para o Debian principal (cerca de de 2 GB,
desconsiderando a utilização de ambiente gráfico).
Este
tutorial irá utilizar a partição primária /dev/hda1;
- 01
partição para o swap. Este tutorial irá
utilizar a partição primária /dev/hda2;
- 01 partição para as máquinas
virtuais (dê qualquer nome para essa partição no
momento da instalação, como /vms). Este
tutorial
irá utilizar a partição lógica /dev/hda5.
- Terminada a instalação do
Debian, execute o comando a seguir para instalar elementos
essencoais ao bom funcionamento do sistema:
#
apt-get install apmd less linuxlogo ntpdate rcconf sendmail mc
Obs: Caso o Sendmail apresente problemas de
dependência no momento da instalação, instale o
pacote sendmail-bin
antes do pacote sendmail.
O Sendmail será executado localmente, sem abrir
portas para "o mundo", servido apenas como smtp para o próprio
sistema (a não ser que você altere isso). É normal
aparecer um erro referente a uma entrada FEATURE
fora de ordem, em relação a uma entrada MAILER, durante a
inicialização do Sendmail.
- Execute o comando # rcconf e desmarque os
serviços que não serão utilizados. Se
não souber o que está fazendo, deixe como está.
Sugestão: desmarcar atd,
exim4 e ppp.
- Atualize o sistema com os comandos # apt-get update e # apt-get upgrade.
- Edite o arquivo /etc/fstab
e comente (ou remova) a linha referente à
partição que receberá as
máquinas virtuais (provavelmente montada em /vms). Depois disso, desmonte
a
partição em questão com o comando # umount
/dev/<partição>.
Exemplo:
#
umount /dev/hda5
- Insira o repositório fonte do Debian Backports no fim
do
arquivo /etc/apt/sources.file:
deb
http://www.backports.org/debian sarge-backports main
- Crie o arquivo /etc/apt/preferences
e insira o conteúdo a seguir:
Package:
*
Pin: release a=sarge-backports
Pin-Priority: 200
Obs: esse bloco de configuração fará com que
o repositório do Debian Backports somente seja utilizado caso
essa necessidade seja expressamente declarada no apt-get com a
opção -t
sarge-backports.
- Atualize o cache local de pacotes com o comando # apt-get update.
- Instale os pacotes essenciais para o Xen poder
funcionar.
Utilize os comandos:
#
apt-get install bridge-utils iproute
# apt-get install -t sarge-backports xen-hypervisor-3.0-i386
xen-utils-3.0 linux-image-2.6.16-2-xen-686
Obs1: caso seja solicitado, não execute os procedimentos
referentes à
instalação do LILO (apenas clique em OK). Ainda, o pacote
xen-hypervisor-3.0-i386 contém o arquivo /boot/xen-3.0-i386.gz, que
é o hypervisor.
Obs2: foi utilizado o kernel 2.6.16-2-xen-686. Para
procurar por kerneis mais novos utilize o comando apt-cache search xen|grep linux-image.
Obs3: o kernel 2.6.16-2-xen-686
tem apresentado problemas na inicialização em alguns
hardwares. Esse problema está fazendo com que a máquina
sofra infinitos reboots no momento da inicialização. Caso
isso ocorra, utilize o kernel 2.6.16-1-xen-686.
- Crie um arquivo initrd
para que o kernel possa
reconhecer partições formatadas com Ext3,
ReiserFS, XFS ou JFS. Para isso, utilize o comando:
#
mkinitramfs -o
/boot/initrd.img-2.6.16-2-xen-686 2.6.16-2-xen-686
Obs: o
número 2.6.16-2-xen-686
foi obtido com o comando # ls
/lib/modules.
- A seguir, crie as entradas
necessárias para o kernel dentro do arquivo /boot/grub/menu.lst,
como mostrado a seguir:
title Debian
GNU/Linux, kernel 2.6.16-2-686 XEN
root
(hd0,0)
kernel /boot/xen-3.0-i386.gz
module /boot/vmlinuz-2.6.16-2-xen-686
root=/dev/hda1 ro
module /boot/initrd.img-2.6.16-2-xen-686
savedefault
boot
Obs: a linha
root
deverá referir-se à
partição que contém o
diretório /boot.
Em caso de dúvida, verifique como o Debian principal fez essa
associação nos demais blocos de
configuração. Ainda, é interessante que o bloco
acima seja o primeiro de todos dentro, do arquivo de
configuração, para que o kernel Xen seja o primeiro a dar
boot por default.
- Renomeie o diretório /lib/tls
para
desabilitá-lo. O TLS (Thread Local Storage)
poderá causar lentidão no Xen e, por isso, deve-se
desabilitá-lo. Utilize o comando:
#
mv /lib/tls
/lib/tls.disabled
- Altere as configurações de rede a fim de criar
uma bridge que será utilizada pelas VMs (xenU). Para tanto,
edite o arquivo /etc/network/interfaces
e remova toda a configuração do adaptador de rede da
máquina real (eth0,
por exemplo). Mantenha as configurações do loopback e
configure a bridge. A seguir, um exemplo de como ficará o
conteúdo final do arquivo:
auto
lo
iface lo inet loopback
auto
br-xen
iface br-xen inet static
address 10.0.0.20
netmask 255.0.0.0
network 10.0.0.0
broadcast 10.255.255.255
gateway 10.0.0.200
bridge_ports eth0
bridge_maxwait 0
Obs: a linha "bridge_ports
eth0" irá associar a bridge à interface eth0. Com isso, a eth0 passará responder,
na rede, pelo endereço IP 10.0.0.20. Em conseqüência,
não deverá haver uma configuração
individual da eth0. Caso
a sua rede possua DHCP, a configuração ficará
assim:
auto
lo
iface lo inet loopback
auto
br-xen
iface br-xen inet dhcp
bridge_ports eth0
bridge_maxwait 0
- Reinicialize a máquina para que a mesma passe a
utilizar
o novo kernel.
3.
Configuração dos volumes lógicos (LVM)
- Instale o pacote responsável por
prover a versão 2 do LVM:
#
apt-get install lvm2
- Com a partição que
receberá as VMs desmontada (operação
realizada previamente), prepare o suporte ao LVM com o comando
(considerando que tal partição seja a /dev/hda5):
#
pvcreate /dev/hda5
- A seguir, crie um grupo lógico, denominado vm, com o comando:
#
vgcreate vm /dev/hda5
- Agora, crie um volume lógico para cada
partição necessária para as máquinas
virtuais. Considere o exemplo a seguir:
- 01 partição raiz,
denominada vm1.raiz, com
15 GB, para a 1ª VM;
- 01 partição de swap, denominada vm1.swap, com 200 MB, para a 1ª VM;
- 01 partição raiz,
denominada vm2.raiz, com
5 GB, para a 2ª VM;
- 01 partição para spool de e-mail, denominada
vm2.mail, com 30 GB, para a 2ª VM;
- 01 partição de
swap, denominada vm2.swap,
com 300 MB, para a
2ª VM.
Obs: os valores utilizados são meramente ilustrativos. Os
tamanhos reais das partições irão depender da
necessidade de cada serviço a ser instalado em cada
máquina virtual.
Para criar os citados volumes, utilize os seguintes comandos,
respectivamente:
# lvcreate -L15G -n vm1.raiz vm
# lvcreate -L200M -n
vm1.swap vm
# lvcreate -L5G -n vm2.raiz vm
# lvcreate -L30G -n
vm2.mail vm
# lvcreate -L300M -n
vm2.swap vm
Caso deseje criar um volume fracionário, utilize
vírgula. Exemplo:
# lvcreate -L5,5G -n
vm1.raiz vm
Utilize o comando #
lvs para verificar os volumes criados e # pvs para checar o
espaço ocupado. Ao criar os volumes, passarão a
existirão os seguintes dispositivos:
/dev/vm/vm1.raiz
/dev/vm/vm1.swap
/dev/vm/vm2.mail
/dev/vm/vm2.raiz
/dev/vm/vm2.swap
- Cada um dos
dispositivos lógicos deverá ser formatado. Para tanto,
instale o pacote que contenha as
ferramentas de formatação adequadas. Alguns exemplos:
# apt-get install reiserfsprogs (para ReiserFS)
# apt-get install
xfsprogs (para XFS)
# apt-get install
jfsutils (para JFS)
Cabe ressaltar que o Ext3 já vem instalado
na grande maioria dos GNU/Linux.
- A seguir, formate os dispositivos lógicos. Exemplos:
#
mkfs.reiserfs /dev/vm/vm1.raiz
# mkswap /dev/vm/vm1.swap
4.
Configuração da máquina modelo
- A máquina modelo será utilizada como matriz
para
a criação das máquinas virtuais. Para tanto, crie
um diretório /modelo
na raiz do Debian com o comando:
#
mkdir /modelo
- A máquina modelo (em /modelo) poderá ser uma
cópia de uma instalação GNU/Linux enxuta. No
entanto, no Debian, tal máquina poderá ser criada com o
comando debootstrap.
Inicialmente, instale o debootstrap:
#
apt-get install debootstrap
O debootstrap precisa de uma
fonte de dados, que pode ser o CD-ROM do Debian ou uma URL da Internet.
Para utilizar o debootstrap
com o CD-ROM do Debian, insira o mesmo no leitor de CD e monte a
mídia com o comando:
# mount /dev/cdrom /mnt
Em seguida, emita o comando:
# debootstrap sarge /modelo file:/mnt
Por último, remova o CD-ROM
com o comando # eject.
Para utilizar o debootstrap
com uma URL, ao invés do CD,
execute o comando:
#
debootstrap sarge /modelo http://ftp.us.debian.org/debian
- Copie alguns arquivos essenciais para dentro de /modelo:
#
cp -v /etc/apt/* /etc/apt/sources.list /modelo/etc/apt
# cp -v /etc/fstab /etc/hosts
/modelo/etc
# cp -v
/etc/network/interfaces
/modelo/etc/network
# cp -av /lib/modules/*xen* /modelo/lib/modules
- "Enjaule-se" dentro do diretório /modelo com o comando:
#
chroot /modelo
Obs: uma vez enjaulado, o /modelo
passará a ser a raiz do sistema (/). Com isso, o administrador
estará operando dentro de um novo sistema, que deverá ser
reconfigurado. Se a rede estava funcionando fora da jaula,
continuará funcionando dentro da mesma e com o mesmo
endereço IP.
# mount /proc
Obs: isso se faz necessário porque a
partição /proc
é montada pelo sistema durante o boot e não houve boot de
sistema e sim enjaulamento.
# apt-get update
# apt-get install locales
- Na janela de diálogo que irá surgir, selecione
pt_BR ISO-8859-1 para
gerar o locale correto. A seguir, selecione pt_BR para o environment.
- Execute o comando #
tzsetup para configurar o fuso horário. Depois, selecione
"Nenhuma das
opções acima" e, a seguir, GMT+2, GMT+3 ou GMT+4, de acordo com o seu
caso (GMT+3 para o
horário de Brasília).
- Execute o comando a seguir para otimizar o sistema:
#
apt-get install apmd less linuxlogo ntpdate rcconf sendmail mc
- Execute o comando # rcconf e desmarque os
serviços que não serão utilizados. Se não
souber o que está fazendo, deixe como está.
- Instale o pacote module-init-tools:
#
apt-get install -t sarge-backports module-init-tools
- Atualize o sistema com o comando # apt-get upgrade.
- Caso esteja utilizando o ReiserFS (versão 3.6) nos
volumes lógicos, execute o comando:
#
apt-get install reiserfsprogs
Para a versão 4.0, execute:
#
apt-get install reiser4progs
Obs: para XFS utilize o pacote xfsprogs;
para JFS utilize o pacote jfsutils.
- Remova os arquivos .deb
utilizados até o momento para que a máquina modelo não fique muito
grande:
#
apt-get clean
- Converta o arquivo de senhas de /etc/passwd para /etc/shadow com o comando:
#
pwconv
- Edite o arquivo /etc/hostname
e altere o nome da máquina para modelo.
- Edite o arquivo /etc/hosts
e altere o nome da máquina para modelo.
- Edite o arquivo /etc/network/interfaces
e altere o nome br-xen
por eth0 para que as
máquinas virtuais possam utilizar corretamente os adaptadores de
rede. Ainda, remova as entradas bridge_ports
e bridge_maxwait.
- Configure o arquivo /etc/resolv.conf
para que o mesmo aponte para o(s) servidor(es) DNS correto(s).
- Renomeie o diretório /lib/tls
para
desabilitá-lo. Utilize o comando:
#
mv /lib/tls
/lib/tls.disabled
- Edite o arquivo /etc/inittab
e desabilite os terminais locais de 2 a 6. A situação
final será a seguinte:
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
Obs: o Xen só utiliza um terminal. Assim sendo, a não
desabilitação dos terminais excedentes causará
mensagens de erro na tela.
- Edite o arquivo /etc/profile
e insira as linhas (no final):
alias ls='ls --color=auto'
export TMOUT=1200
Obs: a linha alias
irá prover a facilidade de colorização dos
resultados do comando ls.
A linha export
irá declarar a variável TMOUT. Com isso, após
1200 segundos (20 minutos) de inatividade no teclado, haverá um
auto-logout. Isso aumentará o nível de segurança.
- Edite o arquivo /etc/fstab
e altere as entradas existentes para que fiquem compatĩveis com as
máquinas virtuais a serem criadas.
Esse arquivo deverá referir-se a uma nova máquina que,
normalmente, terá um esquema de partições
próprio, começando em /dev/hda1. A seguir, um
exemplo de configuração para a máquina Nr 1:
#
<file system> <mount point> <type>
<options> <dump> <pass>
proc
/proc
proc defaults
0 0
/dev/hda1
/
reiserfs
notail
0
1
/dev/hda2
none
swap
sw
0
0
Obs: não se preocupe com o fato de ter utilizado /dev/hda1 e /dev/hda2 e não
saber o porque disso. Na verdade, no momento em que a máquina
virtual for configurada para ir ao ar, serão atribuídas
ligações entre os dispositivos em questão e os
volumes lógicos criados anteriormente. Assim sendo, no caso da
máquina Nr 1, /dev/hda1
será correlacionado com /dev/vm/vm1.raiz.
Já o /dev/hda2
será correlacionado com /dev/vm/vm1.swap.
- Desmonte o diretório /proc com o comando:
# umount /proc
- Saia da jaula com o comando # exit.
5.
Configuração das VMs Xen (xenU)
- Cada VM poderá ser criada a partir da
máquina modelo recém configurada. Como exemplo,
será
configurada a máquina Nr 1 (composta pelos volumes /dev/vm/vm1.raiz e /dev/vm/vm1.swap).
- Monte o dispositivo /dev/vm/vm1.raiz em /mnt com o comando:
#
mount /dev/vm/vm1.raiz /mnt
- Copie o conteúdo de /modelo para /mnt com o comando:
#
cp -av /modelo/* /mnt
- Para evitar erros, enjaule-se dento do diretório /mnt com o comando:
#
chroot /mnt
- Dentro da jaula, revise o arquivo /etc/fstab,
verificando se o mesmo encontra-se de acordo com a realidade da
máquina virtual que irá ao ar. A seguir, um
exemplo de configuração para a máquina Nr 1:
#
<file system> <mount point> <type>
<options> <dump> <pass>
proc
/proc
proc defaults
0 0
/dev/hda1
/
reiserfs
notail
0
1
/dev/hda2
none
swap
sw
0
0
- Dentro da jaula, ajuste o nome da máquina
virtual
modificando o arquivo /mnt/etc/hostname.
- Dentro da jaula, ajuste o nome e o
endereço IP da máquina
virtual
modificando o arquivo /mnt/etc/hosts. A seguir,
um exemplo de configuração para máquina com
endereço IP fixo:
127.0.0.1
localhost.localdomain
localhost
10.0.0.21
antares.minharede.com.br antares
Um outro exemplo. Neste caso, para
máquinas que receberão o IP por intermédio de um
servidor DHCP:
127.0.0.1
localhost.localdomain localhost antares
- Dentro da jaula, ajuste as
configurações de rede da
máquina virtual (/mnt/etc/network/interfaces). O endereço IP deverá ser
diferente do atribuído à máquina real. Um exemplo
de configuração:
auto
lo
iface lo inet loopback
auto
eth0
iface eth0 inet static
address 10.0.0.21
netmask 255.0.0.0
network 10.0.0.0
broadcast 10.255.255.255
gateway 10.0.0.200
Caso deseje que a máquina
virtual use DHCP, utilize a seguinte configuração:
auto
lo
iface lo inet loopback
auto
eth0
iface eth0 inet dhcp
- Dentro da jaula, verifique se o arquivo /etc/resolv.conf está
apontando para o(s) servidor(es) DNS correto(s).
- Desenjaule-se com o comando # exit.
- Desmonte a partição /mnt com o comando # umount /mnt.
6.
Configuração da máquina real (xen0) para
inicializar as VMs
- Cada VM deverá ter um arquivo de
configuração dentro do diretório /etc/xen, existente dentro da
máquina real. A seguir, um exemplo
do arquivo referente à máquina Nr 1, cujo nome
deverá ser /etc/xen/vm1:
kernel="/boot/vmlinuz-2.6.16-2-xen-686"
ramdisk="/boot/initrd.img-2.6.16-2-xen-686"
memory=128
root="/dev/hda1 ro"
disk=[
'phy:/dev/vm/vm1.raiz,hda1,w', 'phy:/dev/vm/vm1.swap,hda2,w' ]
vif=[ 'bridge=br-xen' ]
A linha kernel refere-se ao kernel que
será utilizado pela máquina virtual. Esse kernel
encontra-se no diretório /boot
da máquina real.
A linha ramdisk
refere-se ao arquivo initrd,
que também poderá ser encontrado no
diretório /boot
da máquina real. A linha memory
irá limitar a quantidade de memória RAM, em
megabytes, que será
disponibilizada para a máquina virtual. É importante
notar que a máquina real necessita de, pelo menos, 196 MB de RAM
(imposição do Xen). A linha root
especifica qual será a partição raiz da
máquina virtual. A linha disk
especifica quais volumes lógicos serão utilizados pela
máquina virtual. No exemplo em pauta, o volume /dev/vm/vm1.raiz
será utilizado como hda1
(dentro da máquina virtual) e o volume /dev/vm/vm1.swap
será utilizado como hda2.
É importante notar que essa linha deve obedecer às
especificações inseridas anteriormente em /mnt/etc/fstab. A
linha vif
definirá a bridge
que será
utilizada para prover a comunicação com a rede. Ainda, na
linha vif
é possível fixar um endereço MAC a ser
atribuído à VM (não deverá existir outro
igual dentro da rede).
É interessante utilizar o endereço ac:de:48:XX:XX:XX
(trocando-se os XX), uma vez que essa é uma faixa reservada para
uso privado, conforme especificado pelo IEEE (http://standards.ieee.org/regauth/oui/oui.txt).
Também é possível utilizar o endereço MAC 00:16:3e:XX:XX:XX, que
é reservado para a Xensource Inc (também conforme o
IEEE). Para declarar o MAC, utilize a entrada mac, como no exemplo mostrado
a seguir:
vif=[
'mac=ac:de:48:00:00:01,
bridge=br-xen' ]
Caso não seja definido um endereço MAC, uma
seqüência aleatória (00:16:3e:XX:XX:XX)
será gerada quando a máquina virtual inicializar.
7.
Inicialização das VMs Xen (xenU)
- Para inicializar a primeira máquina virtual, utilize
o comando:
# xm create -c vm1
Obs: após realizar o
primeiro login, altere a senha de root com o comando # passwd root. A chave -c força a
disponibiização de um console durante o boot e
após o mesmo. Para realizar um "boot em background", omita a
chave -c.
- 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 vm1
- Dentro da VM é possível emitir os comandos # halt -p e # reboot.
8.
Disponibilização de mídias removíveis para
o DomU
- Para utilizar dispositivos removíveis dentro de uma
máquina virtual, basta disponibilizar tais dispositivos nas
configurações.
- Para disponibilizar o CD-ROM, por exemplo, edite o arquivo /etc/fstab da máquina
virtual e inclua tal CD-ROM. Um exemplo, considerando que o CD-ROM seja
o /dev/hdc:
#
<file system> <mount point> <type>
<options> <dump> <pass>
proc
/proc
proc defaults
0
0
/dev/hda1
/
reiserfs
notail
0
1
/dev/hda2
none
swap
sw
0
0
/dev/hdc
/mnt
iso9660 ro,user,noauto 0
0
- A seguir, estabeleça a ligação entre o
dispositivo e a máquina virtual. Para isso, edite o arquivo de
configuração da máquina virtual em questão,
existente dentro de /etc/xen
(na máquina real), e acresça os dados necessários
na linha disk. Exemplo
para a /etc/xen/vm1:
kernel="/boot/vmlinuz-2.6.16-2-xen-686"
ramdisk="/boot/initrd.img-2.6.16-2-xen-686"
memory=128
root="/dev/hda1 ro"
disk=[
'phy:/dev/vm/vm1.raiz,hda1,w', 'phy:/dev/vm/vm1.swap,hda2,w', 'phy:/dev/hdc,hdc,ro' ]
vif=[ 'bridge=br-xen' ]
- Procedimentos similares poderão ser feitos com DVD,
floppy etc.
9.
Automatização do boot das VMs
- Para automatizar a inicilização de uma VM
(boot juntamente com o sistema operacional), crie links
simbólicos para a mesma dentro de /etc/xen/auto. Exemplo
para a /etc/xen/vm1:
# cd /etc/xen/auto
# ln -s /etc/xen/vm1
10.
Comandos úteis para manipular as VMs (xenU)
- Shutdown
sem estar dentro da
máquina
virtual:
# xm shutdown -H
vm1
- Reboot sem estar
dentro da máquina
virtual:
# xm reboot vm1
- Desligar a
máquina virtual,
bruscamente, sem sincronizar ou desmontar discos:
# xm destroy
vm1
ATENÇÃO: esse
comando equivalente a um kill -9
ou a um desligamento abrupto de uma máquina real. Só
utilize em casos extremos. Exemplo: perda de controle da máquina
virtual. O uso desse comando porderá causar danos, como o
corrompimento de filesystem e a perda de dados.
- Listar as
máquinas que estão sendo executadas:
# xm list
Obs: 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
durate 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 vm1
- Retirar pausa na
execução de uma máquina:
# xm unpause vm1
- Redefinir a quantidade de
memória RAM utilizada por uma máquina em
execução:
# xm mem-set vm1
256
11.
Comandos úteis para manipular grupos e volumes lógicos
- Listar os volumes
físicos:
#
pvs
- Remover volumes
físicos (remover os grupos antes):
#
pvremove /dev/hda5
- Listar os grupos e
as suas informações:
#
vgs
- Remover um grupo
(remover os volume lógicos antes):
#
vgremove vm
- Listar os volumes
lógicos definidos:
# lvs
- Remover um volume
lógico:
# lvremove /dev/vm/teste2
- Renomear um volume lógico
(de vm1.raiz para vm1.dados, dentro do grupo vm):
# lvrename /dev/vm/teste
/dev/vm/teste2
- Redimensionar um volume
lógico
(para 5 GB, por exemplo):
# lvresize -L -5G /dev/vm/vm1.raiz
Obs: ao redimensionar um volume lógico, parte
do filesystem (caso exista) será perdido. Se não houver
dados ou filesystem, bastará formatar o volume lógico (# mkreiserfs /dev/vm/vm1.raiz,
por exemplo). Caso haja dados, a primeira opção
será fazer um backup dos mesmos para um posterior retorno. A
segunda opção será redimensinar o filesystem. Para
cada tipo de filesystem, haverá um comando próprio para
essa ação. No caso do ReiserFS, o comando será # resize_reiserfs -s 5G
/dev/vm/vm1.raiz. É importante ressaltar que o
redimensionamento do filesystem também poderá provocar a
perda de dados.
12. Erros comuns
- O volume lógico de cada VM
deverá estar desmontado no momento do boot de tais VMs.
- A partição que será preparada com o LVM
deverá estar desmontada.
- Escrever "modules"
ao invés de "module"
dentro de /boot/grub/menu.lst.
- Retirar o daemon xend
do ar.
Obs: em caso de erros, verifique o
log /var/log/xend.log.
13. Checagem e
correção de filesystem nas VMs
- A checagem de filesystem das VMs pode ser realizada
normalmente. Para tanto, considerando um filesystem ReiserFS, com
a VM fora do ar (e a sua
partição desmontada), utilize o comando:
# reiserfsck /dev/<volume
lógico>
Exemplo:
# reiserfsck /dev/vm/vm1.raiz
Obs: utilize o comando de checagem
específico para cada tipo de filesystem.
14. Desligamento da
máquina real
- Caso a máquina real seja desligada ou reiniciada por
um comando regular (Ex: # reboot,
# halt -p, # 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.
15. Bugs observados
- O comando # rcconf não
é executado corretamente dentro das VMs. Uma
solução é retirar a VM do ar, montar o
diretório da mesma, enjaular tal diretório com o comando chroot e executar o rcconf dentro da jaula.
- As seqüências de teclas Shift PgUp e Shift PgDown não
funcionam corretamente, dentro das VMs, em determinadas oportunidades.
Tudo leva a crer que o terminal se perde após determinados
momentos de operação. Uma solução seria
reiniciar o terminal com o comando # reset.
- O kernel 2.6.16-2-xen-686,
em alguns hardwares, pode provocar reboots sucessivos durante a
inicialização do sistema.
- Versão 1.0 - 30 de maio de 2006.
- Versão 1.1 - 31 de maio de 2006 - erros corrigidos.
- Versão 1.2 - 20 de junho de 2006 - acrescidas
inúmeras informações e corrigidas algumas
impropriedades.
- Versão 1.3 - 21 de junho de 2006 - pequenas
correções.
- Versão 1.4 - 06 de agosto de 2006 -
correção insignificante.
- Versão 1.5 - 15 de setembro de 2006 - várias
correções, atualizações e a mudança
da expressão "máquina base" para "máquina modelo".
17.
Referências e suporte técnico
#
lvm help
# xm help
- Sites interessantes (Xen)
- Sites interessantes (LVM)
Servidor: news.gmane.org
Grupos disponíveis:
-
gmane.comp.emulators.xen.announce
-
gmane.comp.emulators.xen.user
- gmane.linux.lvm.general
Servidor: irc.freenode.net
Canais disponíveis:
-
##xen (obs: é com duas
cerquilhas mesmo...)
-
#xen-br (obs: canal brasileiro)
-
#lvm
Desde 31 Mai 06:
Free Hit
Counter

|
Conheça o
livro
Descobrindo o Linux
de
João Eriberto Mota Filho
"Ideal para
universitários e autodidatas"
|
isca-digital@yahoogrupos.com.br