Tengo dos discos duros, con dos Grubs correspondientes. Uno es de Arch Linux y el otro es de Ubuntu. Usando el grub de Arch, puedo iniciar cualquier distribución. Sin embargo, al usar el grub de Ubuntu, puedo ver Arch y Ubuntu, pero no puedo iniciar Arch. Me sale el error:
Kernel offset
End kernel panic. Not syncing: VFS.
Unable to mount root fs on unknown-block.
Comparé grub.cfg
para ambas distribuciones. En el grub de Ubuntu, puedo ver una entrada para Arch, con la siguiente línea.
initrd /boot/intel-ucode.img
Lo cambié para seguir el grub.cfg
de Arch. :
initrd /boot/intel-ucode.img /boot/initramfs-linux.img
Ahora puedo iniciar Arch desde el grub de Ubuntu. Parece que Ubuntu no agrega esta opción requerida de manera predeterminada. ¿Cómo puedo hacer que Ubuntu cree automáticamente la entrada correcta?
Editar
Estoy actualizando el grub de Arch con grub-mkconfig -o /boot/grub/grub.cfg
. En Ubuntu, probé tanto update-grub
y el comando sin formato anterior (al que se le asigna un alias).
Editar 2
Las líneas no comentadas de /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=""
Respuesta aceptada:
En realidad, hay dos archivos que deben modificarse para resolver este problema. He probado esto en mi Lubuntu 16.04.1 y Manjaro Linux.
En Ubuntu:
1) Archivo /usr/lib/linux-boot-probes/mounted/40grub2 hay una función parse_grub_menu que no maneja todos los parámetros de initrd. Debe modificar 'caso "$1" en... initrd) ':
a) eliminar asignación
initrd="$(echo "$2" ...)"
b) agregue dos líneas en lugar de la eliminada:
shift 1
initrd="$(echo "[email protected]" | sed 's/(.*)//')"
2) Archivo /etc/grub.d/30_os-prober dentro de un ciclo for corrige la asignación de LINITRD:
for LINUX in ${LINUXPROBED}; do
...
LINITRD="`echo ${LINUX} | cut -d ':' -f 5 | tr '^' ' '`"
La primera solución tiene en cuenta toda la información initrd disponible para Manjaro. La segunda solución limpia la línea initrd generada cambiando algunos caracteres '^' a espacios.