P2v-howto
De Xen-BR wiki
Tabela de conteúdo |
Introdução
Este artigo serve como auxilio a administradores de sistema na migração de servidores físicos para virtuais. Para a instalação do host Xen, siga o artigo Compilando o Xen 3.2 no Debian Etch.
A semântica utilizada para o nome do Volume Group e da maquina virtual são meramente ilustrativos para exemplificar o processo. Portanto:
- Altere o Volume Lógico VGxen sugerido pelo utilizado em seu servidor.
- Altere o nome da maquina virtual vmname pelo nome que você desejar.
Ambos os dados se repetem inúmeras vezes neste artigo.
Preparando o servidor físico
IMPORTANTE: Pare todos os serviços ativos no servidor físico deixando apenas a rede e um servidor ssh ativo.
Instale o rsync no servidor físico:
apt-get install rsync
Configure-o para prover a raiz do sistema para que possa ser sincronizada para o futuro servidor virtual editando o arquivo /etc/rsyncd.conf:
# /etc/rsyncd.conf
max connections = 1
syslog facility = local3
read only = yes
list = yes
uid = root
gid = root
[p2v]
comment = physical to virtual server
path = /
Ative o daemon rsync:
rsync --daemon
Preparando o dom0 para receber os dados
No dom0 onde se deseja rodar a futura maquina virtual, crie os volumes lógicos que servirão de disco virutal e sincronize os dados do servidor físico para os novos discos virtuais:
- Raiz:
lvcreate -L 50G -n vmname.dsk VGxen
- Swap:
lvcreate -L 2G -n vmname.swp VGxen
Ajuste as informações acima de acordo com as necessidades de espaço em disco da maquina virtual.
Formate e monte o disco raiz:
mkfs.ext3 /dev/VGxen/vmname.dsk mkswap /dev/VGxen/vmname.swp mkdir /mnt/vmname mount /dev/VGxen/vmname.dsk /mnt/vmname
Agora, rode o rsync para copiar o raiz do servidor fisico para o disco virtual com o comando abaixo:
rsync -vaH --numeric-ids --stats --progress --exclude "/mnt/*" --exclude "/proc/*" --exclude "/sys/*" --exclude "/tmp/*" --exclude "/var/tmp/*" \
--exclude "/var/run/*.pid" --exclude "/var/run/dbus/system_bus_socket" rsync://192.168.1.123/p2v/ /mnt/vmname/
O IP 192.168.1.123 sugerido deverá ser alterado pelo IP real de seu servidor físico a ser copiado.
Alternativamente, é possível fazer a sincronização via SSH, da seguinte maneira:
rsync -vaH -e 'ssh' --numeric-ids --stats --progress --exclude "/mnt/*" --exclude "/proc/*" --exclude "/sys/*" --exclude "/tmp/*" --exclude "/var/tmp/*" \
--exclude "/var/run/*.pid" --exclude "/var/run/dbus/system_bus_socket" 192.168.1.123:/ /mnt/vmname/
Caso o SSH esteja em outra porta, por exemplo, pode-se alterar o parâmetro -e com opções do SSH:
-e 'ssh -oPort=2222,CompressLevel=9'
Finalizando as configurações
Finalizada a sincronização, ajuste o seu sistema editando os arquivos:
- /mnt/vmname/etc/fstab
# /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 /dev/xvda1 / ext3 defaults,errors=remount-ro 0 1 /dev/xvda2 none swap sw 0 0
- Inclua a linha abaixo em /mnt/vmname/etc/inittab:
co:2345:respawn:/sbin/getty 38400 xvc0
- Inclua a linha abaixo em /mnt/vmname/etc/securetty:
xvc0
Crie o arquivo de configuração da maquina virtual migrada (/etc/xen/auto/vmname):
import commands
krn_vers = commands.getoutput('uname -r')
name ='vmname'
builder = 'linux'
disk = [ 'phy:/dev/VGxen/' + name ' + ".dsk,xvda1,w', \
'phy:/dev/VGxen/' + name ' + ".swp,xvda2,w' ]
memory = 512
vif = [ 'bridge=xenbr0' ]
kernel = '/boot/vmlinuz-' + krn_vers
ramdisk = '/boot/initrd.img-' + krn_vers
root = '/dev/xvda1 ro'
on_poweroff = 'destroy'
on_reboot = 'restart'
on_crash = 'restart'
extra = 'xencons=xvc console=xvc0 video=tty'
vfb = [ 'type=vnc,vncdisplay=0,vnclisten=0.0.0.0,vncpasswd=passwd' ]
Copie os modulos do kernel do dom0 para o disco da nova maquina virtual:
cp -a /lib/modules/$(uname -r) /mnt/vmname/lib/modules/
Desmonte o disco do servidor virtual:
umount /mnt/vmname
Finalizando
Você pode agora derrubar o seu servidor físico, mas calma, ainda precisamos testar pra ver se tudo está ok. Lembre-se também que, o servidor virtual terá o mesmo endereço IP que o real a não ser que você altere isso em um dos dois servidores.
Após o shutdown completo do servidor físico, precione start no servidor virtual :-)
xm create /etc/xen/auto/vmname -c
Voila!
Outros howto's e ferramentas
http://et.redhat.com/~rjones/virt-p2v/ http://wiki.xensource.com/xenwiki/XenManualPtoVProcess
TODO
Migração de máquinas muito antigas para o Xen (ex: Red Hat 6.2)
Impossibilidade de usar o kernel+modulos da distro
Problemas para gravar o LILO na máquina virtualizada
Migração de devices (ex: /dev/ida/c0d0p1 -> /dev/hda1)