Ho due dischi rigidi, con due Grub corrispondenti. Uno è di Arch Linux e l'altro è di Ubuntu. Usando il grub di Arch, posso avviare entrambe le distribuzioni. Tuttavia, usando il grub di Ubuntu, posso vedere sia Arch che Ubuntu, ma non riesco ad avviare Arch. Ottengo l'errore:
Kernel offset
End kernel panic. Not syncing: VFS.
Unable to mount root fs on unknown-block.
Ho confrontato grub.cfg
per entrambe le distribuzioni. Nel grub di Ubuntu, posso vedere una voce per Arch, con la seguente riga.
initrd /boot/intel-ucode.img
L'ho modificato per seguire grub.cfg
di Arch :
initrd /boot/intel-ucode.img /boot/initramfs-linux.img
Ora posso avviare Arch da grub di Ubuntu. Sembra che Ubuntu non aggiunga questa opzione richiesta per impostazione predefinita. Come posso fare in modo che Ubuntu crei automaticamente la voce corretta?
Modifica
Sto aggiornando il grub di Arch con grub-mkconfig -o /boot/grub/grub.cfg
. In Ubuntu, ho provato entrambi update-grub
e il comando raw sopra (a cui è alias).
Modifica 2
Le righe non commentate di /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=""
Risposta accettata:
In realtà, ci sono due file che devono essere modificati per risolvere questo problema. L'ho testato sul mio Lubuntu 16.04.1 e Manjaro Linux.
In Ubuntu:
1) File /usr/lib/linux-boot-probes/mount/40grub2 esiste una funzione parse_grub_menu che non gestisce tutti i parametri initrd. Devi modificare 'case “$1” in … initrd) ':
a) rimuovere l'incarico
initrd="$(echo "$2" ...)"
b) aggiungere due righe al posto di quella rimossa:
shift 1
initrd="$(echo "[email protected]" | sed 's/(.*)//')"
2) File /etc/grub.d/30_os-prober all'interno di un ciclo for correggi l'assegnazione di LINITRD:
for LINUX in ${LINUXPROBED}; do
...
LINITRD="`echo ${LINUX} | cut -d ':' -f 5 | tr '^' ' '`"
La prima correzione prende in considerazione tutte le informazioni initrd disponibili per Manjaro. La seconda correzione pulisce la riga initrd generata cambiando alcuni caratteri '^' in spazi.