GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Come avviare Arch Linux usando Initramfs, in Grub di Ubuntu?

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.


Ubuntu
  1. Ubuntu:come impedire a Grub di utilizzare/avviare qualsiasi interfaccia utente grafica?

  2. Come avviare in rete Pxe Ubuntu Server 14.04 utilizzando Nfs?

  3. Come eseguire il dual boot di Ubuntu e Linux Mint?

  4. Come avviare in modalità console (testo) con Debian/Ubuntu, Fedora, Arch Linux/Manjaro e altro

  5. Come avviare Ubuntu in modalità di ripristino

Come aggiornare Grub su Ubuntu e altre distribuzioni Linux

Come installare il browser Web Falkon su Ubuntu Linux

Come creare un file in Ubuntu Linux usando comando e GUI

Come avviare in modalità di salvataggio o in modalità di emergenza in Ubuntu 20.04 / 18.04

Come avviare in modalità di salvataggio o in modalità di emergenza in Ubuntu

Come installare WordPress usando Nginx in Ubuntu Linux