ECS Travada Após Migração

V1.0 – Julho 2024

Versão Autor Descrição
V1.0 – 2024-07-30 Diogo Hatz 50037923 Versão Inicial
V1.0 – 2024-07-30 Wisley da Silva 00830850 Revisão do Documento

Introdução

O SMS é um serviço de migração de máquinas virtuais disponibilizado na Huawei Cloud. Com esse serviço, é possível migrar VMs de outras provedoras cloud ou de ambientes on-premises para a nuvem. O SMS migra máquinas virtuais para ECSs, que correspondem ao serviço de máquinas virtuais na Huawei Cloud.

Este documento tem como objetivo apresentar uma solução para VMs migradas utilizando o serviço de migração SMS em que não é possível nem acessar a máquina através do “remote login”, pelo console, e nem por acesso remoto através de protocolos como o SSH.

Considerações

Importante: É possível que inúmeros fatores distintos causem o congelamento de ECSs após a sua migração por meio do SMS. Neste documento será abordada a questão de compatibilidade de certas versões do cloud-init com o serviço de ECS, que é um dos fatores que pode causar o congelamento da ECS.

Sintomas

Ao tentar acessar a ECS por meio de “remote login” ou SSH, os seguintes erros ocorrem:

ECS temporária

Como a ECS não pode ser acessada, será necessário remover o seu disco de sistema e o acoplar a uma ECS temporária para poder acessar o seu menu de boot. Para isso, primeiramente, crie uma ECS temporária com o mesmo sistema operacional e mesma AZ da máquina congelada. Após isso, remova o disco de sistema da ECS congelada e o coloque na ECS temporária como um disco de dados.

Removendo o disco de sistema da ECS congelada:

Acoplando o disco de sistema da ECS congelada na ECS temporária como um disco de dados:

Após isso, acesse remotamente a ECS temporária e use o comando “fdisk -l” para listar os discos acoplados na máquina.

Ao identificar o disco que foi acoplado à ECS temporária, realize a montagem do disco com o comando mount. Por exemplo: “mount /dev/vdb1 /mnt”.

Feito a montagem, realize os seguintes passos:

  1. Delete o arquivo de configurações do grub com o comando:

  2. rm /mnt/boot/grub/grub.cfg
    

  1. Copie o kernel genérico da ECS temporária para o diretório /boot da ECS congelada:

cp /boot/vmlinuz-5.4.0-170-generic /mnt/boot/vmlinuz-5.4.0-170-generic

Importante: O nome do kernel utilizado foi somente um exemplo, é necessário copiar o kernel utilizado pela ECS temporária. Em caso de dúvida, utilize o comando “uname -r” para listar a versão do kernel em execução.

  1. Copie o initrd da ESC temporária para o diretório /boot da ECS congelada:

cp /boot/initrd.img-5.4.0-170-generic /mnt/boot/initrd.img-5.4.0-170-generic

Importante: Copie o initrd relativo ao kernel copiado no item 2.0. Caso não haja nenhum initrd, gere um com o comando “update-initramfs -u”.

Remova o disco de dados com o comando “umount /dev/vdb1”.

Feito isso, coloque o disco de sistema da ECS congelada de volta na ECS original, seguindo o passo-a-passo do item 4.0 deste documento. Feito isso, inicie a máquina e faça “remote login” nela através do console.

Grub shell

Execute o comando “ls” para listar as partições de disco vistas pelo Grub. Para identificar qual é a partição correta a ser utilizada, execute o comando “ls (hd0,gpt1)/” até encontrar a partição com o conteúdo do disco de sistema, substituindo “hd0,gpt1” pelas partições vistas pelo comando “ls”.

