GRUB confond les noyaux / initramfs d'installation d'Ubuntu et d'Arch Linux


9

J'ai une machine qui utilisait le double démarrage d'Ubuntu (16.04 actuellement) et Windows 7, avec GRUB d'Ubuntu comme chargeur de démarrage.

Maintenant, je viens d'ajouter Arch Linux comme troisième système d'exploitation, en suivant les instructions d'installation officielles. Je n'ai pas installé GRUB depuis Arch car je voulais utiliser celui contrôlé par Ubuntu. Les instructions contiennent une commande mkinitcpio -p linuxqui a probablement généré des fichiers de démarrage que j'ai exécutés comme décrit.

Maintenant, lorsque j'essaie de démarrer Ubuntu à partir de GRUB via son entrée par défaut, j'obtiens cette erreur désagréable (désolé pour la photo d'écran):

Message d'erreur

Comme le uname -amontre la sortie de , il essaie de démarrer le noyau Arch, mais /dev/sda6c'est la partition racine Ubuntu.

Je dois naviguer Advanced options for Ubuntuet sélectionner l'une des Ubuntu, with Linux 4.4.0-*entrées pour pouvoir charger Ubuntu, je n'ai pas pu trouver une entrée qui chargerait correctement Arch cependant.

L'exécution à sudo update-grubpartir d'Ubuntu ( " update-grubest un stub à exécuter grub-mkconfig -o /boot/grub/grub.cfgpour générer un fichier de configuration grub2." ) Ne change rien. L' grub-customizeroutil était également inutile pour résoudre ce problème jusqu'à présent.

Qu'est-ce qui cause cette confusion de GRUB et comment puis-je le corriger pour que chaque version de Linux démarre avec le bon noyau et à partir de la bonne partition?

Il semble que j'ai stupidement installé Arch avec / boot d'Ubuntu monté, donc il a probablement placé ses fichiers de démarrage là-dedans.

Je suis d'accord pour effacer toutes les choses liées à Arch pour obtenir à nouveau le chargeur de démarrage d'Ubuntu et faire une nouvelle installation d'Arch plus tard.


Mises à jour (merci à @terdon pour son soutien dans le chat Ask Ubuntu):

Voici mon /boot/grub/grub.cfg.

Toutes les entrées Linux semblent pointer vers ma partition / dev / sda6, qui est la racine d'Ubuntu:

$ grep ' linux /' /boot/grub/grub.cfg
    linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
        linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
        linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
        linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro init=/sbin/upstart
        linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro recovery nomodeset
        linux /vmlinuz-4.4.0-21-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
        linux /vmlinuz-4.4.0-21-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro init=/sbin/upstart
        linux /vmlinuz-4.4.0-21-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro recovery nomodeset
        linux /vmlinuz-4.2.0-35-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
        linux /vmlinuz-4.2.0-35-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro init=/sbin/upstart
        linux /vmlinuz-4.2.0-35-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro recovery nomodeset

J'ai essayé de mettre à jour la configuration GRUB depuis Ubuntu:

$ sudo grub-mkconfig -o /boot/grub/grub.cfg 
Generating grub configuration file ...
dpkg: warning: version 'linux' has bad syntax: version number does not start with a digit
Found linux image: /boot/vmlinuz-linux
Found initrd image: /boot/initramfs-linux.img
Found linux image: /boot/vmlinuz-4.4.0-21-generic
Found initrd image: /boot/initrd.img-4.4.0-21-generic
Found linux image: /boot/vmlinuz-4.2.0-35-generic
Found initrd image: /boot/initrd.img-4.2.0-35-generic
Found memtest86+ image: /memtest86+.elf
Found memtest86+ image: /memtest86+.bin
Found Windows 7 (loader) on /dev/sda1
Found Arch on /dev/sda8
done

J'ai essayé de réinstaller GRUB sur le MBR depuis Ubuntu:

$ sudo grub-install /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.

$ sudo grub-install --recheck /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.

Ce sont les packages du noyau Ubuntu installés d'ailleurs, j'ai essayé de dpkg-reconfiguretous, mais sans aucun effet sur le problème:

$ dpkg -l linux-image* | grep ^ii
ii  linux-image-4.2.0-35-generic       4.2.0-35.40  amd64        Linux kernel image for version 4.2.0 on 64 bit x86 SMP
ii  linux-image-4.4.0-21-generic       4.4.0-21.37  amd64        Linux kernel image for version 4.4.0 on 64 bit x86 SMP
ii  linux-image-extra-4.2.0-35-generic 4.2.0-35.40  amd64        Linux kernel extra modules for version 4.2.0 on 64 bit x86 SMP
ii  linux-image-extra-4.4.0-21-generic 4.4.0-21.37  amd64        Linux kernel extra modules for version 4.4.0 on 64 bit x86 SMP

J'ai également essayé de régénérer les initramfs Ubuntu:

$ sudo update-initramfs -u -k all
update-initramfs: Generating /boot/initrd.img-4.4.0-21-generic
update-initramfs: Generating /boot/initrd.img-4.2.0-35-generic

Ma disposition de partition:

Vérifié depuis le système Ubuntu. Les étiquettes doivent s'expliquer.

$ lsblk -f /dev/sda
NAME    FSTYPE LABEL       UUID                                 MOUNTPOINT
sda                                                             
├─sda1  ntfs   win7-boot   90DCF3A5DCF3842E                     /win/boot
├─sda2  ntfs   windows7    482C7A572C7A3FCC                     /win/c
├─sda3  ext4   grub-boot   6dbb8633-dadd-4b5e-8d85-b0895fde9dfb /boot
├─sda5  ext4   images      81dc42c4-a161-4ccd-b704-6e5c09298943 /images
├─sda6  ext4   ubuntu-1604 eee18451-b607-4875-8a88-c9cb6c6544c8 /
├─sda7  ext4   ubuntu-home 485b3ef1-7216-4053-b25c-f656d529e8e6 /home
├─sda8  ext4   arch-root   8d281a0c-969c-44cf-ba6a-1d3c7b4be7ec 
├─sda9  ext4   arch-home   32522902-a53d-44c8-90f2-6bbf14c40f1f 
└─sda10 swap   linux-swap  8b05bd9b-bc42-46f6-8c18-50711a3c48b9 [SWAP]

Structure de mon menu GRUB:

Page principale de GRUB

Options avancées pour Ubuntu:
Options avancées de GRUB pour Ubuntu

Options avancées pour Arch:
Options avancées de GRUB pour Arch


Mon /bootannuaire:

$ ls -la /boot
total 118480
drwxr-xr-x  4 root root     4096 Apr 24 20:50 .
drwxr-xr-x 28 root root     4096 Apr 24 19:44 ..
-rw-r--r--  1 root root  1313029 Mär 16 01:45 abi-4.2.0-35-generic
-rw-r--r--  1 root root  1239577 Apr 19 00:21 abi-4.4.0-21-generic
-rw-r--r--  1 root root   184888 Mär 16 01:45 config-4.2.0-35-generic
-rw-r--r--  1 root root   189412 Apr 19 00:21 config-4.4.0-21-generic
drwxr-xr-x  6 root root     4096 Apr 26 19:58 grub
-rw-r--r--  1 root root 18598360 Apr 24 20:59 initramfs-linux-fallback.img
-rw-r--r--  1 root root  3516429 Apr 24 20:59 initramfs-linux.img
-rw-r--r--  1 root root 33642388 Apr 24 18:31 initrd.img-4.2.0-35-generic
-rw-r--r--  1 root root 36143341 Apr 24 19:51 initrd.img-4.4.0-21-generic
drwx------  2 root root    16384 Okt 28 17:43 lost+found
-rw-r--r--  1 root root   182704 Jan 28 13:44 memtest86+.bin
-rw-r--r--  1 root root   184380 Jan 28 13:44 memtest86+.elf
-rw-r--r--  1 root root   184840 Jan 28 13:44 memtest86+_multiboot.bin
-rw-------  1 root root  3745312 Mär 16 01:45 System.map-4.2.0-35-generic
-rw-------  1 root root  3853719 Apr 19 00:21 System.map-4.4.0-21-generic
-rw-------  1 root root  6829104 Mär 16 01:45 vmlinuz-4.2.0-35-generic
-rw-------  1 root root  7013968 Apr 19 00:21 vmlinuz-4.4.0-21-generic
-rw-r--r--  1 root root  4435552 Apr 14 19:20 vmlinuz-linux

Les noyaux 4.4.0 et 4.2.0 devraient être Ubuntu, Arch devrait avoir un noyau 4.5.0. Mais comment savoir à quel fichier sans version du noyau son nom appartient?


Mon répertoire racine Ubuntu (répertoires exclus):

$ ls -la / | grep ^[^d]
total 124
lrwxrwxrwx   1 root      root         32 Apr 24 19:44 initrd.img -> boot/initrd.img-4.4.0-21-generic
lrwxrwxrwx   1 root      root         32 Apr  5 17:45 initrd.img.old -> boot/initrd.img-4.2.0-35-generic
lrwxrwxrwx   1 root      root         29 Apr 24 19:44 vmlinuz -> boot/vmlinuz-4.4.0-21-generic
lrwxrwxrwx   1 root      root         29 Apr  5 17:45 vmlinuz.old -> boot/vmlinuz-4.2.0-35-generic

Mon répertoire racine Arch ne contient aucun fichier ni lien.


J'ai eu le même problème avec le triple démarrage d'Ubuntu, Windows et Arch Linux. vous devez corriger grub manuellement si nécessaire, démarrer dans arch linux puis reconstruire grub à partir de là, vous devrez peut-être installer os-prober. puis exécutez ceux - ci , sudo mkinitcpio -p linuxpuis sudo grub-mkconfig -o /boot/grub/grub.cfgenfinsudo grub-install /dev/sda
Edward Torvalds

Lorsque j'installais diverses distributions Linux sur mon ordinateur portable (tout en remplaçant l'ancienne, en gardant les fenêtres intactes), j'ai eu un problème similaire. Mais dans mon cas, 1. C'était un système UEFI 2. Je n'ai pas conservé plusieurs OS Linux.
Utilisateur enregistré

