Xen: Migrando máquinas baseadas em LVM do Xen Opensource para o Xen Cloud Platform

1

temos várias VMs baseadas em LVM em execução em um host Xen Opensource. "Baseado em LVM", no nosso caso, significa que há um volume LVM para a partição raiz e outro volume para a partição swap. O kernel e o initrd para a VM estão fora desses volumes, como arquivos no host Xen. Essas VMs foram criadas com xen-create-image, parte do pacote xen-tools para o Debian.

Queremos migrar essas VMs para um host XCP e encontramos um script para fazer isso ( link ). Mas este script assume que os discos listados no arquivo de configuração são "discos virtuais", ou seja, com sua própria tabela de partição e outras coisas. Este não é o caso, obviamente, e não funciona.

O que você recomendaria para fazer isso? Qualquer método homebrewn? No final, poderíamos ter que migrar as VMs sobrescrevendo as novas com um arquivo tar grande das antigas, mas eu gostaria que fosse nosso último recurso.

Eu pensei que talvez pudéssemos criar um disco como esse que o script espera usando algo que faça o contrário do kpartx: em vez de dividir um disco virtual em dispositivos para cada partição, agrupe várias partições (ou no nosso caso, LVM volumes) em um disco virtual. Mas eu não sei nada disso.

Obrigado antecipadamente!

    
por rsuarez 26.02.2013 / 09:48

2 respostas

1

Ok, resolvido. Foi assim que fizemos:

Digamos que nossa VM seja chamada de "anansi" (atualmente estou lendo um livro de Neil Gaiman; vou deixar você adivinhar qual :-)). É instalado em dois volumes LVM, / dev / vg0 / anansi-root (sistema de arquivos raiz, 5GB) e / dev / vg0 / anansi-swap (512MB).

Primeiro, criamos um novo volume LVM para o disco rígido virtual:

lvcreate -n anansiVHD -L 6GB vg0

Em seguida, criamos duas partições, usando o cfdisk:

cfdisk /dev/vg0/anansiVHD

Então usamos o kpartx para mostrar as partições dentro do disco virtual:

kpartx -av /dev/vg0/anansiVHD

Nós os formatamos (usando ext3 nesse caso porque era o que a VM original tinha). Você não verá os novos dispositivos dentro de / dev / vg0, porque o LVM não está ciente deles. Você terá que usar / dev / mapper / whatever para acessá-los, assim:

mkfs.ext3 /dev/mapper/vg0-anansiVHD1
mkswap /dev/mapper/vg0-anansiVHD2

Depois montamos a partição raiz:

mkdir /tmp/anansiVHD_root
mount /dev/mapper/vg0-anansiVHD1 /tmp/anansiVHD_root

Como a VM que queríamos migrar está sendo executada, usamos um instantâneo para copiar seu conteúdo:

lvcreate -s -n anansi-snap -L 2G /dev/vg0/anansi-root
mkdir /tmp/anansi-snap
mount /dev/vg0/anansi-snap /tmp/anansi-snap
cd /tmp/anansi-snap
tar c . | (cd /tmp/anansiVHD_root ; tar xv)

Nós limpamos:

umount /tmp/anansiVHD_root
umount /tmp/anansi-snap
lvremove -f /dev/vg0/anansi-snap
kpartx -d /dev/vg0/anansiVHD

Tivemos que alterar o arquivo de configuração da VM ("anansi.cfg") para refletir a alteração em um disco virtual. Isso significava mudar a linha:

disk    = [ 'phy:/dev/vg0/anansi-root,xvda1,w', 'phy:/dev/vg0/anansi-swap,xvda2,w' ]

Para isso:

disk    = [ 'phy:/dev/vg0/anansiVHD,xvda,w' ]

Em seguida, usamos o script vinculado anteriormente para migrar a máquina:

xva.py -c anansi.cfg -s <the IP of our XCP host> --username=root --password=<root password>

Depois, tivemos que copiar o kernel e o initrd usados para inicializar esta VM no host XCP, seguindo as instruções do script. A última etapa é ssh no host XCP e alterar o carregador de inicialização para essa VM: se não, o XCP tentará usar o pygrub e, como isso espera o kernel e initrd dentro do disco rígido virtual, ele não funcionará.

Então fizemos isso:

xe vm-param-set PV-bootloader="" uuid=0ab93325-bdb3-e5c9-e7ab-2173b612b02c

Com o uuid da nova VM, recebemos "xe vm-list".

Espero que ajude.

    
por 26.02.2013 / 10:54
0

vi /tmp/tmpmigrateVHD_root/boot/grub/grub.conf :

  • root=/dev/sda1 console=tty0 - > %código%

vi root=/dev/xvda1 console=xvc0 :

  • /tmp/tmpmigrateVHD_root/etc/fstab - > %código%
  • /dev/sda1 - > %código%

vi /dev/xvda1 : (comentário reverso)

  • co: 2345: respawn: / sbin / agetty xvc0 9600 vt100-nav
  • # 1: 2345: respawn: / sbin / mingetty tty1
  • # 2: 2345: respawn: / sbin / mingetty tty2
  • # 3: 2345: respawn: / sbin / mingetty tty3
  • # 4: 2345: respawn: / sbin / mingetty tty4
  • # 5: 2345: respawn: / sbin / mingetty tty5
  • # 6: 2345: respawn: / sbin / mingetty tty6
por 06.03.2013 / 22:21

Tags