Partager via


S’assurer de manière proactive que vous avez accès à GRUB et sysrq pourrait vous faire économiser beaucoup de temps d’arrêt

S’applique à : ✔️ Machines virtuelles Linux

L’accès à la console série et à GRUB améliorera les temps de récupération de votre machine virtuelle IaaS Linux dans la plupart des cas. GRUB propose des options de récupération qui, autrement, prendraient plus de temps pour récupérer votre machine virtuelle.

Les raisons d’effectuer une récupération de machine virtuelle sont nombreuses et peuvent être attribuées à des scénarios tels que :

  • Systèmes de fichiers/noyau/MBR (Master Boot Record) corrompus
  • Échec des mises à niveau du noyau
  • Paramètres de noyau GRUB incorrects
  • Configurations fstab incorrectes
  • Configurations du pare-feu
  • Mot de passe perdu
  • Fichiers de configuration sshd altérés
  • Configurations réseau

De nombreux autres scénarios détaillés ici

Vérifiez que vous pouvez accéder à GRUB et à la console série sur vos machines virtuelles déployées dans Azure.

Si vous êtes nouveau sur la console série, consultez ce lien.

Conseil

Assurez-vous de faire des sauvegardes des fichiers avant d’apporter des modifications

Regardez cette vidéo ci-dessous pour voir comment vous pouvez rapidement récupérer votre machine virtuelle Linux une fois que vous avez accès à GRUB

Récupérer la vidéo de la machine virtuelle Linux

Il existe un certain nombre de méthodes pour faciliter la récupération des machines virtuelles Linux. Dans un environnement Cloud, ce processus a été difficile. Des progrès sont continuellement réalisés dans les outils et les fonctionnalités pour garantir une récupération rapide des services.

Avec la console série Azure, vous pouvez interagir avec votre machine virtuelle Linux comme si vous étiez sur la console d’un système.

Vous pouvez manipuler de nombreux fichiers de configuration, y compris la manière dont le noyau démarrera.

Les administrateurs système Linux/Unix les plus expérimentés apprécieront les modes utilisateur unique et modes d’urgence qui sont accessibles via la console série Azure, ce qui rend redondants l’échange de disque et la suppression de VM pour de nombreux scénarios de récupération.

La méthode de récupération dépend du problème rencontré, par exemple un mot de passe perdu ou égaré peut être réinitialisé via les options du portail Azure ->Réinitialiser le mot de passe. La fonctionnalité Réinitialiser le mot de passe est connue sous le nom d’extension et communique avec l’agent invité Linux.

D’autres extensions telles que Custom Script sont disponibles, mais ces options nécessitent que le waagent Linux soit opérationnel et dans un état sain, ce qui n’est pas toujours le cas.

Capture d’écran de l’état de l’agent dans la page Propriétés du portail Azure.

S’assurer que vous avez accès à la console série Azure et à GRUB signifie qu’un changement de mot de passe ou une configuration incorrecte peut être corrigé en quelques minutes au lieu d’heures. Vous pouvez même forcer la machine virtuelle à démarrer à partir d’un noyau alternatif si vous avez plusieurs noyaux sur le disque dans le cas où votre noyau principal serait corrompu.

Capture d’écran de l’écran du système d’exploitation sélectionné au démarrage dans GRUB, qui montre que plusieurs noyaux peuvent être choisis.

Ordre suggéré des méthodes de récupération

Vidéo d’échange de disque

Si vous n’avez pas accès à GRUB, regardez cette vidéo et voyez comment vous pouvez facilement automatiser la procédure d’échange de disque pour récupérer votre VM

Défis

Toutes les machines virtuelles Linux Azure ne sont pas configurées par défaut pour l’accès GRUB et elles ne sont pas non plus toutes configurées pour être interrompues avec les commandes sysrq. Certaines distributions plus anciennes telles que SLES 11 ne sont pas configurées pour afficher l’invite de connexion dans la console série Azure

Dans cet article, nous passerons en revue diverses distributions Linux et configurations de documents sur la façon de rendre GRUB disponible.

Comment configurer la machine virtuelle Linux pour accepter les clés SysRq

La clé sysrq est activée par défaut sur certaines distributions Linux plus récentes, bien que sur d’autres, elle puisse être configurée pour accepter des valeurs uniquement pour certaines fonctions SysRq. Sur les distributions plus anciennes, il peut être complètement désactivé.

La fonctionnalité SysRq est utile pour redémarrer une machine virtuelle en panne ou qui ne répond pas directement à partir de la console série Azure, également utile pour accéder au menu GRUB, sinon le redémarrage d’une machine virtuelle à partir d’une autre fenêtre de portail ou d’une session ssh peut interrompre votre connexion actuelle à la console et expirer ainsi Délais GRUB auxquels sont utilisés pour afficher le menu GRUB. La VM doit être configurée pour accepter une valeur de 1 pour le paramètre du noyau, qui active toutes les fonctions de sysrq ou 128, qui permet le redémarrage/la mise hors tension