Lors du démarrage, pouvez-vous modifier dynamiquement le noyau et initrd pour démarrer dans Ubuntu? Si vous l'avez fait, quelle est l'erreur?
SHW

L'écran contient le message posté d'erreur: Root device mounted successfully, but /sbin/init does not exists. Avez-vous enquêté là-dessus? Manque initvraiment? Si oui, vous devez absolument l'installer, si à la place il est présent, une idée pourquoi il ne peut pas être trouvé?
MariusMatutiae

Réponses:


5

Je l'ai finalement résolu en nuking la partition Arch et ses fichiers de démarrage dans le répertoire de mon Ubuntu /bootdepuis l'orbite. Ubuntu va bien à nouveau maintenant, toutes les entrées GRUB restantes fonctionnent à nouveau.

Voici une liste de ce que j'ai fait:

  • Supprimer les initramfsfichiers d'Arch :

    sudo rm /boot/initramfs-linux*
    
  • Supprimer le vmlinuzfichier d'Arch :

    sudo rm vmlinuz-linux
    
  • Formater la partition Arch ( /dev/sda8) à l'aide de GParted

  • Mettre à jour la configuration de GRUB:

    sudo update-grub
    
  • Redémarrez et profitez-en!


Je pense que la première ligne codée ne devrait initramfs-linuxpas contenir...ranfs...
Anwar

