Garantir de maneira proativa que você tenha acesso ao GRUB e ao SysRq pode economizar muito tempo de inatividadeProactively ensuring you have access to GRUB and sysrq could save you lots of down time

Ter acesso ao console serial e ao GRUB melhora os tempos de recuperação de sua máquina virtual Linux IaaS na maioria dos casos.Having access to the Serial Console and GRUB will improve recovery times of your IaaS Linux Virtual Machine in most cases. O GRUB oferece opções de recuperação que, de outra forma, demorariam mais para recuperar a VM.GRUB offers recovery options that otherwise would take longer to recover your VM.

Há muitos motivos para executar uma recuperação de VM e eles podem ser atribuídos a cenários como:The reasons to perform a VM recovery are many and can be attributed to scenarios such as:

  • Sistemas de arquivos corrompidos/kernel/MBR (registro mestre de inicialização)Corrupt file systems/kernel/MBR (Master Boot Record)
  • Upgrades de kernel com falhaFailed kernel upgrades
  • Parâmetros incorretos de kernel do GRUBIncorrect GRUB kernel parameters
  • Configurações incorretas de fstabIncorrect fstab configurations
  • Configurações de firewallFirewall configurations
  • Senha perdidaLost password
  • Arquivos de configuração de sshd desconfiguradosMangled sshd configurations files
  • Configurações de redeNetworking configurations

Muitos outros cenários como especificado aqui.Many other scenarios as detailed here

Verifique se você pode acessar o GRUB e o Console serial em suas VMs implantadas no Azure.Verify that you can access GRUB and the Serial console on your VMs deployed in Azure.

Se você ainda não conhece o console serial, confira este link.If you are new to Serial Console, refer to this link.

Dica

Certifique-se de fazer backups de arquivos antes de fazer alterações.Ensure you take backups of files before making changes

Assista ao vídeo abaixo para ver como você pode recuperar rapidamente uma VM do Linux quando tiver acesso ao GRUB.Watch this video below to see how you can quickly recover your Linux VM once you have access to GRUB

Vídeo de recuperação da VM do LinuxRecover Linux VM Video

Há vários métodos para ajudar na recuperação de VMs do Linux.There are a number of methods to help recovery of Linux VMs. Em um ambiente de nuvem, este processo costuma ser complexo.In a Cloud environment, this process has been challenging. Há um progresso contínuo para a criação de ferramentas e recursos a fim de garantir que os serviços sejam recuperados rapidamente.Progress is being made continually to tooling and features to ensure services are recovered quickly.

Com o console serial do Azure, você pode interagir com sua VM do Linux como se estivesse no console de um sistema.With the Azure Serial Console, you can interact with your Linux VM as if you were at a system's console.

Você pode manipular muitos arquivos de configuração, incluindo como o kernel será inicializado.You can manipulate many configuration files including how the kernel will boot.

Os administradores de sistemas Linux/Unix mais experientes apreciarão os modos de usuário único e de emergência, que podem ser acessados no console serial do Azure, tornando a troca de disco e a exclusão de VM redundante para muitos cenários de recuperação.The more experienced Linux/Unix sys admins will appreciate the single user and emergency modes that are accessible via the Azure Serial Console making Disk Swap and VM deletion for many recovery scenarios redundant.

O método de recuperação depende do problema ocorrido, por exemplo, uma senha perdida ou esquecida pode ser redefinida por meio das opções do portal do Azure -> Redefinir senha.The method of recovery depends on the problem being experienced, for example a lost or misplaced password can be reset through Azure portal options -> Reset Password. O recurso para Redefinir senha é conhecido como uma extensão e se comunica com o agente convidado do Linux.The Reset Password feature is known as an Extension and communicates with the Linux Guest agent.

Outras extensões, como o script personalizado, estão disponíveis. No entanto essas opções exigem que o waagent do Linux esteja ativo e em um estado íntegro, o que nem sempre é o caso.Other extensions such as Custom Script are available however these options require that the Linux waagent be up and in a healthy state which is not always the case.

status do agente

