Garantir proativamente que você tenha acesso ao GRUB e ao sysrq pode economizar muito tempo de inatividade

Ter acesso ao console serial e ao GRUB melhorará os tempos de recuperação de sua máquina virtual IaaS Linux na maioria dos casos. O GRUB oferece opções de recuperação que, de outra forma, levariam mais tempo para recuperar sua VM.

Os motivos para realizar uma recuperação de VM são muitos e podem ser atribuídos a cenários como:

  • Sistemas de arquivos/kernel/MBR corrompidos (registro mestre de inicialização)
  • Atualizações de kernel com falha
  • Parâmetros incorretos do kernel GRUB
  • Configurações incorretas do fstab
  • Configurações de firewall
  • Senha perdida
  • Arquivos de configuração sshd mutilados
  • Configurações de rede

Muitos outros cenários detalhados aqui

Verifique se você pode acessar o GRUB e o console serial em suas VMs implantadas no Azure.

Se você é novo no console serial, consulte este link.

Dica

Certifique-se de fazer backups de arquivos antes de fazer alterações

Assista a este vídeo abaixo para ver como você pode recuperar rapidamente sua VM do Linux depois de ter acesso ao GRUB

Recuperar Vídeo VM Linux

Existem vários métodos para ajudar na recuperação de VMs do Linux. Em um ambiente de nuvem, esse processo tem sido desafiador. O progresso está sendo feito continuamente para ferramentas e recursos para garantir que os serviços sejam recuperados rapidamente.

Com o console serial do Azure, você pode interagir com sua VM do Linux como se estivesse no console de um sistema.

Você pode manipular muitos arquivos de configuração, incluindo como o kernel inicializará.

Os administradores de sistemas Linux/Unix mais experientes apreciarão o usuário único e os modos de emergência que são acessíveis por meio do console serial do Azure, tornando redundante a troca de disco e a exclusão de VM para muitos cenários de recuperação.

O método de recuperação depende do problema que está ocorrendo, por exemplo, uma senha perdida ou extraviada pode ser redefinida por meio das opções do portal do Azure ->Redefinir senha. O recurso Redefinir senha é conhecido como ramal e se comunica com o agente Linux Guest.

Outras extensões, como Custom Script, estão disponíveis, no entanto, essas opções exigem que o Linux waagent esteja ativo e em um estado saudável, o que nem sempre é o caso.

Captura de tela do status do Agente na página Propriedades no portal do Azure.

Garantir que você tenha acesso ao console serial do Azure e ao GRUB significa que uma alteração de senha ou uma configuração incorreta pode ser corrigida em questão de minutos, em vez de horas. Você pode até forçar a VM a inicializar a partir de um kernel alternativo, caso tenha vários kernels em disco no cenário em que seu kernel primário se torna corrompido.

Captura de tela da tela do sistema operacional selecionado para inicialização no GRUB, que mostra que vários kernels podem ser escolhidos.

Ordem sugerida dos métodos de recuperação

Vídeo de troca de disco

Se você não tem acesso ao GRUB, assista este vídeo e veja como você pode automatizar facilmente o procedimento de troca de disco para recuperar sua VM

Desafios

Nem todas as VMs do Linux Azure são configuradas por padrão para acesso GRUB e nem todas são configuradas para serem interrompidas com os comandos sysrq. Algumas distros mais antigas, como SLES 11, não estão configuradas para exibir o prompt de login no console serial do Azure

Neste artigo, revisaremos várias distribuições do Linux e documentaremos as configurações sobre como disponibilizar o GRUB.

Como configurar a VM Linux para aceitar chaves SysRq

A chave sysrq é habilitada em algumas distribuições Linux mais recentes por padrão, embora em outras possa ser configurada para aceitar valores apenas para determinadas funções SysRq. Em distribuições mais antigas, pode ser desativado completamente.

O recurso SysRq é útil para reiniciar uma VM com falha ou sem resposta diretamente do console serial do Azure, também útil para obter acesso ao menu GRUB, como alternativa, reiniciar uma VM de outra janela do portal ou sessão ssh pode interromper sua conexão atual do console, expirando Tempo limite do GRUB usado para exibir o menu do GRUB. A VM deve ser configurada para aceitar um valor de 1 para o parâmetro do kernel, que habilita todas as funções do sysrq ou 128, que permite reinicialização/desligamento

