"no such device..." au démarrage ( résolu)

bonjour ,

Je viens d’installer jessie sur mon disque dur externe à partir de mon ancien portable toshiba qui
comportait un double amorçage W7/wheezy et comme il m’était déjà arrivé 2 fois de suite avec ce dd externe , grub a refusé de s’installer sur ce disque ( pourquoi = mystère ) malgré le bon choix à l’installation de jessie = sur /dev/sdb = sur DD externe .
J’ai donc utilisé l’outil “boot repair” de ubuntu pour forcer l’installation de grub sur ce disque avec l’option “installer grub sur tous les disques”. Je peux donc amorcer mon dd externe sur mon portable toshiba à condition de sélectionner ce disque dans le menu grub qui comporte 3 options : wheezy/W7/jessie .

Je viens d’essayer ce disque sur mon nouveau portable asus ( bios uefi dont j’ai désactivé le secure boot ) et au démarrage j’obtiens " grub rescue> no such device " 5aecb7a- xxxx…b7070 " . Je suppose qu’il attendait le grub du toshiba pour que je sélectionne jessie . Comment faire , si possible , à partir de l’invite “grub rescue” pour modifier le programme de démarrage de jessie pour qu’il fonctionne sur mon asus ( W10 seul )et aussi sur n’importe quelle machine ( c’est le but recherché) .

note : j’ai pensé à utiliser le “boot repair” à partir de mon asus qui ne comporte aucun grub et lui dire de réinstaller grub sur jessie en utilisant ses options avancées , mais est-ce faisable en toute sécurité ?

** comment indiquer que le pb est résolu sans être obligé d’éditer le message ?

Salut,
tu t’auto-réponds dans un second message, et tu cliques sur la coche verte en bas à droite ;-).

L’installateur Debian est très peu explicite sur les causes d’échec d’installation de GRUB. Ce dernier a des exigences parfois assez obscures. Dernière en date dans mon cas : il a refusé de s’installer car il a trouvé un “double label” sur le disque, la raison étant qu’il restait une trace (signature) d’un ancien formatage du disque en UDF qui n’avait pas été effacée par la création d’une table de partition standard. Après détection et nettoyage de la signature UDF par wipefs, plus d’erreur.

Parfois, un message d’erreur plus ou moins clair est visible dans la console des logs d’installation accessible par Ctrl+Alt+F4. S’il a déjà défilé hors de l’écran, on peut lancer un shell dans une console avec Ctrl+Alt+F2 et examiner le contenu du fichier /var/log/syslog.

Oui, ou du moins une partie. “Installer GRUB dans tel emplacement” est trompeur, car le chargeur de GRUB est divisé en trois parties qui peuvent être situées dans des emplacements différents.

  • l’amorce (boot image) de moins de 512 octets est installée dans le MBR d’un disque ou le secteur de boot d’une partition de type compatible (comprendre : connu pour ne rien mettre dans le secteur de boot). C’est cet emplacement qu’on spécifie à l’installation du chargeur
  • le noyau (core image) d’une trentaine de kilo-octets peut être installé dans l’espace entre le MBR contenant la boot image et la première partition dans le cas d’un disque partitionné au format MSDOS ou dans une partition dédiée de type “BIOS boot” dans le cas d’un disque partitionné au format GPT, ou à défaut sous firme d’un fichier normal dans la partition qui contient /boot/grub (non recommandé) à condition qu’elle soit sur le même disque que l’amorce. C’est cette partie qui affiche le message d’erreur que tu as eu et l’invite “grub rescue” lorsqu’elle n’arrive pas à trouver la partition qui contenait /boot/grub lors de l’installation.
  • la troisième partie (fichier de config du menu, modules…) est constituée de fichiers situés dans /boot/grub. Elle peut être située sur un autre disque que les deux précédentes. Cette partie est nécessaire pour afficher le menu de démarrage.

Quand on installe le chargeur GRUB sur plusieurs disques, seules la boot image et la core image sont installées sur chaque disque. La troisième partie n’est installée que dans le système de fichiers monté contenant /boot/grub/, et n’est dupliqué que s’il est dans un ensemble RAID dont un membre est présent sur chaque disque.

Les possibilités d’actions dans le shell de secours de GRUB sont très limités. Basiquement, cela se limite à

  • afficher les variables de configuration avec la commande set, notamment “prefix” qui contient la position de la troisième partie.
  • afficher la liste des partitions avec la commande ls pour identifier la position réelle de la troisième partie
  • modifier la valeur de la variable “prefix” avec la bonne position
  • activer le mode normal avec la command normal.

Typiquement, si /boot/grub est sur la partition n° 1 qui est la racine, la valeur à donner sera
set prefix=(hd0,1)/boot/grub
Si /boot/grub est sur la partition n° 2 qui est montée sur /boot, la valeur à donner sera (on enlève /boot qui ne fait pas partie de la partition)
set prefix=(hd0,2)/grub
Cela n’a une chance de marcher que si la troisième partie a effectivement été installée (sachant que les erreurs se produisent surtout lors de l’installation de la boot image ou de la core image qui a lieu après) et si elle est compatible avec la core image qui a été amorcée (inutile d’essayer avec une core image de Wheezy et /boot/grub de Jessie).

Si tout cela permet d’accéder au menu de démarrage et de lancer le système, ce n’est pas fini car rien n’a été modifié. Il faudra réinstaller la boot image et la core image avec grub-install /dev/sdX après avoir réglé les éventuels problèmes qui provoquent l’échec de la commande.

Si on veut faire plus simple, la méthode classique consiste à redémarrer l’installateur Debian en mode “rescue”, sélectionner la racine du système installé et réparer le chargeur GRUB. On peut aussi lancer un shell sur la racine du système pour exécuter manuellement grub-install /dev/sdX.

bonjour et merci pour toutes ces explications .

On s’est déjà croisé à propos du même problème avec l’installation de wheezy ( mon pseudo était alors mazda mais il a fallu que je me réinscrive suite à des pbs rencontrés par ce forum et j’ai été obligé d’en changer ) . La solution adoptée pour wheezy était celle donnée ci-dessus et je l’ai reprise pour jessie ( passage par rescue ) .