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:
-
Delete o arquivo de configurações do grub com o comando:
-
rm /mnt/boot/grub/grub.cfg

-
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.

-
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:
- Substituindo (hd0,gpt1) pela partição encontrada acima;
set root=(hd0,gpt1) - 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 - 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 - 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
- Instalação dos drivers KVM: https://support.huaweicloud.com/intl/en-us/usermanual-ims/ims_01_0326.html#ims_01_0326__section1865536911274.