1
@Anwar Bien sûr, merci de faire attention. J'ai corrigé la faute de frappe.
Byte Commander

1

Fixer grub.cfg à la main (non recommandé)

En regardant votre grub.cfg

l'entrée Ubuntu est cassée (et certaines des suivantes également)

menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-eee18451-b607-4875-8a88-c9cb6c6544c8' {
    recordfail
    load_video
    gfxmode $linux_gfx_mode
    insmod gzio
    if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos3'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos3 --hint-efi=hd0,msdos3 --hint-baremetal=ahci0,msdos3  6dbb8633-dadd-4b5e-8d85-b0895fde9dfb
    else
      search --no-floppy --fs-uuid --set=root 6dbb8633-dadd-4b5e-8d85-b0895fde9dfb
    fi
    linux   /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro  
    initrd  /initramfs-linux.img
}

Les deux dernières lignes sont votre commande émise par grub pour charger le noyau et initrd, et recherchent actuellement le noyau ARCH et initiramfs. De plus, il les recherche sous la /partition in identifiée par uuid=eee18451-b607-4875-8a88-c9cb6c6544c8laquelle pourrait ou non héberger les fichiers Ubuntu prévus.

Vous pouvez résoudre ce problème en:

sudo blkid

pour obtenir l'uuid de votre partition racine ubuntu.