Activer la vidéo sysrq

Pour configurer la machine virtuelle afin qu’elle accepte un redémarrage via les commandes SysRq sur le portail Azure, vous devrez définir la valeur 1 pour le paramètre du noyau kernel.sysrq

Pour que cette configuration persiste après un redémarrage, ajoutez une entrée au fichier sysctl.conf

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

Pour configurer dynamiquement le paramètre du noyau

sysctl -w kernel.sysrq=1

Si vous n’avez pas d’accès root ou si sudo est cassé, il ne sera pas possible de configurer sysrq à partir d’une invite du shell.

Vous pouvez activer sysrq dans ce scénario à l’aide du portail Azure. Cette méthode peut être bénéfique si le fichier sudoers.d/waagent est cassé ou a été supprimé.

L’utilisation de la fonctionnalité Azure Portal Operations -> Run Command -> RunShellScript nécessite que le processus waagent soit sain, vous pouvez ensuite injecter cette commande pour activer sysrq.

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

Comme montré ici :

Capture d’écran de la fenêtre RunShellScript lorsque vous injectez la commande.

Une fois terminé, vous pouvez alors essayer d’accéder à sysrq et devriez voir qu’un redémarrage est possible.

Capture d’écran de l’option Envoyer la commande SysRq sous l’icône du clavier dans la barre de boutons.

Sélectionnez Redémarrer et Envoyer la commande SysRq

Capture d’écran de l’option Redémarrer dans la boîte de dialogue Envoyer la commande SysRq à l’invité.

Le système doit consigner un message de réinitialisation tel que celui-ci

Capture d’écran du journal des messages de réinitialisation dans l’interface de ligne de commande.

Configuration GRUB d’Ubuntu

Par défaut, vous devriez pouvoir accéder à GRUB en maintenant la touche Échap enfoncée pendant le démarrage de la machine virtuelle. Si le menu GRUB n’est pas présenté, vous pouvez forcer et conserver le menu GRUB à l’écran dans la console série Azure en utilisant l’une de ces options.

Option 1 - Force l’affichage de GRUB à l’écran

Mettez à jour le fichier /etc/default/grub.d/50-cloudimg-settings.cfg pour conserver le menu GRUB à l’écran pendant le TIMEOUT spécifié. Vous n’êtes pas obligé d’appuyer sur Échap car GRUB s’affichera immédiatement.

GRUB_TIMEOUT=5
GRUB_TIMEOUT_STYLE=menu

Option 2 - Permet d’appuyer sur Échap avant le démarrage

Un comportement similaire peut être rencontré en apportant des modifications au fichier /etc/default/grub et en observant un délai de 3 secondes pour appuyer sur Esc

Commentez ces deux lignes :

#GRUB_HIDDEN_TIMEOUT=0
#GRUB_HIDDEN_TIMEOUT_QUIET=true

et ajoutez cette ligne :

GRUB_TIMEOUT_STYLE=countdown

Ubuntu 12.04

Ubuntu 12.04 permettra l’accès à la console série mais n’offre pas la possibilité d’interagir. Une invite de connexion : n’est pas vue

Pour 12.04 pour obtenir une invite de connexion :

  1. Créez un fichier appelé /etc/init/ttyS0.conf contenant le texte suivant :

    # 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. Demander à upstart de démarrer le getty

    sudo start ttyS0
    

Les paramètres requis pour configurer la console série pour les versions d’Ubuntu peuvent être trouvés ici

Mode de récupération Ubuntu

Des options de récupération et de nettoyage supplémentaires sont disponibles pour Ubuntu via GRUB, mais ces paramètres ne sont accessibles que si vous configurez les paramètres du noyau en conséquence. Si vous ne configurez pas ce paramètre de démarrage du noyau, le menu de récupération sera envoyé aux diagnostics Azure et non à la console série Azure. Vous pouvez obtenir l’accès au menu de récupération d’Ubuntu en suivant ces étapes :

Interrompre le processus BOOT et accéder au menu GRUB

Sélectionnez Options avancées pour Ubuntu et appuyez sur Entrée

La capture d’écran montre la console série avec les options avancées pour Ubuntu sélectionnées.

Sélectionnez la ligne affichant (mode de récupération), n’appuyez pas sur entrée mais appuyez sur « e ».

La capture d’écran montre la console série avec une version du mode de récupération sélectionnée.

Localisez la ligne qui chargera le noyau et remplacez le dernier paramètre nomodeset par la destination comme 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

La capture d’écran montre la console série avec la valeur modifiée.

Appuyez sur Ctrl-x pour démarrer et charger le noyau. Si tout se passe bien, vous verrez ces options supplémentaires, qui peuvent aider à effectuer d’autres options de récupération

La capture d’écran montre la console série dans le menu de récupération, qui offre des options de récupération supplémentaires.

Configuration Red Hat GRUB

Configuration GRUB de Red Hat 7.4+

La configuration par défaut de /etc/default/grub sur ces versions est correctement configurée

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"