Habilitar vídeo sysrq

Para configurar a VM a fim de aceitar uma reinicialização por meio de comandos SysRq no portal do Azure, você precisará definir um valor de 1 para o parâmetro do kernel kernel.sysrq

Para que esta configuração persista em uma reinicialização, adicione uma entrada ao arquivo sysctl.conf

echo kernel.sysrq = 1 >> /etc/sysctl.conf

Para configurar o parâmetro do kernel dinamicamente

sysctl -w kernel.sysrq=1

Se você não tiver acesso root ou o sudo estiver quebrado, não será possível configurar o sysrq a partir de um prompt de shell.

Você pode habilitar o sysrq neste cenário usando o portal do Azure. Este método pode ser benéfico se o arquivo sudoers.d/waagent estiver corrompido ou tiver sido excluído.

Usando o recurso RunShellScript das Operações do portal do Azure-> Run Command -> requer que o processo waagent esteja íntegro, então você pode injetar este comando para habilitar o sysrq

sysctl -w kernel.sysrq=1 ; echo kernel.sysrq = 1 >> /etc/sysctl.conf

Como mostrado aqui:

Captura de tela da janela RunShellScript quando você injeta o comando.

Uma vez concluído, você pode tentar acessar sysrq e deve ver que uma reinicialização é possível.

Captura de tela da opção Send SysRq Command sob o ícone do teclado na barra de botões.

Selecione Reiniciar e comando Enviar SysRq

Captura de tela da opção Reiniciar na caixa de diálogo Enviar Comando SysRq para Convidado.

O sistema deve registrar uma mensagem de redefinição como esta

Captura de tela do log de mensagem de redefinição na interface de linha de comando.

Configuração do Ubuntu GRUB

Por padrão, você deve conseguir acessar o GRUB pressionando a tecla Esc durante a inicialização da VM, se o menu GRUB não for apresentado, você pode forçar e manter o menu GRUB na tela no console serial do Azure usando uma dessas opções.

Opção 1 - Força a exibição do GRUB na Tela

Atualize o arquivo /etc/default/grub.d/50-cloudimg-settings.cfg para manter o menu GRUB na tela pelo TIMEOUT especificado. Não é necessário pressionar Esc, pois o GRUB será exibido imediatamente.

GRUB_TIMEOUT=5
GRUB_TIMEOUT_STYLE=menu

Opção 2 - Permite que Esc seja pressionado antes da inicialização

Comportamento semelhante pode ser experimentado fazendo alterações no arquivo /etc/default/grub e observando um tempo limite de 3 segundos para pressionar Esc

Comente estas duas linhas:

#GRUB_HIDDEN_TIMEOUT=0
#GRUB_HIDDEN_TIMEOUT_QUIET=true

e adicione esta linha:

GRUB_TIMEOUT_STYLE=countdown

Ubuntu 12.04

O Ubuntu 12.04 permitirá acesso ao console serial, mas não oferece a capacidade de interagir. Um prompt login: não é visto

Para 12.04, para obter um prompt login::

  1. Crie um arquivo chamado /etc/init/ttyS0.conf contendo o seguinte texto:

    # ttyS0 - getty
    #
    # This service maintains a getty on ttyS0 from the point the system is
    # started until it is shut down again.
    start on stopped rc RUNLEVEL=[12345]
    stop on runlevel [!12345]
    
    respawn
    exec /sbin/getty -L 115200 ttyS0 vt102
    
  2. Peça ao iniciante para iniciar o getty

    sudo start ttyS0
    

As configurações necessárias para configurar o console serial para as versões do Ubuntu podem ser encontradas aqui

Modo de recuperação do Ubuntu

Opções adicionais de recuperação e limpeza estão disponíveis para o Ubuntu via GRUB, no entanto, essas configurações só são acessíveis se você configurar os parâmetros do kernel de acordo. A falha na configuração desse parâmetro de inicialização do kernel forçaria o envio do menu de recuperação para o diagnóstico do Azure e não para o console serial do Azure. Você pode obter acesso ao menu de recuperação do Ubuntu seguindo estas etapas:

Interrompa o processo de BOOT e acesse o menu GRUB

Selecione Opções avançadas para o Ubuntu e pressione enter

A captura de tela mostra o console serial com opções avançadas para Ubuntu selecionadas.

Selecione a linha exibindo (modo de recuperação) não pressione enter, mas pressione "e"

A captura de tela mostra o console serial com uma versão do modo de recuperação selecionada.

Localize a linha que carregará o kernel e substitua o último parâmetro nomodeset pelo destino como console=ttyS0

linux /boot/vmlinuz-4.15.0-1023-azure root=UUID=21b294f1-25bd-4265-9c4e-d6e4aeb57e97 ro recovery nomodeset

change to

linux /boot/vmlinuz-4.15.0-1023-azure root=UUID=21b294f1-25bd-4265-9c4e-d6e4aeb57e97 ro recovery console=ttyS0

A captura de tela mostra o console serial com o valor alterado.

Pressione Ctrl-x para iniciar e carregar o kernel. Se tudo correr bem, você verá essas opções adicionais, que podem ajudar a executar outras opções de recuperação

A captura de tela mostra o console serial no menu de recuperação, que oferece opções de recuperação adicionais.

Configuração do Red Hat GRUB

Configuração do Red Hat 7.4 + GRUB

A configuração padrão /etc/default/grub nessas versões é configurada adequadamente

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL="serial console"
GRUB_SERIAL_COMMAND="serial"
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 earlyprintk=ttyS0"
GRUB_DISABLE_RECOVERY="true"

Habilite a tecla SysRq

sysctl -w kernel.sysrq=1;echo kernel.sysrq = 1 >> /etc/sysctl.conf;sysctl -a | grep -i sysrq

Configuração do Red Hat 7.2 e 7.3 GRUB

O arquivo a ser modificado é /etc/default/grub – uma configuração padrão se parece com este exemplo:

GRUB_TIMEOUT=1
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 earlyprintk=ttyS0"
GRUB_DISABLE_RECOVERY="true"

Altere as seguintes linhas em /etc/default/grub

GRUB_TIMEOUT=1 

to

GRUB_TIMEOUT=5
GRUB_TERMINAL_OUTPUT="console"

to

GRUB_TERMINAL="serial console"

Adicione também esta linha:

GRUB_SERIAL_COMMAND="serial –speed=115200 –unit=0 –word=8 –parity=no –stop=1″

/etc/default/grub agora deve ser semelhante a este exemplo:

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL="serial console"
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 earlyprintk=ttyS0"
GRUB_DISABLE_RECOVERY="true"

Conclua e atualize a configuração do grub usando

grub2-mkconfig -o /boot/grub2/grub.cfg

Defina o parâmetro do kernel SysRq:

sysctl -w kernel.sysrq = 1;echo kernel.sysrq = 1 >> /etc/sysctl.conf;sysctl -a | grep -i sysrq

Alternativamente, você pode configurar GRUB e SysRq usando uma única linha no shell ou por meio do Executar Comando. Faça backup de seus arquivos antes de executar este comando:

cp /etc/default/grub /etc/default/grub.bak; sed -i 's/GRUB_TIMEOUT=1/GRUB_TIMEOUT=5/g' /etc/default/grub; sed -i 's/GRUB_TERMINAL_OUTPUT="console"/GRUB_TERMINAL="serial console"/g' /etc/default/grub; echo "GRUB_SERIAL_COMMAND=\"serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1\"" >> /etc/default/grub;grub2-mkconfig -o /boot/grub2/grub.cfg;sysctl -w kernel.sysrq=1;echo kernel.sysrq = 1 /etc/sysctl.conf;sysctl -a | grep -i sysrq

Configuração do Red Hat 6.x GRUB

O arquivo a ser modificado é /boot/grub/grub.conf. O valor timeout determinará por quanto tempo o GRUB é mostrado.

#boot=/dev/vda
default=0
timeout=15
splashimage=(hd0,0)/grub/splash.xpm.gz
#hiddenmenu
serial --unit=0 --speed=9600
terminal serial
terminal --timeout=5 serial console

A última linha terminal –-timeout=5 console serial aumentará ainda mais o tempo limite do GRUB adicionando um prompt de 5 segundos exibindo Pressione qualquer tecla para continuar.