Garantir que você tenha acesso ao console serial do Azure e 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.Ensuring you have access to the Azure Serial Console and GRUB means that a password change or an incorrect configuration can be rectified in a matter of minutes instead of hours. Você poderia até mesmo forçar a VM a inicializar de um kernel alternativo caso tivesse vários kernels em disco no cenário em que o kernel primário estava corrompido.You could even force the VM to boot from an alternative kernel should you have multiple kernels on disk in the scenario where your primary kernel becomes corrupt.

vários kernels

Ordem sugerida de métodos de recuperação:Suggested order of recovery methods:

Vídeo de troca de disco:Disk Swap Video:

Caso não tenha acesso ao GRUB assista este vídeo e veja como é possível automatizar facilmente o procedimento de troca de disco para recuperar a VM.If you do not have access to GRUB watch this video and see, how you can easily automate the disk swap procedure to recover your VM

Desafios:Challenges:

Nem todas as VMs do Azure para Linux são configuradas por padrão para o acesso de GRUB e nenhuma delas está configurada para ser interrompida com os comandos sysrq.Not all Linux Azure VMs are configured by default for GRUB access and neither are they all configured to be interrupted with the sysrq commands. Algumas distribuições mais antigas, como SLES 11, não estão configuradas para exibir o prompt de logon no console serial do Azure.Some older distros such as SLES 11 are not configured to display Login prompt in the Azure Serial Console

Neste artigo, vamos analisar várias distribuições do Linux e configurações de documentos sobre como disponibilizar o GRUB.In this article, we'll review various Linux distributions and document configurations on how to make GRUB available.

Como configurar a VM do Linux para aceitar chaves de SysRqHow to configure Linux VM to accept SysRq keys

A chave sysrq é habilitada em algumas distribuições mais recentes do Linux por padrão, embora em outras possa ser configurada para aceitar valores apenas para algumas funções de sysrq.The sysrq key is enabled on some newer Linux distros by default, although on others it might be configured for accepting values only for certain SysRq functions. Em distribuições mais antigas, ela pode ser desabilitada por completo.On older distros, it might be disabled completely.

O recurso SysRq é útil para reinicializar uma VM com falha ou que não esteja respondendo diretamente pelo console serial do Azure. Também é útil para obter acesso ao menu GRUB, reiniciando, como alternativa, uma VM de outra janela do portal; caso contrário, a sessão de ssh poderia descartar a conexão do console atual, expirando os tempos limite do GRUB, que são usados para exibir o menu do GRUB.The SysRq feature is useful for rebooting a crashed or non-responding VM directly from the Azure Serial Console, also helpful in gaining access to the GRUB menu, alternatively restarting a VM from another portal window or ssh session might drop your current console connection thus expiring GRUB Timeouts to which are used to display the GRUB menu. A VM deve ser configurada para aceitar um valor de 1 para o parâmetro de kernel, que habilita todas as funções de sysrq ou 128, o que permite reinicializar/desligar.The VM must be configured to accept a value of 1 for the kernel parameter, which enables all functions of sysrq or 128, which allows reboot/poweroff

Habilitar vídeo de sysrqEnable sysrq video

Para configurar a VM para aceitar uma reinicialização por meio de comandos de SysRq no portal do Azure, você precisará definir um valor de 1 para o parâmetro de kernel kernel.sysrq.To configure the VM to accept a reboot via SysRq commands on the Azure portal, you will need to set a value of 1 for the kernel parameter kernel.sysrq

Para que essa configuração persista uma reinicialização, adicione uma entrada ao arquivo sysctl.conf:For this configuration to persist a reboot, add an entry to the file sysctl.conf

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

Para configurar o parâmetro de kernel dinamicamente:To configure the kernel parameter dynamically

sysctl -w kernel.sysrq=1

Se você não tiver acesso à raiz ou o sudo for interrompido, não será possível configurar o sysrq a partir de um prompt do shell.If you do not have root access or sudo is broken, it will not be possible configure sysrq from a shell prompt.

Você pode habilitar o sysrq neste cenário usando o portal do Azure.You can enable sysrq in this scenario using the Azure portal. Esse método pode ser benéfico se o arquivo sudoers.d/waagent estiver quebrado ou caso seja excluído.This method can be beneficial if the sudoers.d/waagent file has become broken or has been deleted.

