Wie kann ich in Ubuntus Grub mit initramfs in Arch Linux booten?

Wie kann ich in Ubuntus Grub mit initramfs in Arch Linux booten?

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.cfgfü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.cfgausprobiert .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.cfgDatei bearbeitet und Folgendes ausgeführt hatte:

sudo update-grub
sudo grub.mkconfig

verwandte Informationen