Garantir proativamente que você tenha acesso ao GRUB e ao sysrq pode economizar muito tempo de inatividade
Aplica-se a: ✔️ VMs linux
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
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.
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.
Ordem sugerida dos métodos de recuperação
Console Serial do Azure
Método legado
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
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:
Uma vez concluído, você pode tentar acessar sysrq e deve ver que uma reinicialização é possível.
Selecione Reiniciar e comando Enviar SysRq
O sistema deve registrar uma mensagem de redefinição como esta
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::
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
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
Selecione a linha exibindo (modo de recuperação) não pressione enter, mas pressione "e"
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
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
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.
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.
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
Remonte seu sistema de arquivos / (raiz) RW usando o comando
mount -o remount,rw /
Agora você pode alterar a senha do root ou muitas outras alterações na configuração do Linux
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
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.