web-dev-qa-db-fra.com

Comment réparer une erreur de démarrage grub: "Symbole 'grub_calloc' non trouvé

Il suffit de courir le dernier lot de mises à jour sur 20.04 (Xubuntu), et maintenant je reçois un GRUB erreur:

symbol 'grub_calloc' not found

Je suis tombé dans la coquille "Grub Rescue", mais je n'ai aucune idée de quoi faire là-bas qui pourrait être utile. Pour moi, "Symbole introuvable" implique une sorte d'erreur de construction avec le paquet de grub, mais je ne sais pas vraiment comment WRUB fonctionne. J'ai remarqué que cette mise à jour a également inclus "le micrologiciel", pas sûr que cela puisse être associé. Mon meilleur pari est-il juste pour démarrer à partir d'un CD en direct et voir si je peux faire la mise à jour de la mise à jour en grub?

Édité pour ajouter:

Ok, merci beaucoup de gens! Voici ce que je pense que je comprends maintenant.

  1. Sur les systèmes 'non-UEFI', GRUB est installé en deux parties distinctes. La première partie la plus basique est la partie qui est lancée sur le démarrage. Mais pour la plupart de ses fonctionnalités, il a besoin de la deuxième partie. Ces pièces doivent être alignées - aucune partie ne doit nécessiter de fonctionnalité de l'autre partie qui n'est en réalité pas là.

    Le problème visible de temps d'exécution se produit lorsque ces pièces ne sont pas alignées et que la fonction grub_calloc n'est pas fournie. Il n'est pas clair à 100% pour moi si Grub_calloc appartient à la seconde partie supérieure ou au premier. J'aurais attendu la seconde, mais le système de construction de Grub est un travail d'art considérable, donc je ne sais pas :).

  2. La cause première du problème est que la mise à jour de GRUB n'a pas assuré que Les parties ont été mises à jour. Idéalement, l'échec de l'échec de GRUB doit être échoué et le système doit être retourné à un état de sécurité. Cela n'arrive pas.

    C'est encore un mystère pour moi. Tout ce que la mise à jour a besoin de faire par défaut est placée à chaque partie où les parties actuelles sont, car évidemment qui fonctionnaient. Si les emplacements/lecteurs d'installation sont entraînés par la configuration et l'un de ces emplacements ne peut pas être atteint, alors une inadéquation est apparue entre cette donnée de configuration et la réalité. Cela pourrait ne pas apparaître comme un problème tant qu'aucune nouvelle dépendance n'a été introduite entre les pièces.

Toutes les saveurs de solution impliquent la réinstallation de Grub pour s'assurer que les deux parties sont alignées. Il n'est pas réellement nécessaire de revenir à la version précédente (bien que cela fonctionne), car ce n'est pas le temps d'exécution de la grub en soi qui est cassé. Il existe de nombreuses façons d'y parvenir, en fonction de votre environnement, mais de faire fonctionner le disque en direct de la réparation de démarrage.

Cela peut être utile, dans le but d'éviter un tel désalignement à l'avenir, de garantir que le programme d'installation de GRUB de votre système est configuré pour installer les correctifs.

Cette mise à jour résout certains bugs importants ( voir l'avis de sécurité Ubuntu 4432 ). Si vous avez retourné Grub pour résoudre ce problème, sachez que vous êtes exposé à ces problèmes.

48
mderouss

Nous avons eu de nombreux systèmes de production qui ont eu ce problème exactement: (Les étapes suivantes sont effectuées avec un DVD debian, mais devraient être assez similaires ou applicables sur Ubuntu)

  1. Commencez avec un disque de secours
  2. Il suffit de cliquer sur les questions
  3. Ignorer le réseau
  4. sélectionnez votre disque racine à monter
  5. sélectionnez également/démarrage à monter
  6. déposer une coquille dans le disque racine sélectionné
  7. grub-install DISKNAMEWITHOUTPARTITION (mais sans l'ID de partition (1,2,3 ....)) E.g grub-install /dev/sda
  8. redémarrer

Nous avons fait la mise à jour noninteractivement. Interactivement, il indique ce qui suit:

grub-installer: Erreur: Impossible de trouver un GRUB lecteur pour/dev/vda. Vérifiez votre appareil.map.

même si le disque devrait être XVDA et non VDA dans notre cas. Il enfreint le MBR qui réside dans une place spéciale sur le disque dur, c'est pourquoi vous devez mettre dans le disque sans partitionN auber.

Rapport de bogue Ubunt

Rapport de bogue Debian

0
Dorian Gaensslen

Je frappe cette erreur sur la mise à niveau d'un tas de serveurs d'Ubuntu 16.04 à 18.04. Dans mon cas, une machine avait un volume de démarrage séparé qui était sur /dev/md0 (réseau MDRAIDE) qui a utilisé /dev/sda1 et /dev/sdb1 comme volumes de raid. Le correctif était:

  • Démarrez à partir d'un bâton USB de 18,04 dans le mode "LiveCD".
  • Utilisez blkid pour trouver les uuides et les lecteurs de volume. Identifié /dev/md127 comme la matrice MDRAID qui est généralement apparue comme /dev/md0.
  • Puis:
    apt install grub2-common grub-pc
    mkdir -p /mnt/root/boot
    mount /dev/md127 /mnt/root/boot
    
  • Installez MBR sur les deux lecteurs physiques afin de travailler après une échec
    grub-install --root-directory=/mnt/root /dev/sdb
    grub-install --root-directory=/mnt/root /dev/sda
    
  • Vérifiez 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.

0
Earl Ruby