O uso do recurso Operações-> Executar comando-> RunShellScript do portal do Azure exige que o processo waagent seja íntegro. Em seguida, você pode injetar este comando para habilitar o sysrq:Using the Azure portal Operations -> Run Command -> RunShellScript feature, requires the waagent process be healthy you can then inject this command to enable sysrq

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

Conforme mostrado aqui: enable sysrq2As shown here: enable sysrq2

Depois de concluído, você poderá tentar acessar o sysrq e deverá ver que é possível fazer uma reinicialização.Once completed, you can then try accessing sysrq and should see that a reboot is possible.

enable sysrq3

Selecione Reinicialização e o comando Send SysRq.Select Reboot and Send SysRq Command

enable sysrq4

O sistema deve registrar uma mensagem de redefinição como esta:The system should log a reset message such as this

enable sysrq5

Configuração de GRUB do UbuntuUbuntu GRUB configuration

Por padrão, você deve ser capaz de acessar o GRUB mantendo a tecla ESC pressionada durante a inicialização da VM. Se o menu GRUB não aparecer, você poderá forçar e manter o menu GRUB na tela no console serial do Azure usando uma das opções abaixo.By default you should be able to access GRUB by holding down Esc key during the VM boot, if the GRUB menu is not presented you can force and keep the GRUB menu on screen in the Azure Serial Console by using one of these options.

Opção 1: força o GRUB a ser exibido na tela.Option 1 - Forces GRUB to be displayed on Screen

Atualize o arquivo/etc/default/grub.d/50-cloudimg-settings.cfg para manter o menu do GRUB na tela durante o tempo limite especificado.Update the file /etc/default/grub.d/50-cloudimg-settings.cfg to keep the GRUB menu on screen for the specified TIMEOUT. Você não precisa pressionar ESC, pois o GRUB será exibido imediatamente.You are not required to hit Esc as GRUB will be displayed immediately

GRUB_TIMEOUT=0

change to

GRUB_TIMEOUT=5

Opção 2: permite que a tecla ESC seja pressionada antes da inicialização.Option 2 - Allows for Esc to be pressed before booting

Um comportamento semelhante pode ocorrer ao fazer alterações no arquivo/etc/default/grub e observar um tempo limite de três segundos ao pressionar Esc.Similar behavior can be experienced by making changes to the file /etc/default/grub and observe a 3-second timeout to hit Esc

Comente estas duas linhas:Comment out these two lines:

#GRUB_HIDDEN_TIMEOUT=0
#GRUB_HIDDEN_TIMEOUT_QUIET=true

e adicione esta:and add this line:

GRUB_TIMEOUT_STYLE=countdown

Ubuntu 12.04Ubuntu 12.04

O Ubuntu 12.04 permitirá o acesso ao console serial, mas não oferece a capacidade de interagir.Ubuntu 12.04 will allow access to serial console but does not offer the ability to interact. Um prompt de logon: não é exibido.A login: prompt is not seen

Para 12.04, para obter um prompt de logon:For 12.04 to obtain a login: prompt:

  1. Crie um arquivo chamado /etc/init/ttyS0.conf contendo o seguinte texto:Create a file called /etc/init/ttyS0.conf containing the following text:

    # 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 para começar a iniciar o getty.Ask upstart to start the getty

    sudo start ttyS0
    

As configurações necessárias para definir o console serial nas versões do Ubuntu podem ser encontradas aqui.The settings required to configure serial console for Ubuntu versions can be found here

Modo de recuperação do UbuntuUbuntu Recovery Mode

As opções adicionais de recuperação e limpeza estão disponíveis para o Ubuntu pelo GRUB. No entanto, essas configurações só estarão acessíveis se você configurar os parâmetros do kernel adequadamente.Additional recovery and clean-up options are available for Ubuntu via GRUB however these settings are only accessible if you configure kernel parameters accordingly. Deixar de configurar esse 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.Failure to configure this kernel boot parameter would force the Recovery menu to be sent to the Azure Diagnostics and not to the Azure Serial Console. Você pode acessar o menu de recuperação do Ubuntu seguindo estas etapas:You can obtain access to the Ubuntu Recovery Menu by following these steps:

