Démarrage de la machine virtuelle Linux sur le sauvetage de GRUB

Remarque

CentOS référencé dans cet article est une distribution Linux qui atteint la fin de vie (EOL). Tenez compte de votre utilisation et planifiez en conséquence. Pour plus d’informations, consultez Guide sur la fin de vie de CentOS.

Cet article traite de plusieurs conditions pouvant causer des problèmes de sauvetage de GRUB et fournit des conseils de dépannage.

Au cours du processus de démarrage, le chargeur de démarrage tente de localiser le noyau Linux et lui transmet le contrôle du démarrage. Si ce transfert ne peut pas être effectué, la machine virtuelle entre dans une console Grub Rescue. L’invite de la console Grub Rescue ne sera pas affichée dans le journal de la console série Azure. Toutefois, elle apparaît dans la capture d’écran des diagnostics de démarrage Azure.

Identifier le problème de sauvetage de GRUB

Affichez une capture d’écran des diagnostics de démarrage dans la page Diagnostics de démarrage de la machine virtuelle dans le portail Azure. Cette capture d’écran permet de diagnostiquer le problème de Grub Rescue et de déterminer si une erreur de démarrage est à l’origine du problème.

Le texte suivant est un exemple de problème de Grube Rescue :

error: file '/boot/grub2/i386-pc/normal.mod' not found.  
Entering rescue mode...  
grub rescue>

Résoudre le problème de sauvetage de GRUB en mode hors ligne

  1. Pour résoudre un problème de sauvetage de GRUB, une machine virtuelle de secours/réparation est nécessaire. À l’aide des commandes de réparation de machine virtuelle, créez une machine virtuelle de réparation à laquelle est connectée une copie du disque de système d’exploitation de la machine virtuelle affectée. Montez la copie des systèmes de fichiers du système d’exploitation dans la machine virtuelle de réparation à l’aide de chroot.

    Remarque

    Vous pouvez également créer manuellement une machine virtuelle de secours à l’aide du portail Azure. Pour en savoir plus, consultez l’article Résoudre les problèmes d’une machine virtuelle Linux en connectant le disque du système d’exploitation à une machine virtuelle de récupération à l’aide du portail Azure.

  2. Identifier le problème de sauvetage de GRUB. Lorsque vous rencontrez l’un des problèmes de sauvetage de GRUB suivants, accédez à la section correspondante pour le résoudre :

  3. Une fois que vous avez résolu le problème de sauvetage de GRUB, procédez comme suit :

    1. Démonter la copie des systèmes de fichiers de la machine virtuelle de secours/réparation.

    2. Exécutez la commande az vm repair restore pour remplacer le disque de système d’exploitation réparé par le disque de système d’exploitation d’origine de la machine virtuelle. Pour plus d’informations, consultez l’étape 5 Réparer une machine virtuelle Linux à l’aide des commandes de réparation de machine virtuelle Azure.

    3. Vérifiez si la machine virtuelle peut démarrer. Pour ce faire, examinez la console série Azure ou essayez de vous connecter à la machine virtuelle.

  4. Si la partition entière/de démarrage ou d’autres contenus importants sont manquants et ne peuvent être récupérés, il est recommandé de restaurer la machine virtuelle à partir d’une sauvegarde. Pour plus d’informations, consultez l’article Comment restaurer les données de la machine virtuelle Azure dans le portail Azure.

Consultez les sections suivantes pour plus d’informations sur les erreurs, les causes possibles et les solutions.

Remarque

Dans les commandes des sections suivantes, remplacez /dev/sdX par le périphérique de disque de système d’exploitation correspondant.

Erreur : système de fichiers inconnu

La capture d’écran suivante affiche le message d’erreur :

Capture d’écran de l’erreur de système de fichiers inconnu de GRUB.

Cette erreur peut être associée à l’un des problèmes suivants :

Corriger le système de fichiers de démarrage endommagé

  1. Vérifiez si une machine virtuelle de secours/réparation a été créée. Le cas échéant, suivez l’étape 1 de la section Résoudre le problème de Grub Rescue en mode hors ligne pour la créer.

  2. Consultez la section Résoudre les erreurs de système de fichiers endommagé dans Linux Azure pour résoudre les problèmes dans la partition de démarrage endommagée correspondante.

  3. Passez à l’étape 3 de la section Résoudre le problème de Grub Rescue en mode hors ligne pour échanger le disque de système d’exploitation.

Réinstallez GRUB et régénérez le fichier de configuration de GRUB

  1. Vérifiez si une machine virtuelle de secours/réparation a été créée. Le cas échéant, suivez l’étape 1 de la section Résoudre le problème de Grub Rescue en mode hors ligne pour la créer. Montez tous les systèmes de fichiers requis, y compris / et /boot dans la machine virtuelle de secours/réparation, puis accédez à l’environnement chroot.

  2. Réinstallez GRUB et régénérez le fichier de configuration GRUB correspondant en utilisant l’une des commandes suivantes :

    • Machines virtuelles RHEL/CentOS/Oracle 7.x/8.x Linux sans UEFI (base BIOS - Gen1)

      grub2-install /dev/sdX
      grub2-mkconfig -o /boot/grub2/grub.cfg
      sed -i 's/hd2/hd0/g' /boot/grub2/grub.cfg
      
    • Machines virtuelles RHEL/CentOS/Oracle 7.x/8.x Linux avec UEFI (Gen2)

      grub2-install /dev/sdX
      grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
      sed -i 's/hd2/hd0/g' /boot/efi/EFI/redhat/grub.cfg
      

      Si la machine virtuelle exécute CentOS, remplacez redhat par centos dans le fichier grub.cfg dont le chemin d’accès absolu est /boot/efi/EFI/centos/grub.cfg.

    • SLES 12/15 Gen1 et Gen2

      grub2-install /dev/sdX
      grub2-mkconfig -o /boot/grub2/grub.cfg
      sed -i 's/hd2/hd0/g' /boot/grub2/grub.cfg
      
    • Ubuntu 18.04/20.04

      grub-install /dev/sdX
      update-grub
      
  3. Passez à l’étape 3 de la section Résoudre le problème de Grub Rescue en mode hors ligne pour échanger le disque de système d’exploitation.

Erreur 15 : Fichier introuvable

La capture d’écran suivante affiche le message d’erreur :

Capture d’écran de l’erreur 15 fichier introuvable pour grub.

Pour résoudre ce problème, procédez comme suit :

  1. Vérifiez si une machine virtuelle de secours/réparation a été créée. Le cas échéant, suivez l’étape 1 de la section Résoudre le problème de Grub Rescue en mode hors ligne pour la créer. Montez tous les systèmes de fichiers requis, y compris / et /boot dans la machine virtuelle de secours/réparation, puis accédez à l’environnement chroot.

  2. Inspectez le contenu du système de fichiers /boot et déterminez ce qui manque.

  3. Si le fichier de configuration GRUB est manquant, réinstallez GRUB et régénérez le fichier de configuration GRUB.

  4. Vérifiez que les autorisations de fichier dans le système de fichiers /boot sont correctes. Vous pouvez comparer les autorisations en utilisant une autre machine virtuelle exécutant la même version de Linux.

  5. Si la partition entière/de démarrage ou d’autres contenus importants sont manquants et ne peuvent être récupérés, il est recommandé de restaurer la machine virtuelle à partir d’une sauvegarde. Pour plus d’informations, consultez l’article Comment restaurer les données de la machine virtuelle Azure dans le portail Azure.

  6. Une fois le problème résolu, passez à l’étape 3 de la section Résoudre le problème de Grub Rescue en mode hors ligne pour échanger le disque du système d’exploitation.

Erreur : fichier « /boot/grub2/i386-pc/normal.mod » introuvable

La capture d’écran suivante affiche le message d’erreur :

Capture d’écran de l’erreur normal.mod introuvable pour grub.

  1. Vérifiez si une machine virtuelle de secours/réparation a été créée. Si ce n’est pas le cas, suivez l’étape 1 dans Résoudre le problème de Grub Rescue en mode hors ligne pour en créer une. Montez tous les systèmes de fichiers requis, y compris / et /boot dans la machine virtuelle de secours/réparation, puis accédez à l’environnement chroot.

  2. Si vous ne parvenez pas à monter le système de fichiers /boot en raison d’une erreur de corruption, réparez le problème de corruption du système de fichiers /boot.

  3. Une fois que vous êtes dans chroot, vérifiez le contenu du répertoire /boot/grub2/i386-pc. Si le contenu est manquant, copiez-le à partir de /usr/lib/grub/i386-pc. Pour ce faire, utilisez les commandes suivantes :

    ls -l /boot/grub2/i386-pc
    cp -rp /usr/lib/grub/i386-pc /boot/grub2
    
  4. Si le contenu de la /boot partition est vide, utilisez les commandes suivantes pour la recréer :

    Remarque

    Les étapes suivantes s’appliquent aux machines virtuelles Linux RHEL/CentOS/Oracle 7.x/8.x sans UEFI (bios basé sur Gen1).

    1. Sous le processus chroot, réinstallez le grub. Remplacez en conséquence par /dev/sd[X] la copie correspondante du disque du système d’exploitation attaché à la machine virtuelle de réparation/sauvetage :

      grub2-install /dev/sd[X]
      
    2. Vérifiez que /etc/resolv.conf dispose d’une entrée DNS valide pour résoudre le nom du dépôt :

      cat /etc/resolv.conf
      
    3. Réinstallez le noyau :

      yum reinstall $(rpm -qa | grep -i kernel)
      
    4. Create le fichier grub.cfg :

      grub2-mkconfig -o /boot/grub2/grub.cfg
      sed -i 's/hd2/hd0/g' /boot/grub2/grub.cfg
      
  5. Passez à l’étape 3 de la section Résoudre le problème de sauvetage de GRUB en mode hors ligne pour échanger le disque de système d’exploitation.

Erreur : partition non définie

La capture d’écran suivante affiche le message d’erreur :

Capture d’écran de l’erreur partition non définie pour grub.

Cette erreur se produira avec une machine virtuelle basée sur RHEL (Red Hat, Oracle Linux, CentOS) dans l’un des scénarios suivants :

  • La partition /boot est supprimée par erreur.
  • La partition /boot est recréée en utilisant les mauvais secteurs de début et de fin.

Solution : recréer la partition /boot

Si la partition /boot est manquante, recréez-la en procédant comme suit :

  1. Vérifiez si une machine virtuelle de secours/réparation a été créée. Le cas échéant, suivez l’étape 1 de la section Résoudre le problème de Grub Rescue en mode hors ligne pour la créer.

  2. Identifiez si la table de partition est créée en tant que type dos ou GPT en utilisant la commande suivante :

    sudo fdisk -l /dev/sdX
    
    • Table de partition dos

      Capture d’écran montrant le démarrage avec une table de partition de type dos.

    • Table de partition GPT

      La capture d’écran montre le démarrage avec une table de partition de type GPT.

  3. Si la table de partition est de type DOS, recréez la partition /boot dans les systèmes DOS. Si la table de partition est de type GPT, recréez la partition /boot dans les systèmes GPT.

  4. Assurez-vous que le chargeur de démarrage GRUB est installé en utilisant le disque approprié. Pour l’installation et la configuration, vous pouvez suivre la procédure décrite dans l’article Réinstaller GRUB et régénérer le fichier de configuration GRUB.

  5. Passez à l’étape 3 de la section Résoudre le problème de sauvetage de GRUB en mode hors ligne pour échanger le disque de système d’exploitation.

Recréer la partition /boot dans les systèmes DOS

  1. Recréez la partition /boot à l’aide de la commande suivante :

    sudo fdisk /dev/sdX
    

    Utilisez les valeurs par défaut dans le Premier et le Dernier secteur, ainsi que le type de partition (83). Assurez-vous que la table de partition /boot est marquée comme démarrable en utilisant l’option a dans l’outil fdisk, comme illustré dans la sortie suivante :

    sudo fdisk /dev/sdc
    
    The device presents a logical sector size that is smaller than
    the physical sector size. Aligning to a physical sector (or optimal
    I/O) size boundary is recommended, or performance may be impacted.
    Welcome to fdisk (util-linux 2.23.2).
    
    Changes will remain in memory only, until you decide to write them.
    Be careful before using the write command.
    
    Command (m for help): n
    Partition type:
       p   primary (1 primary, 0 extended, 3 free)
       e   extended
    Select (default p): p
    Partition number (1,3,4, default 1): 1
    First sector (2048-134217727, default 2048):
    Using default value 2048
    Last sector, +sectors or +size{K,M,G} (2048-2099199, default 2099199):
    Using default value 2099199
    Partition 1 of type Linux and of size 1 GiB is set
    
    Command (m for help): t
    Partition number (1,2, default 2): 1
    Hex code (type L to list all codes): 83
    Changed type of partition 'Linux' to 'Linux'
    
    Command (m for help): a
    Partition number (1,2, default 2): 1
    
    Command (m for help): p
    
    Disk /dev/sdc: 68.7 GB, 68719476736 bytes, 134217728 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes
    Disk label type: dos
    Disk identifier: 0x000b7179
    
    Device Boot      Start         End      Blocks   Id  System
    /dev/sdc1   *        2048     2099199     1048576   83  Linux
    /dev/sdc2         2099200   134217727    66059264   8e  Linux LVM
    
    Command (m for help): w
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    
  2. Après avoir recréé la partition /boot manquante, vérifiez si le système de fichiers /boot est détecté. Normalement, une entrée s’affiche pour /dev/sdX1 (la partition /boot manquante).

    sudo blkid /dev/sdX1
    
    sudo blkid /dev/sdc1
    /dev/sdc1: UUID="<UUID>" TYPE="ext4"
    
  3. Si le système de fichiers /boot n’est pas visible dans blkid après la recréation de la partition, cela signifie que les données /boot ne sont plus présentes. Vous devez le recréer (en utilisant le même UUID et le même format de système de fichiers que dans l’entrée /boot /etc/fstab), puis restaurer son contenu à partir de la sauvegarde.

Recréer la partition /boot dans les systèmes GPT

  1. Recréez la partition /boot à l’aide de la commande suivante :

    sudo gdisk /dev/sdX
    

    Utilisez les valeurs par défaut dans le Premier et le Dernier secteur, ainsi que le type de partition (8300), comme illustré dans la sortie suivante :

    sudo gdisk /dev/sdc
    GPT fdisk (gdisk) version 1.0.3
    
    Partition table scan:
      MBR: protective
      BSD: not present
      APM: not present
      GPT: present
    
    Found valid GPT with protective MBR; using GPT.
    
    Command (? for help): n
    Partition number (1-128, default 1): 1
    First sector (34-134217694, default = 1026048) or {+-}size{KMGTP}:
    Last sector (1026048-2050047, default = 2050047) or {+-}size{KMGTP}:
    Current type is 'Linux filesystem'
    Hex code or GUID (L to show codes, Enter = 8300):
    Changed type of partition to 'Linux filesystem'
    
    Command (? for help): p
    Disk /dev/sdc: 134217728 sectors, 64.0 GiB
    Model: Virtual Disk
    Sector size (logical/physical): 512/4096 bytes
    Disk identifier (GUID): 6D915856-445A-4513-97E4-C55F2E1AD6C0
    Partition table holds up to 128 entries
    Main partition table begins at sector 2 and ends at sector 33
    First usable sector is 34, last usable sector is 134217694
    Partitions will be aligned on 2048-sector boundaries
    Total free space is 6076 sectors (3.0 MiB)
    
    Number  Start (sector)    End (sector)  Size       Code  Name
       1         1026048         2050047   500.0 MiB   8300  Linux filesystem
       2         2050048       134215679   63.0 GiB    8E00
      14            2048           10239   4.0 MiB     EF02
      15           10240         1024000   495.0 MiB   EF00  EFI System Partition
    
    Command (? for help): w
    
    Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
    PARTITIONS!!
    
    Do you want to proceed? (Y/N): Y
    OK; writing new GUID partition table (GPT) to /dev/sdc.
    Warning: The kernel is still using the old partition table.
    The new table will be used at the next reboot or after you
    run partprobe(8) or kpartx(8)
    The operation has completed successfully.
    
  2. Vérifiez si le système de fichiers /boot est détecté par le système en utilisant la commande suivante :

    sudo blkid /dev/sdX1
    

    Normalement, une entrée s’affiche pour /dev/sdX1 (la partition /boot manquante).

    sudo blkid /dev/sdc1
    /dev/sdc1: UUID="<UUID>" BLOCK_SIZE="4096" TYPE="xfs" PARTLABEL="Linux filesystem" PARTUUID="<PARTUUID>"
    
  3. Si le système de fichiers /boot n’est pas visible après la recréation de la partition, cela signifie que les données /boot ne sont plus présentes. Vous devez recréer le système de fichiers /boot (en utilisant le même UUID que dans l’entrée /boot /etc/fstab/), puis restaurer son contenu à partir de la sauvegarde.

Erreur : le symbole « grub_efi_get_secure_boot » est introuvable

La capture d’écran suivante affiche le message d’erreur :

Capture d’écran de l’erreur Grub « grub_efi_get_secure_boot » introuvable pour grub.

La version 4.12.14 du noyau Linux (utilisée dans SLES 12 SP5) ne prend pas en charge l’option démarrage sécurisé. Par conséquent, si le démarrage sécurisé est activé pendant le déploiement de la machine virtuelle (autrement dit, le champ Type de sécurité est défini sur Machines virtuelles de lancement approuvées), la machine virtuelle génère l’erreur de démarrage sécurisé via la console lorsque vous essayez de commencer par utiliser cette version du noyau SUSE sur une image de machine virtuelle Gen2.

Solution

Pour résoudre cette erreur de démarrage, procédez comme suit :

  1. Vérifiez si une machine virtuelle de secours/réparation a été créée. Le cas échéant, suivez l’étape 1 de la section Résoudre le problème de Grub Rescue en mode hors ligne pour la créer. Montez tous les systèmes de fichiers requis, y compris / et /boot, puis accédez à l’environnement chroot.

  2. Exécutez la commande YaST suivante dans l’environnement chroot :

    yast2 bootloader
    
  3. Décochez le « x » de l’option Activer la prise en charge du démarrage sécurisé, puis sélectionnez F10 pour enregistrer la modification.

    Capture d’écran des paramètres du chargeur de démarrage YaST2 dans la console SUSE.

  4. Passez à l’étape 3 de la section Résoudre le problème de Grub Rescue en mode hors ligne pour échanger le disque de système d’exploitation.

Autres erreurs de sauvetage GRUB

La capture d’écran suivante affiche le message d’erreur :

Capture d’écran d’un autre problème de sauvetage GRUB.

Ce type d’erreur se déclenche dans l’un des scénarios suivants :

  • Le fichier de configuration GRUB est manquant.
  • Une configuration incorrecte de GRUB est utilisée.
  • La partition /boot ou son contenu sont manquants.

Pour résoudre cette erreur, procédez comme suit :

  1. Vérifiez si une machine virtuelle de secours/réparation a été créée. Le cas échéant, suivez l’étape 1 de la section Résoudre le problème de Grub Rescue en mode hors ligne pour la créer. Montez tous les systèmes de fichiers requis, y compris / et /boot, puis accédez à l’environnement chroot.

  2. Assurez-vous que le fichier de configuration /etc/default/grub est configuré. Les images Azure Linux approuvées disposent déjà des configurations requises. Si vous souhaitez en savoir plus, consultez les articles suivants :

  3. Réinstallez GRUB et régénérez le fichier de configuration GRUB.

    Remarque

    Si le fichier manquant est /boot/grub/menu.lst, cette erreur concerne les versions de système d’exploitation plus anciennes (RHEL 6.x, Centos 6.x et Ubuntu 14.04). La version 1 de GRUB étant utilisée dans ces systèmes, les commandes sont différentes. Cet article ne traite pas de la version 1 de GRUB.

  4. Si la partition /boot entière est manquante, suivez la procédure décrite dans la section Erreur : partition non définie.

  5. Une fois le problème résolu, passez à l’étape 3 de la section Résoudre le problème de Grub Rescue en mode hors ligne pour échanger le disque du système d’exploitation.

Étapes suivantes

Si l’erreur particulière de démarrage ne consiste pas en un problème de sauvetage de GRUB, reportez-vous à l’article Résoudre les erreurs de démarrage des machines virtuelles Azure Linux pour obtenir plus d’options de dépannage.

Exclusion de responsabilité de tiers

Les produits tiers mentionnés dans le présent article sont fabriqués par des sociétés indépendantes de Microsoft. Microsoft exclut toute garantie, implicite ou autre, concernant les performances ou la fiabilité de ces produits.

Exclusion de responsabilité sur les coordonnées externes

Microsoft fournit des informations de contacts externes afin de vous aider à obtenir un support technique sur ce sujet. Ces informations de contact peuvent être modifiées sans préavis. Microsoft ne garantit pas l’exactitude des informations concernant les sociétés externes.

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.