Convertendo Maquinas Virtuais HVM para PVM e PVM para HVM
De Xen-BR wiki
Tabela de conteúdo |
Considerações iniciais
Antes de criar suas máquinas virtuais, siga esses conselhos:
* Não crie um arquivo para o raiz do sistema e outro para swap. * Comece a utilizar o bootloader pygrub disponibilizado pelo Xen.
Os conselhos acima são para facilitar a sua vida quando você necessitar converter uma máquina virtual de HVM para PVM. A idéia é ter um único dispositivo de blocos virtualizado, a MBR (master boot record) onde tenha a sua tabela de partições e o bootloader grub gravado neste setor.
Criando o dispositivo de blocos para uma máquina virtual passível de conversão
Você precisará de algumas ferramentas antes de iniciar a tarefa. São elas:
* multipath-tools * lvm2
Instale ambas em seu sistema e crie um volume lógico:
pvcreate /dev/sda7 vgcreate vmd /dev/sda7 vgchange -a y lvcreate -L 100G -n vm001-disk vmd
Note que em /dev/mapper há o volume lógico vmd-vm001-disk, no qual vamos trabalhar.
Particionando e acessando as partições no dispositivo de blocos
Com o fdisk, crie as partições necessárias no dispositívo. Lembre-se que a sintaxe do comando do fdisk abaixo é necessária já que o dispositivo ainda não possui informações dos setores:
# fdisk -b 512 -C 4096 -H 16 -S 32 /dev/mapper/vmd-vm001-disk
Após criada a tabela de partições vamos agora deixar as partições visíveis. Para este exemplo criei 3 partições: /boot com 200M, / com 10G e a swap com 1G:
# kpartx -a /dev/mapper/vmd-vm001-disk
Perceba que em /dev/mapper existe agora mais 3 dispositivos mapeados. Cada dispositivo tem um dígito no final identificando qual é o número da partição do dispositivo de blocos pai:
# ls /dev/mapper/vmd-vm001-disk* /dev/mapper/vmd-vm001-disk /dev/mapper/vmd-vm001-disk1 /dev/mapper/vmd-vm001-disk2 /dev/mapper/vmd-vm001-disk3
Onde:
/dev/mapper/vmd-vm001-disk - Dispositívo de blocos pai - O volume lógico em si. /dev/mapper/vmd-vm001-disk1 - Partição virtual /dev/hda1 para o /boot com 200M. /dev/mapper/vmd-vm001-disk2 - Partição virtual /dev/hda2 para o / com 10G. /dev/mapper/vmd-vm001-disk3 - Partição virtual /dev/hda3 para a swap com 1G.
Formate as partições de acordo com o sistema de arquivos que será utilizado. Recomendo fortemente utilizar ext3 para a /boot e /:
# mkfs.ext3 /dev/mapper/vmd-vm001-disk1 # mkfs.ext3 /dev/mapper/vmd-vm001-disk2 # mkswap /dev/mapper/vmd-vm001-disk3
Monte as partições;
# mount /dev/mapper/vmd-vm001-disk2 /mnt # mkdir /mnt/boot # mount /dev/mapper/vmd-vm001-disk1 /mnt/boot
Utilize o debootstrap por exemplo para instalar o Linux nas partições:
# debootstrap --arch amd64 etch /mnt http://ftp.debian.org/debian
Copie agora alguns arquivos do /boot do seu Dom0 para /mnt/boot:
# cp -a /boot/*2.6.18* /mnt/boot # mkdir /mnt/boot/grub # cp /boot/grub/stage* /boot/grub/e2fs_stage1_5 /mnt/boot/grub
Crie o /mnt/boot/grub/menu.lst com as entradas necessárias dos kerneis para a sua máquina virtual. este arquivo será utilizado tanto por PVM quanto por HVM:
default 0 timeout 5 color cyan/blue white/blue # Entrada para PVM title PVM - Debian GNU/Linux, kernel 2.6.18-xen root (hd0,0) kernel /vmlinuz-2.6.18-xen root=/dev/hda2 ro initrd /initrd.img-2.6.18-xen savedefault # Entrada para HVM title HVM - Debian GNU/Linux, kernel 2.6.18-4-686 root (hd0,0) kernel /vmlinuz-2.6.18-4-amd64 root=/dev/hda2 ro initrd /initrd.img-2.6.18-4-amd64 savedefault
É importante salientar que, dependendo da configuração do seu sistema, poderá haver diferenças à configuração apresentada acima. Salve o arquivo e copie os módulos do kernel para PVM:
# cp -a /lib/modules/2.6.18-xen /mnt/lib/modules/
Desmonte as partições:
# umount /mnt/boot && umount /mnt/
Desmapeie o dispositivo /dev/mapper/vmd-vm001-disk
# kpartx -d /dev/mapper/vmd-vm001-disk
Gravando o grub na MBR
Execute o GRUB e aponte para o dispositivo /dev/mapper/vmd-vm001-disk:
# grub
GNU GRUB version 0.97 (640K lower / 3072K upper memory)
[ Minimal BASH-like line editing is supported. For
the first word, TAB lists possible command
completions. Anywhere else TAB lists the possible
completions of a device/filename. ]
grub> device (hd0) /dev/mapper/vmd-vm001-disk
grub> root (hd0,0)
Filesystem type is ext2fs, partition type 0x83
grub> setup (hd0)
Checking if "/boot/grub/stage1" exists... no
Checking if "/grub/stage1" exists... yes
Checking if "/grub/stage2" exists... yes
Checking if "/grub/e2fs_stage1_5" exists... yes
Running "embed /grub/e2fs_stage1_5 (hd0)"... 15 sectors are embedded.
succeeded
Running "install /grub/stage1 (hd0) (hd0)1+15 p (hd0,0)/grub/stage2 /grub/menu.lst"... succeeded
Done.
grub> quit
Criando a configuração para a máquina virtual
A idéia é ter uma configuração que seja portável facilmente para PVM quanto para HVM. Abaixo a configuração:
builder = 'linux'
name ='vm-0001'
memory = 512
disk = ['phy:/dev/saruman/alambix.disk,hda,w' ]
vif = ['bridge=xenbr3']
vcpus = 1
cpus = '1'
if builder == 'linux':
bootloader = '/usr/bin/pygrub'
on_poweroff = 'destroy'
on_reboot = 'restart'
on_crash = 'restart'
extra = 'xencons=xvc console=xvc0 video=xenfb'
vfb = [ 'type=vnc,vncunused=1' ]
elif builder == 'hvm':
kernel = '/usr/lib/xen/boot/hvmloader'
device_model = '/usr/lib/xen/bin/qemu-dm'
boot = 'c'
vnc = 1
apic = 1
acpi = 1
restart = 'onreboot'
vncunused = 1
Perceba que, alterando somente a variável builder, você pula de pvm para hvm com facilidade. No entanto, é necessário que no arquivo menu.lst do GRUB da sua máquina virtual seja alterado o kernel padrão alterando a variável 'default'.
>> Marco Sinhoreli <<
Arquivo:Exemplo.jpg