A captura de tela mostra um console com saída.

O menu GRUB deve aparecer na tela para o tempo limite configurado = 15 sem a necessidade de pressionar Esc. Certifique-se de clicar no console no navegador para ativar o menu e selecionar o kernel necessário.

A captura de tela mostra um console com duas opções de Linux.

SuSE

SLES 12 sp1

Use o gerenciador de inicialização YaST de acordo com os documentos oficiais

Ou adicione/altere em /etc/default/grub os seguintes parâmetros:

GRUB_TERMINAL=serial
GRUB_TIMEOUT=5
GRUB_SERIAL_COMMAND="serial --unit=0 --speed=9600 --parity=no"

```console
Verify that ttys0 is used in the GRUB_CMDLINE_LINUX or GRUB_CMDLINE_LINUX_DEFAULT

```console
GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0,9600n"

Recrie o grub.cfg

grub2-mkconfig -o /boot/grub2/grub.cfg

SLES 11 SP4

O console serial aparece e exibe mensagens de inicialização, mas não exibe um prompt login:

Abra uma sessão ssh na VM e atualize o arquivo /etc/inittab removendo o comentário desta linha:

#S0:12345:respawn:/sbin/agetty -L 9600 ttyS0 vt102

A seguir execute o comando

telinit q

Para ativar o GRUB, as seguintes alterações devem ser feitas em /boot/grub/menu.lst

timeout 5
serial --unit=0 --speed=9600 --parity=no
terminal --timeout=5 serial console

root (hd0,0)
kernel /boot/vmlinuz-3.0.101-108.74-default root=/dev/disk/by-uuid/ab6b62bb--
1a8c-45eb-96b1-1fbc535b9265 disk=/dev/sda  USE_BY_UUID_DEVICE_NAMES=1 earlyprinttk=ttyS0 console=ttyS0 showopts vga=0x314

Esta configuração permitirá que a mensagem Pressione qualquer tecla para continuar apareça no console por 5 segundos

Em seguida, ele exibirá o menu GRUB por mais 5 segundos - pressionando a seta para baixo, você interromperá o contador e selecionará um kernel que deseja inicializar ou anexe a palavra-chave single para o modo de usuário único que requer root senha a ser definida.

Acrescentar o comando init=/bin/bash carregará o kernel, mas garante que o programa init seja substituído por um bash shell.

Você obterá acesso a um shell sem precisar digitar uma senha. Você pode prosseguir para atualizar a senha para contas Linux ou fazer outras alterações de configuração.

Forçar o kernel a um prompt bash

Ter acesso ao GRUB permite interromper o processo de inicialização. Essa interação é útil para muitos procedimentos de recuperação. Se você não tem senha de root e um único usuário exige que você tenha uma senha de root, você pode inicializar o kernel substituindo o programa init por um prompt bash – essa interrupção pode ser obtida anexando init=/bin/bash à linha de inicialização do kernel

A captura de tela mostra um console com a linha de inicialização atualizada.

Remonte seu sistema de arquivos / (raiz) RW usando o comando

mount -o remount,rw /

A captura de tela mostra um console com uma ação de remontagem.

Agora você pode alterar a senha do root ou muitas outras alterações na configuração do Linux

A captura de tela mostra um console onde você pode alterar a senha root e outras configurações.

Reinicie a VM com

/sbin/reboot -f

Modo de usuário único

Como alternativa, você pode precisar acessar a VM no modo de usuário único ou de emergência. Selecione o kernel que deseja inicializar ou interromper usando as teclas de seta. Entre no modo desejado anexando a palavra-chave single ou 1 à linha de inicialização do kernel. Em sistemas RHEL, você também pode anexar rd.break.

Para obter mais informações sobre como acessar o modo de usuário único, consulte este documento

Captura de tela da entrada *Ubuntu na inicialização da tela do sistema operacional selecionado no GRUB.

Próximas etapas

Saiba mais sobre o Console Serial do Azure

Entre em contato conosco para obter ajuda

Se você tiver dúvidas ou precisar de ajuda, crie uma solicitação de suporte ou peça ajuda à comunidade de suporte do Azure. Você também pode enviar comentários sobre o produto para a comunidade de comentários do Azure.