
Ich habe zwei Festplatten mit zwei entsprechenden Grubs. Eine ist von Arch Linux und die andere von Ubuntu. Mit Archs Grub kann ich in jede Distribution booten. Mit Ubuntus Grub kann ich jedoch sowohl Arch als auch Ubuntu sehen, aber nicht in Arch booten. Ich erhalte die Fehlermeldung:
Kernel offset
End kernel panic. Not syncing: VFS.
Unable to mount root fs on unknown-block.
Ich habe grub.cfg
für beide Distributionen einen Vergleich durchgeführt. In Ubuntus Grub sehe ich einen Eintrag für Arch mit der folgenden Zeile.
initrd /boot/intel-ucode.img
Ich habe es geändert, damit es Archs entspricht grub.cfg
:
initrd /boot/intel-ucode.img /boot/initramfs-linux.img
Jetzt kann ich Arch von Ubuntus Grub aus booten. Es scheint, dass Ubuntu diese erforderliche Option standardmäßig nicht anfügt. Wie kann ich Ubuntu dazu bringen, automatisch den richtigen Eintrag zu erstellen?
Bearbeiten
Ich aktualisiere Archs Grub mit . In Ubuntu habe ich beides und den obigen Raw-Befehl (auf den es als Alias verweist) grub-mkconfig -o /boot/grub/grub.cfg
ausprobiert .update-grub
Bearbeiten 2
Die unkommentierten Zeilen von/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=""
Antwort1
Eigentlich müssen zwei Dateien geändert werden, um dieses Problem zu lösen. Ich habe dies auf meinem Lubuntu 16.04.1 und Manjaro Linux getestet.
Unter Ubuntu:
1) Datei/usr/lib/linux-boot-probes/mounted/40grub2 Es gibt eine Funktion parse_grub_menu, die nicht alle initrd-Parameter verarbeitet. Sie müssen 'Fall „$1“ in ... initrd)':
a) Zuordnung entfernen
initrd="$(echo "$2" ...)"
b) Fügen Sie anstelle der entfernten Zeile zwei weitere hinzu:
shift 1
initrd="$(echo "$@" | sed 's/(.*)//')"
2) Datei/etc/grub.d/30_os-prober innerhalb einer for-Schleife die Zuweisung von LINITRD korrigieren:
for LINUX in ${LINUXPROBED}; do
...
LINITRD="`echo ${LINUX} | cut -d ':' -f 5 | tr '^' ' '`"
Der erste Fix berücksichtigt alle verfügbaren Initrd-Informationen für Manjaro. Der zweite Fix bereinigt die generierte Initrd-Zeile, indem einige '^'-Zeichen in Leerzeichen geändert werden.
Antwort2
Ich verwende Manjaro und Arch, aber ironischerweise macht Manjaro einen ähnlichen Fehler wie Ubuntu. Vielleicht kann der folgende Patch in 30_os_prober also trotzdem jemandem helfen.
Nach:
LINITRD="`echo ${LINUX} | cut -d ':' -f 5 | tr '^' ' '`"
Hinzufügen:
if [ "${OS}" = "Arch Linux" ] ; then
LINITRD="/boot/intel-ucode.img ${LINITRD}"
fi
Antwort3
Es funktionierte, nachdem ich die grub.cfg
Datei bearbeitet und Folgendes ausgeführt hatte:
sudo update-grub
sudo grub.mkconfig