J'ai deux disques durs, avec deux Grubs correspondants. L'un vient d'Arch Linux et l'autre d'Ubuntu. En utilisant le grub d'Arch, je peux démarrer dans l'une ou l'autre des distributions. Cependant, en utilisant le grub d'Ubuntu, je peux voir à la fois Arch et Ubuntu, mais je ne peux pas démarrer dans Arch. J'obtiens l'erreur :
Kernel offset
End kernel panic. Not syncing: VFS.
Unable to mount root fs on unknown-block.
J'ai comparé grub.cfg
pour les deux distributions. Dans le grub d'Ubuntu, je peux voir une entrée pour Arch, avec la ligne suivante.
initrd /boot/intel-ucode.img
Je l'ai changé pour suivre le grub.cfg
d'Arch :
initrd /boot/intel-ucode.img /boot/initramfs-linux.img
Maintenant, je peux démarrer Arch à partir du grub d'Ubuntu. Il semble qu'Ubuntu n'ajoute pas cette option requise par défaut. Comment puis-je faire en sorte qu'Ubuntu crée automatiquement l'entrée correcte ?
Modifier
Je mets à jour le grub d'Arch avec grub-mkconfig -o /boot/grub/grub.cfg
. Dans Ubuntu, j'ai essayé à la fois update-grub
et la commande brute ci-dessus (dont elle est un alias).
Modifier 2
Les lignes non commentées de /etc/default/grub
GRUB_DEFAULT="saved"
GRUB_SAVEDEFAULT="true"
GRUB_HIDDEN_TIMEOUT_QUIET="true"
GRUB_TIMEOUT="3"
GRUB_DISTRIBUTOR="`lsb_release -i -s 2> /dev/null || echo Debian`"
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX=""
Réponse acceptée :
En fait, il y a deux fichiers qui doivent être modifiés pour résoudre ce problème. J'ai testé cela sur mon Lubuntu 16.04.1 et Manjaro Linux.
Sous Ubuntu :
1) Fichier /usr/lib/linux-boot-probes/mount/40grub2 il existe une fonction parse_grub_menu qui ne gère pas tous les paramètres initrd. Vous devez modifier 'cas "$1" dans ... initrd) ' :
a) supprimer l'attribution
initrd="$(echo "$2" ...)"
b) ajouter deux lignes à la place de celle supprimée :
shift 1
initrd="$(echo "[email protected]" | sed 's/(.*)//')"
2) Fichier /etc/grub.d/30_os-prober dans une boucle for, corrigez l'affectation de LINITRD :
for LINUX in ${LINUXPROBED}; do
...
LINITRD="`echo ${LINUX} | cut -d ':' -f 5 | tr '^' ' '`"
Le premier correctif prend en compte toutes les informations initrd disponibles pour Manjaro. Le deuxième correctif nettoie la ligne initrd générée en remplaçant certains caractères '^' par des espaces.