Activer la touche SysRq

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

Configuration GRUB Red Hat 7.2 et 7.3

Le fichier à modifier est /etc/default/grub - une configuration par défaut ressemble à cet exemple :

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"

Modifiez les lignes suivantes dans /etc/default/grub

GRUB_TIMEOUT=1 

to

GRUB_TIMEOUT=5
GRUB_TERMINAL_OUTPUT="console"

to

GRUB_TERMINAL="serial console"

Ajoutez également cette ligne :

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

/etc/default/grub devrait maintenant ressembler à cet exemple :

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"

Terminez et mettez à jour la configuration de grub à l’aide de

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

Définissez le paramètre du noyau SysRq :

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

Vous pouvez également configurer GRUB et SysRq en utilisant une seule ligne soit dans le shell, soit via la commande Run. Sauvegardez vos fichiers avant d’exécuter cette commande :

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

Configuration GRUB de Red Hat 6.x

Le fichier à modifier est /boot/grub/grub.conf. La valeur timeout déterminera la durée d’affichage de GRUB.

#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

La dernière ligne terminal –-timeout=5 serial console augmentera encore le délai GRUB en ajoutant une invite de 5 secondes affichant Appuyez sur n’importe quelle touche pour continuer.

La capture d’écran montre une console avec une sortie.

Le menu GRUB devrait apparaître à l’écran pour le délai d’attente configuré = 15 sans qu’il soit nécessaire d’appuyer sur Échap. Assurez-vous de cliquer dans la console dans le navigateur pour activer le menu et sélectionnez le noyau requis.

La capture d’écran montre une console avec deux options Linux.

SuSE

SLES 12 SP1

Soit utiliser le chargeur de démarrage YaST conformément aux documents officiels.

Ou ajoutez/modifiez dans /etc/default/grub les paramètres suivants :

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"

Recréez le fichier grub.cfg

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

SLES 11 SP4

La console série apparaît et affiche les messages de démarrage mais n’affiche pas l’invite de connexion :

Ouvrez une session ssh dans la machine virtuelle et mettez à jour le fichier /etc/inittab en décommentant cette ligne :

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

Exécutez ensuite la commande.

telinit q

Pour activer GRUB, les modifications suivantes doivent être apportées à /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

Cette configuration permettra au message Appuyez sur n’importe quelle touche pour continuer d’apparaître sur la console pendant 5 secondes

Elle affichera ensuite le menu GRUB pendant 5 secondes supplémentaires - en appuyant sur la flèche vers le bas, vous interrompez le compteur et sélectionnez un noyau que vous souhaitez démarrer ou ajoutez le mot-clé unique pour le mode mono-utilisateur qui nécessite le mot de passe racine à définir.

L’ajout de la commande init=/bin/bash chargera le noyau mais garantira que le programme init est remplacé par un shell bash.

Vous accéderez à un shell sans avoir à saisir de mot de passe. Vous pouvez ensuite procéder à la mise à jour du mot de passe des comptes Linux ou apporter d’autres modifications à la configuration.

Forcer le noyau à une invite bash

L’accès à GRUB vous permet d’interrompre le processus d’initialisation. Cette interaction est utile pour de nombreuses procédures de récupération. Si vous n’avez pas de mot de passe racine et que l’utilisateur unique vous demande d’avoir un mot de passe racine, vous pouvez démarrer le noyau en remplaçant le programme init par une invite bash - cette interruption peut être obtenue en ajoutant init=/bin/bash à la ligne de démarrage du noyau.

La capture d’écran montre une console avec la ligne de démarrage mise à jour.

Remontez votre système de fichiers / (racine) RW à l’aide de la commande

mount -o remount,rw /

La capture d’écran montre une console avec une action de remontage.

Vous pouvez maintenant effectuer un changement de mot de passe racine ou de nombreux autres changements de configuration Linux.

La capture d’écran montre une console où vous pouvez modifier le mot de passe racine et d’autres configurations.

Redémarrer la machine virtuelle avec

/sbin/reboot -f

Mode mono-utilisateur

Sinon, vous devrez peut-être accéder à la machine virtuelle en mode utilisateur unique ou d’urgence. Sélectionnez le noyau que vous souhaitez démarrer ou interrompre à l’aide des touches fléchées. Entrez le mode souhaité en ajoutant le mot-clé single ou 1 à la ligne de démarrage du noyau. Sur les systèmes RHEL, vous pouvez également ajouter rd.break.

Pour plus d’informations sur l’accès au mode mono-utilisateur, consultez ce document.

Capture d’écran de l’entrée *Ubuntu dans le démarrage de l’écran du système d’exploitation sélectionné dans GRUB.

Prochaines étapes

En savoir plus sur la console série Azure

Contactez-nous pour obtenir de l’aide

Pour toute demande ou assistance, créez une demande de support ou posez une question au support de la communauté Azure. Vous pouvez également soumettre des commentaires sur les produits à la communauté de commentaires Azure.