Interrompa o processo de inicialização e acessar o menu do GRUB.Interrupt the BOOT Process and access GRUB menu

Selecione opções avançadas para Ubuntu e pressione Enter.Select Advanced Options for Ubuntu and press enter

Captura de tela mostra o Console serial com opções avançadas para Ubuntu selecionado.

Selecione a linha que exibe (modo de recuperação) e não pressione Enter, mas "e".Select the line displaying (recovery mode) do not press enter but press “e”

Captura de tela mostra a 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 com destino como console = ttyS0.Locate the line that will load the kernel and substitute the last parameter nomodeset with destination as 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

Captura de tela mostra a Console serial com o valor alterado.

Pressione Ctrl-x para iniciar e carregar o kernel.Press Ctrl-x to start and load the kernel. Se tudo correr bem, você verá essas opções adicionais, que podem ajudar a executar outras opções de recuperação.If all goes well you will see these additional Options, which can help perform other recovery options

Captura de tela mostra a Console serial no menu recuperação, que oferece opções de recuperação adicionais.

Configuração do GRUB para Red HatRed Hat GRUB configuration

Configuração do GRUB para Red Hat 7.4+Red Hat 7.4+ GRUB configuration

A configuração padrão /etc/default/grub nessas versões está configurada adequadamente.The default /etc/default/grub configuration on these versions is adequately configured

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 rootdelay=300"
GRUB_DISABLE_RECOVERY="true"

Habilitar a chave SysRqEnable the SysRq key

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

Configuração de GRUB para Red Hat 7.2 e 7.3Red Hat 7.2 and 7.3 GRUB configuration

O arquivo a ser modificado é /etc/default/grub, uma configuração padrão é parecida com este exemplo:The file to modify is /etc/default/grub – a default config looks like this example:

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 rootdelay=300"
GRUB_DISABLE_RECOVERY="true"

Altere as linhas a seguir em /etc/default/grub.Change the following lines in /etc/default/grub

GRUB_TIMEOUT=1 

to

GRUB_TIMEOUT=5
GRUB_TERMINAL_OUTPUT="console"

to

GRUB_TERMINAL="serial console"

Adicione também esta linha:Also add this line:

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

/etc/default/grub agora deve ser semelhante a este exemplo:/etc/default/grub should now look similar to this example:

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 rootdelay=300"
GRUB_DISABLE_RECOVERY="true"

Conclua e atualize a configuração do grub usandoComplete and update grub configuration using

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

Defina o parâmetro de kernel de SysRq:Set the SysRq kernel parameter:

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

Como alternativa, você pode configurar o GRUB e o SysRq usando uma única linha no shell ou por meio de Executar Comando.You can alternatively configure GRUB and SysRq using a single line either in the shell or via the Run Command. Faça backup de seus arquivos antes de executar este comando:Backup your files before running this command:

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 de GRUB para Red Hat 6.xRed Hat 6.x GRUB configuration

O arquivo a ser modificado é /boot/grub/grub.conf.The file to modify is /boot/grub/grub.conf. O valor timeout determinará por quanto tempo o GRUB é mostrado.The timeout value will determine how long GRUB is shown for.

#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 serial console aumentará o tempo limite do GRUB adicionando um prompt de cinco segundos que exibe Pressione qualquer tecla para continuar.The last line terminal –-timeout=5 serial console will further increase GRUB timeout by adding a prompt of 5 seconds displaying Press any key to continue.

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.GRUB menu should appear on-screen for the configured timeout=15 without the need to press Esc. Make sure to click in the Console in the Browser to make active the menu and select the required kernel

Captura de tela mostra um console com duas opções do Linux.

SuSESuSE

SLES 12 sp1SLES 12 sp1

Use o carregador de inicialização de YaST de acordo com os documentos oficiais.Either use YaST bootloader as per the official docs

Ou adicione/altere para /etc/default/grub os seguintes parâmetros:Or add/change to /etc/default/grub the following parameters:

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

