Mám dva pevné disky se dvěma odpovídajícími Gruby. Jeden je z Arch Linuxu a druhý z Ubuntu. Pomocí Arch's grub mohu zavést obě distribuce. Pomocí grubu Ubuntu však vidím Arch i Ubuntu, ale nemohu spustit Arch. Dostávám chybu:
Kernel offset
End kernel panic. Not syncing: VFS.
Unable to mount root fs on unknown-block.
Porovnal jsem grub.cfg
pro obě distribuce. V grubu Ubuntu vidím záznam pro Arch s následujícím řádkem.
initrd /boot/intel-ucode.img
Změnil jsem to tak, aby odpovídalo Archovi grub.cfg
:
initrd /boot/intel-ucode.img /boot/initramfs-linux.img
Nyní mohu spustit Arch z grub Ubuntu. Zdá se, že Ubuntu ve výchozím nastavení tuto požadovanou možnost nepřipojuje. Jak mohu zajistit, aby Ubuntu automaticky vytvořilo správnou položku?
Upravit
Aktualizuji Archův grub pomocí grub-mkconfig -o /boot/grub/grub.cfg
. V Ubuntu jsem vyzkoušel oba update-grub
a výše uvedený raw příkaz (ke kterému je přiřazen alias).
Upravit 2
Nekomentované řádky /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=""
Přijatá odpověď:
Ve skutečnosti existují dva soubory, které je třeba upravit, aby se tento problém vyřešil. Testoval jsem to na svém Lubuntu 16.04.1 a Manjaro Linux.
V Ubuntu:
1) Soubor /usr/lib/linux-boot-probes/mounted/40grub2 existuje funkce parse_grub_menu, která nezpracovává všechny parametry initrd. Je třeba upravit „case „$1“ v … initrd) ‘:
a) odebrat přiřazení
initrd="$(echo "$2" ...)"
b) přidejte dva řádky místo odebraného:
shift 1
initrd="$(echo "[email protected]" | sed 's/(.*)//')"
2) Soubor /etc/grub.d/30_os-prober v rámci cyklu for opravte přiřazení LINITRD:
for LINUX in ${LINUXPROBED}; do
...
LINITRD="`echo ${LINUX} | cut -d ':' -f 5 | tr '^' ' '`"
První oprava bere v úvahu všechny dostupné initrd informace pro Manjaro. Druhá oprava vyčistí vygenerovaný řádek initrd změnou některých znaků „^“ na mezery.