Ao encontrar a partição correta, efetue os seguintes passos para dar boot em modo single-user no kernel da ECS temporária:

  1. Substituindo (hd0,gpt1) pela partição encontrada acima;
    set root=(hd0,gpt1)
    
  2. Substituindo “vmlinuz-5.4.0-170-generic” pelo kernel copiado da ECS temporária no item 4.0 deste documento e substituindo “vda1” de acordo com a partição encontrada. Exemplo: (hd0,gp1) = vda1, (hd1,gpt1) = vdb1, (hd3,gpt2) = /dev/vdd2, e assim por diante;
    linux /boot/vmlinuz-5.4.0-170-generic root=/dev/vda1 ro single
    
  3. Substituindo “initrd.img-5.4.0-170-generic” pelo initrd copiado da ECS temporária no item 4.0 deste documento;
    initrd /boot/initrd.img-5.4.0-170-generic
    
  4. Finalize dando boot.
    boot
    

Após digitar o comando boot, a ECS será inicializada em modo single-user. Digite a senha root da ECS quando requisitado.

Single-user

Utilize o comando “apt-get remove cloud-init -y” para desinstalar o cloud-init.

Utilize o comando “update-grub” para gerar o arquivo de configurações do grub previamente deletado.

Utilize o comando “grep ‘menuentry ‘ /boot/grub/grub.cfg” para listar as versões do kernel existentes no sistema e copie a versão desejada para que o Grub dê boot por padrão.

Utilize o comando “vim /etc/default/grub” para modificar o arquivo de configurações do grub. Altere os parâmetros grub_default={nome do kernel copiado acima}, “grub_timeout_style=menu” e “grub_timeout=10”.

Utilize o comando “update-grub” para atualizar o arquivo de configurações do grub novamente.

Utilize o comando “reboot” para reiniciar a ECS. Note que agora a máquina inicializará normalmente.

Configurações

Verifique a conectividade da ECS com o comando “ip a”. Caso a ECS não possua a interface eth0 configurada corretamente, é possível que haja um conflito na configuração do programa netplan. Caso a ECS possua conectividade normalmente, pule a seção 7.1 deste documento.

Netplan

Digite o comando “vim /etc/netplan/50-cloud-init.yaml” para abrir o arquivo de configurações de rede da ECS e adicione a interface eth0 da seguinte forma:

Feito isso, aplique as configurações feitas com o comando “netplan apply”

Caso a conectividade ainda não tenha retornado ao normal, verifique a instalação dos drivers KVM a partir da seguinte documentação: https://support.huaweicloud.com/intl/en-us/usermanual-ims/ims_01_0326.html#ims_01_0326__section1865536911274.

Config

Caso a VM tenha sido migrada da Azure, será necessário alterar os repositórios do Yum da máquina para apontar para o repositório da Huawei:

sed -i 's/azure.archive.ubuntu.com/repo.huaweicloud.com/g' /etc/apt/sources.list

apt autoclean && apt update

Feito a troca dos repositórios, reinstale o cloud-init com o comando:

apt-get install cloud-init

Importante: Não instale a versão 23.3.3 do cloud-init.

Instale uma nova versão do kernel do Linux com o comando:

apt-get install linux-image-generic

Utilize o comando “grep ‘menuentry ‘ /boot/grub/grub.cfg” para listar as versões do kernel existentes no sistema e copie a versão mais recente instalada.

Utilize o comando “vim /etc/default/grub” para modificar o arquivo de configurações do grub. Altere os parâmetros grub_default={nome do kernel copiado acima}.

Utilize o comando “update-grub” para atualizar o arquivo de configurações do grub novamente.

Utilize o comando “reboot” para reiniciar a ECS no kernel atualizado.

Configurações (Opcional)

Além das configurações realizadas acima, também é recomendado que o agente da Azure, que é instalado por padrão em VMs da Azure, seja desinstalado, uma vez que o agente reporta logs para o console da VNC constantemente, o que pode afetar a performance do VNC:

Digite o seguinte comando para desinstalar o agente da Azure:

sudo apt -y remove walinuxagent
apt-get remove -y linux-azure-*
apt-get remove -y *azure

Referências