Come posso avviare Arch Linux usando initramfs, nel grub di Ubuntu?


4

Ho due dischi rigidi, con due Grubs corrispondenti. Uno proviene da Arch Linux e l'altro da Ubuntu. Usando Arch's grub, posso avviare entrambe le distribuzioni. Tuttavia, usando 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.cfgper entrambe le distribuzioni. Nel grub di Ubuntu, posso vedere una voce per Arch, con la seguente riga.

initrd /boot/intel-ucode.img

L'ho cambiato per seguire Arch grub.cfg:

initrd /boot/intel-ucode.img /boot/initramfs-linux.img

Ora posso avviare Arch da grub di Ubuntu. Sembra che Ubuntu non stia aggiungendo questa opzione richiesta per impostazione predefinita. Come posso fare in modo che Ubuntu crei automaticamente la voce corretta?

modificare

Sto aggiornando il grub di Arch con grub-mkconfig -o /boot/grub/grub.cfg. In Ubuntu, ho provato entrambi update-grube il comando raw sopra (a cui è alias).

Modifica 2

Le linee 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=""

Hai provato con i comandi "update-grub" e "grub-mkconfig"?
Salehi,

@MasterPiece Sì, scusa, ho chiarito in una modifica.
Sparhawk,

update-grub2? È un po 'diverso. Credo che l'ultimo Ubuntu lo usi. Puoi anche inserire il tuo grub.cfg. Probabilmente hai solo bisogno di una voce per ArchLinux nella tua configurazione. Sono sorpreso che non sia stato rilevato automaticamente.
csgeek,

update-grub2è alias update-grub. In realtà vedo una voce Arch e viene rilevata; ha solo le impostazioni sbagliate. Chiarirò in una modifica.
Sparhawk,

Risposte:


2

In realtà, ci sono due file che devono essere modificati per risolvere questo problema. Ho provato questo sul mio Lubuntu 16.04.1 e Manjaro Linux.

In Ubuntu:

1) File / usr / lib / linux-boot-probes / montati / 40grub2 c'è 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 "$@" | sed 's/(.*)//')"

2) File /etc/grub.d/30_os-prober all'interno di un ciclo for risolve l'assegnazione di LINITRD:

for LINUX in ${LINUXPROBED}; do
...
    LINITRD="`echo ${LINUX} | cut -d ':' -f 5 | tr '^' ' '`"

La prima correzione tiene conto di tutte le informazioni di initrd disponibili per Manjaro. La seconda correzione pulisce la riga di initrd generata modificando alcuni caratteri '^' in spazi.



2

Gestisco Manjaro e Arch ma, ironia della sorte, Manjaro commetterà un errore simile a Ubuntu. Quindi forse la seguente patch in 30_os_prober può ancora aiutare qualcuno.

Dopo:

LINITRD="`echo ${LINUX} | cut -d ':' -f 5 | tr '^' ' '`"

Inserisci:

if [ "${OS}" = "Arch Linux" ] ; then
  LINITRD="/boot/intel-ucode.img ${LINITRD}"
fi

Ciao Naiky. Non sto più usando Ubuntu, né il dual boot, quindi non posso più provarlo. Grazie per la pubblicazione, e benvenuti a SE. +1 per i tuoi sforzi di iscrizione e pubblicazione!
Sparhawk,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.