Remplacez ensuite les deux dernières lignes par le lien sim vers vos dernières images de noyau et initrd (puisque c'est la façon dont ubuntu s'attend à ce que ce soit)

linux   /vmlinuz root=UUID=<correct-uuid-ubuntu-partition> ro  
initrd  /initrd.img

Si cela ne le résout pas tout de suite, une autre correction peut être nécessaire. Vous pouvez les trouver en "copiant" l'une des entrées testées et fonctionnelles, et je vous recommande d'utiliser la plus vanille (par exemple, aucun upstart ou autre paramètre du noyau tel que nomodeset n'est passé).

Cela devrait être un bon candidat:

menuentry 'Ubuntu, with Linux 4.4.0-21-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-21-generic-advanced-eee18451-b607-4875-8a88-c9cb6c6544c8'

L'entrée Arch est également cassée, en ce sens qu'elle recherche probablement les initramfs et le noyau Arch sous la partition racine Ubuntu. L'emplacement par défaut de ceux-ci est sous / boot. Ajustez les deux dernières lignes d'entrée Arch en corrigeant l'emplacement et en vérifiant que l'uuid de la partition racine est celui contenant la racine Arch.

Un (plusieurs) mot (s) d'avertissement:

Il n'est généralement pas recommandé aux utilisateurs d'Ubuntu de jouer avec grub.cfgà la main. Faites-en une copie et soyez prudent dans son édition. Soyez prêt au hasard que votre système ne démarre plus (mais vous pourrez le ressusciter en utilisant la procédure de démarrage décrite dans mon ancienne réponse).

De plus, bien que cela puisse résoudre votre problème cette fois-ci, il pourrait revenir vous mordre la prochaine fois que vous devrez repeupler votre menu grub. Pour une raison quelconque, le sondage os de grub sous ubuntu est confus par la présence du noyau Arch sous / boot. Je suppose qu'un utilitaire tel que la réparation de démarrage devrait être en mesure de rendre correctement toutes vos distributions amorçables, mais si je me souviens bien, cela n'a pas fonctionné pour vous.

Un correctif permanent pourrait consister à installer le noyau arch et les images dans un répertoire différent de celui par défaut / boot. C'est compliqué et vous devriez consulter l'entrée grub d'Arch wiki sur la façon de le faire correctement.

VIEILLE RÉPONSE (recommandé si vous prévoyez de passer à Arch à long terme) Voici ce que je ferais, et je l' ai fait en quelque sorte il y a quelques mois.

Accédez à la page arch wiki grub et lisez la section appropriée pour votre table de partition (vous êtes probablement UEFI, alors lisez ESP et ainsi de suite).

Démarrage manuel dans Arch

Il s'agit d'une expérience hautement formatrice que je recommande d'essayer. En supposant que votre noyau Arch Linux se trouve quelque part sur votre disque, appuyez sur cà l'invite grub et tapez ls pour voir une liste de périphériques et de partitions (hd0,msdos1),(hd1,gpt1),.... Vous pouvez ls chacun d'eux pour voir le contenu.

Vous devez découvrir trois choses:

  • Où est votre /partition racine Arch
  • Où est votre noyau Arch vmlinuz
  • Où est ton arc intiramfs-linux.img

une fois que vous possédez ces trois, vous exécuterez trois commandes dans grub> prompt quelque chose de similaire à ceci.

grub> set root=(hd0,1)
grub> linux /vmlinuz root=/dev/sda1
grub> initrd /intiramfs-linux.img
grub> boot

Notez que grub peut trouver, par exemple

grub> find /sbin/init

(le seul grub ne peut pas trouver automatiquement et vous donne une panique au noyau;))

Tout cela, j'ai appris ici , une source que je recommande fortement. Si vous y parvenez, passez à la correction de grub! Autrement...

Boot Arch à partir d'une clé en direct! Obtenez un environnement Arch en direct et suivez le wiki d'installation chrootsur Arch de la même manière que vous l'avez fait la première fois.

Grub de fixation

Depuis Arch, installez les packages grub appropriés, et notamment os-proberpour permettre grub-installde détecter votre autre système. Suivez attentivement le guide d'installation là-bas et vous devriez pouvoir (au moins) démarrer à la fois arch et ubuntu à partir du menu grub. L'installation des commandes finira par ressembler à ceci.

