How-to,  XCP-ng

Convertendo Máquina Virtual Linux do Hyper-V para o XCP-NG (V2V – Virtual to Vitual)

A carreira de um profissional de TI é desafiadora, são inúmeros os desafios que nos são propostos a cada dia, o que exige deste tipo de profissional uma quantidade gigantesca de tempo investido em pesquisas, leituras de livros, blogs, etc. e uma infinidade de implementações para correções de erros, implantação de novas soluções, etc. Recentemente precisei migrar um Data Center com Hyper-V (Microsoft Hyper-V, codinome Viridian e anteriormente conhecido como Virtualização no Windows Server, é uma tecnologia de virtualização baseada em Hipervisor nativo.) para XCP-NG (Baseado no XenServer, o XCP-ng é o resultado de uma cooperação maciça entre indivíduos e empresas, para entregar um produto sem limitações, com todos os bits disponíveis no GitHub!), não vou discutir aqui as vantagens entre usar um ou o outro, mas gosto da ideia de usar software livre e gosto mais ainda do fato dele ser imune a maioria das pragas virtuais que assolam o dia a dia do profissional de TI.

Indo direto ao assunto após preparar o servidor com o XCP-NG comecei o processo de migração/conversão com o Clonezilla (que basicamente é um sistema de clonagem de disco similar a tantos outros como True Image, Norton Ghost, gosto de usá-lo pelo fato de ser Open Source e suporta vários tipos de sistema de arquivos, no entanto não vou entrar em detalhes do uso do mesmo pois não é o objetivo desse artigo).

Basicamente o que fiz foi desligar a VM Hyper-V, baixar a imagem iso da ferramenta no site oficial do projeto, setar o boot pala iso, daí usei a opção no Clonezilla no modo “remote-source Enter source mode of remote device cloning” com isso será possível disponibilizar o disco de origem da VM no Hyper-V de forma remota, isso significa que será possível realizar uma cópia direta de disco para disco através da rede, feito isso após alguns passos a VM de origem estará pronta para enviar os dados via rede, aguardando apenas a “solicitação” da VM de destino no XCP-NG, para que isso ocorra é necessário criar uma VM com as mesmas características de processador, memória, discos, interface de rede, etc. no destino, inserir a imagem iso do Clonezilla e fazer a inicialização da VM pela iso, nas opções do Clonezilla subir ele no modo “remote-dest Enter destination mode of remote device cloning”, nesse modo será realizada uma cópia direta de disco para disco através da rede, com isso será possível receber o disco da VM de origem lá do Hyper-V de forma remota na VM de destinho no XCP-NG,.

O procedimento é simples e o tempo será diretamente proporcional ao tamanho do disco a ser clonado. Com o processo finalizado é hora de remover as medias e realizar a reinicialização da VM no XCP-G, mas para minha surpresa a VM ligou e não carregou o sistema operacional em questão um Debian 9 que rodava o Bacula (Servidor de Backup Open Source), apresentando a seguinte mensagem:

ALERTA! /dev/sda1 does not exist. Dropping to a shell!

Como descrito no inicio deste post nos é exigido algumas horas de pesquisas com leituras em fóruns e afins, logo descobri que se tratava de um problema no GRUB (O Grub é o gerenciador de boot do GNU/Linux) que por algum motivo na conversão entre hypervisores de famílias tão distintas não é incomum problemas do tipo.

Para correção rápida do problema o primeiro passo é baixar uma imagem de uma distro live como o ubuntu ou linux mint, iniciar a VM pela iso baixada, feito isso pressione o botão “Try Ubuntu” ou similar (dependendo da versão do seu sistema baixado).

Ao termino da carga do sistema operacional da Iso do liveCD (sem instalar), abra um terminal e execute o comando abaixo.

$ sudo fdisk -l

/dev/xvda1 2048 39063551 19530752 83 Linux

/dev/xvda5 39065600 41064447 999424 82 Linux swap / Solaris

Verifiquei que as as partições estavam com endereçamento completamente diferente da mensagem de alerta, onde exibia o endereçamento da partição como /dev/sda1, observe no retorno do comando fdisk -l que as partições no disco no XCP-NG são reconhecidos como /dev/xvdx (fomato dos discos no Hypervisor XEN, que nomeia os discos como “xvdx” as unidades, e as vms o reconhecem assim.) logo entendi que o primeiro ajuste a ser feito era no fstab (um arquivo de configuração do sistema localizado em /etc/fstab em sistemas operacionais Unix e sistemas de computadores Unix-like), para tal será necessário montar as partições e fazer as devidas alterações e só então instalaremos o Grub no /xvda.

Montei a partição que o Debian está instalado, no caso /dev/xvda1, no diretório /mnt.

$ sudo mount /dev/xvda1 /mnt

Executei os comandos abaixo, com a opção bind, (opção –bind monta um diretório local em um diretório dentro de uma partição remota).

$ sudo mount --bind /dev /mnt/dev
$ sudo mount --bind /dev/pts /mnt/dev/pts
$ sudo mount --bind /proc /mnt/proc
$ sudo mount --bind /sys /mnt/sys

Entrei em modo chroot (O comando chroot do sistema operacional Unix é uma operação que muda o diretório root do processo corrente e de seus processos filhos.) com o comando abaixo:

$ sudo chroot /mnt

O primeiro passo foi editar o /mnt/etc/fstab e alterar todas as referencias ao disco de /dev/sda para /dev/xvda, o procedimento pode ser feito de várias maneiras bem como usando um dos vários editores de texto do linux, usei o vi com o seguinte comando dentro do arquivos editado em modo de comando:

:%s/sda/xvda/g (Encontra cada ocorrência de sda (em todas as linhas) e substitui por xvda)

O próximo passo foi instalar o grub no HD com o seguinte comando:

$ sudo grub-install /dev/xvda
$ sudo update-grub

Sai do modo chroot:

exit

Desmontei todas as partições.

$ sudo umount /mnt/sys
$ sudo umount /mnt/proc
$ sudo umount /mnt/dev/pts
$ sudo umount /mnt/dev
$ sudo umount /mnt
$ sudo reboot 

Pronto, agora o sistema reiniciou sem erros.

Compartilhe este conhecimento:

DevOps | Especialista em Gestão de TI - Graduado em Redes de Computadores, Pós Graduado em Gestão de Tecnologia da Informação pela UNINORTE - Centro Educaional do Norte, Analista de Suporte Técnico no Tribunal de Contas do Estado do Acre.

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *