54 votes

Comment réparer une erreur de démarrage de Grub : "symbole 'grub_calloc' introuvable"

Je viens de lancer la dernière série de mises à jour sur la version 20.04 (Xubuntu), et maintenant je reçois une erreur GRUB :

Le symbole 'grub_calloc' n'a pas été trouvé

Je suis tombé dans l'invite de commande 'grub rescue', mais je ne sais pas quoi faire là-bas qui pourrait être utile. Pour moi, 'symbole non trouvé' implique une sorte d'erreur de compilation avec le paquet grub, mais je ne sais pas vraiment comment grub fonctionne. J'ai remarqué que cette mise à jour incluait également des 'firmwares', je ne sais pas si c'est lié. Est-ce que ma meilleure option serait juste de démarrer à partir d'un CD live et de voir si je peux revenir en arrière sur la mise à jour de grub d'une façon ou d'une autre ?

Edité pour ajouter :

D'accord, merci à beaucoup de personnes ! Voici ce que je pense avoir compris maintenant.

  1. Sur les systèmes 'non-UEFI', grub est installé en deux parties distinctes. La première, la plus basique, est la partie démarrée au démarrage. Mais pour la plupart de ses fonctionnalités, il a besoin de la deuxième partie. Ces parties doivent être alignées - aucune des parties ne doit nécessiter de fonctionnalités de l'autre partie qui ne soit pas réellement présente.

    Le problème visible en temps d'exécution survient lorsque ces parties ne sont pas alignées, et la fonction grub_calloc n'est pas fournie. Il n'est pas totalement clair pour moi si grub_calloc appartient à la deuxième partie, plus grande, ou à la première. J'aurais pensé à la deuxième, mais le système de compilation de grub est un travail d'art considérable, donc je ne sais pas :).

  2. La cause profonde du problème est que la mise à jour de grub n'a pas assuré que les deux parties ont été mises à jour. Idéalement, l'échec de le faire devrait entraîner un échec de l'installation de grub, et le système devrait être ramené à un état sûr. Ce n'est pas le cas.

    C'est en fait encore un peu mystérieux pour moi. Tout ce que la mise à jour doit faire par défaut est de mettre chaque partie là où se trouvent les parties actuelles, car évidemment cela fonctionnait. Si les emplacements/de lecteurs d'installation sont configurés, et que l'un de ces emplacements ne peut pas être atteint, alors une incompatibilité est survenue entre ces données de configuration et la réalité. Cela pourrait ne pas se manifester comme un problème tant qu'aucune nouvelle dépendance n'a été introduite entre les parties.

Toutes les solutions possibles impliquent la réinstallation de grub pour s'assurer que les deux parties sont alignées. Il n'est pas nécessaire de revenir à la version précédente (bien que cela fonctionnerait), car ce n'est pas le runtime de grub en soi qui est cassé. Il existe de nombreuses façons de parvenir à cela, en fonction de votre environnement, mais exécuter le disque live Boot-repair a fonctionné pour moi.

Il peut être utile, dans le but d'éviter un tel désalignement à l'avenir, de s'assurer que l'installateur de grub sur votre système est configuré pour s'installer sur les bons périphériques.

Cette mise à jour résout quelques bugs importants (Voir l'Avis de Sécurité Ubuntu 4432). Si vous avez rétabli grub pour résoudre ce problème, sachez que vous êtes exposé à ces problèmes.

1voto

Renato Böhler Points 11

Utilisant Linux Mint ici et la même chose m'est arrivée. Il semblerait que cela soit dû à une mise à jour de sécurité récente, car je n'ai rien trouvé d'autre sur Google à part cette annonce de mise à jour.

Résolu en démarrant sur une clé USB Live Mint et en utilisant Timeshift pour restaurer à un moment avant que j'aie mis à jour grub2.

1voto

luisito_36 Points 193

J'ai définitivement résolu le problème.

entrer la description de l'image ici

  1. Allez sur la page, cliquez ici et téléchargez BOOT-REPAIR-DISK.

  2. Gravez-le sur le DVD ou créez une clé USB bootable de maximum 4 Go et USB 2.0 (je recommande le DVD 4 Go).

  3. Allumez le PC avec le DVD ou la clé USB insérés.

  4. Une fois que l'écran affiche le titre "Boot-Repair-Disk", il y a deux options que vous devez choisir. Cliquez sur la première, la session 64 bits.

    entrer la description de l'image ici

  5. Une fois que l'écran affiche le bureau, il affichera la mise à jour de Boot-Repair-Disk, cliquez sur NON car ce n'est pas nécessaire.

  6. Une fois que l'écran affiche deux options que vous devez choisir comme le montre l'image suivante, cliquez sur le premier Réparation recommandée (répare la plupart des problèmes fréquents)

    entrer la description de l'image ici

  7. Une fois le processus terminé, redémarrez le PC et il devrait démarrer avec le système d'exploitation Ubuntu.

C'est tout. Bonne chance!

Plus d'informations, ici: https://help.ubuntu.com/community/Boot-Repair

0voto

Dorian Gaensslen Points 106

Nous avions de nombreux systèmes de production qui rencontraient exactement ce problème : (les étapes suivantes sont réalisées avec un DVD Debian mais devraient être assez similaires ou applicables sur Ubuntu)

  1. Commencez avec un disque de secours
  2. Cliquez simplement sur les questions
  3. Ignorez le réseau
  4. Sélectionnez votre disque racine à monter
  5. Sélectionnez également /boot à monter
  6. Lancez un shell dans le disque racine sélectionné
  7. grub-install NOMDUDISQUESANSPARTITION (mais sans l'identifiant de partition (1,2,3....)) par exemple grub-install /dev/sda
  8. redémarrez

Nous avons fait la mise à jour de manière non interactive. Interactivement, il signale ce qui suit :

grub-install: erreur : impossible de trouver un lecteur GRUB pour /dev/vda. Vérifiez votre device.map.

même si le disque devrait être xvda et non vda dans notre cas. Cela casse le MBR qui réside dans un endroit spécial sur le disque dur, c'est pourquoi vous devez l'insérer sans numéro de partition.

Rapport de bug Ubuntu

Rapport de bug Debian

0voto

Duck Dodgers Points 133

```html

La Surprise :

Après une mise à jour récente, j'ai obtenu la même erreur :

erreur : symbole grub_calloc non trouvé .
Entrée en mode de secours ...
grub rescue> _

Points de différence :

Ce qui est différent dans mon cas, comparé à toutes les autres réponses répertoriées ici, ainsi que les points mentionnés dans le post de l'OP sous Edit, était, j'ai UEFI !

J'ai également un système de double amorçage avec Windows 10 et Debian 10 (et pas Ubuntu, je sais, ce forum est askubuntu mais c'est l'une des premières réponses lors de la recherche sur le web pour l'erreur 'grub_calloc not found').

Les solutions :

  • J'ai lu toute la discussion sur le fait que le grub est en deux parties, etc etc, à la fois sur ce forum et ailleurs. J'ai réinstallé grub (et grub-common, et grub-efi-amd64-bin et grub-efi-amd64-bin-signed et grub2-common), espérant un peu de 'réalignement'. grub-pc n'était pas installé sur mon système auparavant, donc je l'ai également installé par mesure de précaution. Rien n'a changé pour moi.

  • L'installation sur le MBR n'était pas une option pour moi. Windows 10 est installé avec UEFI sur cet ordinateur portable.

  • Je n'ai pas de RAID, pas de configuration LVM. Je ne sais même pas ce que sont ces choses. Donc aucune des autres réponses ne m'a aidé.

Démarrer à partir du fichier EFI :

J'espérais qu'un correctif viendrait bientôt, car ce bogue rend le système inamorçable et inutilisable. En attendant, je pouvais toujours démarrer à la fois dans Windows 10 et Debian 10, en,

  1. allant dans "'Réglages du BIOS'" en appuyant sur ÉCHAPPE lorsque l'ordinateur portable démarre,
  2. puis en sélectionnant l'option "Démarrer à partir du fichier EFI" au lieu de "Démarrer à partir du gestionnaire d'OS",
  3. puis dans les dossiers Boot, debian, HP et Microsoft en allant dans debian,
  4. puis en sélectionnant le fichier grubx64.efi,

ce qui affichait le menu grub habituel avec les choix d'OS habituels. Peut-être que cette option est quelque chose de spécifique à mon ordinateur portable, je ne peux pas dire. (Quelque chose de similaire pourrait être obtenu, en utilisant également une clé USB/CD en direct, je suppose).

La solution qui a fonctionné :

Quoi qu'il en soit, après avoir attendu une semaine environ, pour le correctif du bogue, j'en ai eu assez de cette routine de passer par les Réglages du BIOS pour amorcer l'ordinateur portable tous les matins. Après avoir démarré dans Debian 10, ce matin, j'ai fait ce qui suit :

  1. J'ai regardé ce qui se trouvait dans le dossier Boot sous EFI, où je n'ai trouvé qu'un seul fichier bootx64.efi.
  2. J'ai fait une sauvegarde du fichier bootx64.efi ---> bootx64.efi.bak placé dans le même dossier.
  3. Puis j'ai copié le fichier grubx64.efi du dossier debian, dans le dossier Boot comme le nouveau bootx64.efi.
  4. J'ai redémarré l'ordinateur portable et le menu grub est apparu, propre et clair, sans avoir à faire des acrobaties.

Je suppose que la même chose pourrait être faite à partir d'une clé USB/CD en direct également.

Je ne sais pas si cette solution est sûre ou bricolée (ou si c'est même une solution pour tout le monde avec UEFI).


  • Démarrer avant la correction.

Erreur

```

0voto

Andrew Pougher Points 31

J'ai rencontré cette erreur en mettant à niveau un tas de serveurs de Ubuntu 16.04 à 18.04. Dans mon cas, une machine avait un volume de démarrage séparé qui se trouvait sur /dev/md0 (ensemble mdraid) qui utilisait /dev/sda1 et /dev/sdb1 comme volumes RAID. La solution était la suivante :

  • Boot depuis une clé USB 18.04 en mode "LiveCD".

  • Utiliser blkid pour trouver les UUID des volumes et des disques. Identifier /dev/md127 comme l'ensemble mdraid qui apparaissait généralement comme /dev/md0.

  • Ensuite :

    apt install grub2-common grub-pc
    mkdir -p /mnt/root/boot
    mount /dev/md127 /mnt/root/boot
  • Installer le MBR sur les deux disques physiques pour que l'un ou l'autre fonctionne en cas de panne

    grub-install --root-directory=/mnt/root /dev/sdb
    grub-install --root-directory=/mnt/root /dev/sda
  • Vérifier qu'il y a de nouveaux fichiers grub dans /mnt/root/boot/grub :

    ls -alR /mnt/root
  • Redémarrer

Après cela, le serveur est revenu en ligne.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X