** Avertissement ** N'exécutez pas ces commandes, elles sont données à titre d'exemple, vous devez déterminer celles qui conviennent à votre système

# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub --recheck
# grub-mkconfig -o /boot/grub/grub.cfg

** Si tout le reste échoue **

Malheureusement, c'est aussi spécifique que cela étant donné le nombre limité d'informations et SE n'est pas vraiment un forum pour de telles questions, d'où ma réponse "générique" faisant référence à des ressources utiles.

Si vous ne pouvez pas le comprendre, passez peut-être sur les forums Arch, et à condition que vous ayez fait de votre mieux et lu les documents avant la main, vous pourriez trouver de l'aide.

Faire tout cela à travers Arch a été une expérience d'apprentissage fondamentale pour moi.


1
Merci pour votre réponse. Tout d'abord, c'est un système BIOS avec un disque partitionné MBR. Deuxièmement, je veux utiliser le package grub et la configuration d'Ubuntu, la réinstallation de GRUB à partir d'Arch n'est pas ce que je prévois. Je doute également que cela apporterait des modifications ... Et je peux démarrer sur Ubuntu via l'entrée GRUB quelque part dans les options avancées. Le problème est que GRUB ne semble pas être en mesure de déterminer quel noyau ou ramdisk initial ou tout ce qui appartient à quel système sur quelle partition.
Byte Commander

Essentiellement, les mêmes étapes s'appliquent. grub-install et grub-mkconfig (qui fait de vous un nouveau fichier grub.cfg) sont des commandes grub qui sont également disponibles sous ubuntu. Vérifiez si os-prober est également disponible ou quelque chose de similaire (cela permet à mkconfig de trouver d'autres systèmes de fichiers). Cela le corrige en supposant que les images du noyau sont au bon endroit, relisant votre message, je ne suis pas sûr que ce soit le cas. Inspectez votre partition / boot pour vous assurer que tous les noyaux et .img sont là. Vous avez peut-être écrasé votre linux initrd.img avec les initramfs de arch. Ouvrez des forums Ubuntu ou Askubuntu.
Three Diag

Comme je l'ai écrit, j'ai déjà exécuté le grub-mkconfig en vain, mais je vérifierai les images disponibles dans / boot quand je serai de retour à la maison. Et il existe des scripts os-prober.
Byte Commander

Désolé, j'ai raté ça. Ensuite, vous avez probablement écrasé votre noyau ubuntu et initrd avec ceux de l'archive. Vous pouvez les mettre en place en exécutant votre séquence de mise à niveau / mise à jour à partir du noyau de secours ubuntu (je pense)
Three Diag

Les noyaux Ubuntu devraient être corrects car je peux tous les démarrer à partir du menu "Options avancées pour Ubuntu". Si quelque chose ne va pas, ce pourrait être seulement le lien symbolique vers le noyau par défaut ... Je vais vérifier cela ce soir.
Byte Commander

0

Ma solution est plus simple. J'utilise le terminal et fais ce qui suit:

sudo rm /boot/grub/grub.cfg
sudo update-grub

Si vous rencontrez d'autres problèmes, utilisez simplement boot-repair, qui est un téléchargement gratuit, suffisamment petit pour être gravé sur un disque CD.


L'OP a déjà fonctionné update-grub. Il est très peu probable que la réparation de démarrage aide à résoudre ce problème particulier.
terdon

grub et certains processus de réparation ou de mise à jour du démarrage supposent que ce qui se trouve dans /boot/grub/grub.cfg est ctrrent et correct. Mais apportez des modifications, comme un reformatage de partition, vous obtenez un nouvel UUID, qui vous met dans grub-rescue> Pour y faire face, faites simplement ceci: sudo rm /boot/grub/grub.cfg; sudo update-grub. Toutes les entrées dans grub.cfg seront nouvelles et actuelles.
BAD-Boop

Oui, mais encore une fois, l'OP l'a déjà fait et cela n'a pas aidé. Je me rends compte que la question est grande et qu'elle est facile à manquer, mais qu'elle sudo grub-mkconfig -o /boot/grub/grub.cfgest là. update-grubest un script shell très simple qui s'exécute grub-mkconfig -o /boot/grub/grub.cfg . Vous pouvez le voir avec cat /usr/sbin/update-grub.
terdon
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.