Verifique se ttyS0 é usado no GRUB_CMDLINE_LINUX ou GRUB_CMDLINE_LINUX_DEFAULT.Verify that ttys0 is used in the GRUB_CMDLINE_LINUX or GRUB_CMDLINE_LINUX_DEFAULT

GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0,9600n"

Recriar o grub.cfg:Recreate the grub.cfg

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

SLES 11 SP4SLES 11 SP4

O console serial aparece e exibe mensagens de inicialização, mas não exibe um prompt de logon:The Serial Console appears and displays boot messages but does not display a login: prompt

Abra uma sessão de ssh na VM e atualize o arquivo /etc/inittab ao remover o comentário desta linha:Open an ssh session into the VM and update the file /etc/inittab by un-commenting this line:

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

Execute o comando:Next run the command

telinit q

Para habilitar o GRUB, as seguintes alterações devem ser feitas em /boot/grub/menu.lst.To enable GRUB, the following changes should be made to /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 rootdelay=300  showopts vga=0x314

Essa configuração permitirá que a mensagem Pressione qualquer tecla para continuar apareça no console por cinco segundos.This configuration will enable the message Press any key to continue to appear on the console for 5 seconds

Ela exibirá o menu GRUB por mais cinco segundos. Ao pressionar a seta para baixo, você interromperá o contador e selecionará um kernel que deseja inicializar para acrescentar a palavra-chave único para o modo de usuário único que requer a definição da senha raiz.It will then display the GRUB menu for an additional 5 seconds - by pressing the down arrow you will interrupt the counter and select a kernel you want to boot either append the keyword single for single user mode that requires root password to be set.

Acrescentar o comando init=/bin/bash carregará o kernel, mas garantirá que o programa init seja substituído por um shell de bash.Appending the command init=/bin/bash will load the kernel but ensures that the init program is replaced by a bash shell.

Você poderá acessar um shell sem precisar inserir uma senha.You will gain access to a shell without having to enter a password. Proceda para atualizar a senha para contas do Linux ou fazer outras alterações de configuração.You can then proceed to update password for Linux accounts or make other configuration changes.

Forçar o kernel a um prompt de bashForce the kernel to a bash prompt

O acesso ao GRUB permite interromper o processo de inicialização. Essa interação é útil para muitos procedimentos de recuperação.Having access to GRUB allows you to interrupt the initialization process this interaction is useful for many recovery procedures. Caso não tenha a senha raiz e o usuário único exigir que você tenha uma, é possível inicializar o kernel substituindo o programa init por um prompt de bash. Essa interrupção pode ser obtida acrescentando init=/bin/bash à linha de inicialização do kernel.If you do not have root password and single user requires you to have a root password, you can boot the kernel replacing the init program with a bash prompt – this interrupt can be achieved by appending init=/bin/bash to the kernel boot line

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

Remonte o sistema de arquivos /(raiz) RW usando o comando:Remount your / (root) file system RW using the command

mount -o remount,rw /

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

Agora você pode alterar a senha raiz ou fazer muitas outras alterações de configuração do Linux.Now you can perform root password change or many other Linux configuration changes

Captura de tela mostra um console em que você pode alterar a senha raiz e outras configurações.

Reinicie a VM com:Restart the VM with

/sbin/reboot -f

Modo de usuário únicoSingle User mode

Como alternativa, talvez seja necessário acessar a VM no modo de usuário único ou de emergência.Alternatively you might need to access the VM in single user or emergency mode. Selecione o kernel que você deseja inicializar ou interromper usando as teclas de direção.Select the kernel you wish to boot or interrupt using arrow keys. Insira o modo desejado acrescentando a palavra-chave único ou 1 à linha de inicialização do kernel.Enter the desired mode by appending the keyword single or 1 to the kernel boot line. Em sistemas RHEL, você também pode acrescentar rd.break.On RHEL systems, you can also append rd.break.

Para obter mais informações sobre como acessar o modo de usuário único, consulte este documento.For more information on how to access single user mode, see this doc

single_user_ubuntu

Próximas etapasNext steps

Saiba mais sobre o Console serial do Azure.Learn more about Azure Serial Console