
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 grub de Ubuntu, puedo ver tanto Arch como Ubuntu, pero no puedo iniciar Arch. Recibo el error:
Kernel offset
End kernel panic. Not syncing: VFS.
Unable to mount root fs on unknown-block.
Comparé grub.cfg
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 de Arch grub.cfg
:
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 forma 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é ambos update-grub
y el comando sin formato anterior (al que tiene 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=""
Respuesta1
En realidad, hay dos archivos que deben modificarse para solucionar este problema. Probé esto en mi Lubuntu 16.04.1 y Manjaro Linux.
En Ubuntu:
1) Archivo/usr/lib/linux-boot-probes/montado/40grub2 hay una función parse_grub_menu que no maneja todos los parámetros initrd. Necesitas modificar 'caso "$1" en ... initrd)':
a) eliminar la asignación
initrd="$(echo "$2" ...)"
b) agregar dos líneas en lugar de la eliminada:
shift 1
initrd="$(echo "$@" | sed 's/(.*)//')"
2) Archivo/etc/grub.d/30_os-prober dentro de un bucle 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 inicial disponible para Manjaro. La segunda solución limpia la línea initrd generada cambiando algunos caracteres '^' a espacios.
Respuesta2
Estoy ejecutando Manjaro y Arch pero, irónicamente, Manjaro cometerá un error similar al de Ubuntu. Entonces, quizás el siguiente parche en 30_os_prober aún pueda ayudar a alguien.
Después:
LINITRD="`echo ${LINUX} | cut -d ':' -f 5 | tr '^' ' '`"
Agregar:
if [ "${OS}" = "Arch Linux" ] ; then
LINITRD="/boot/intel-ucode.img ${LINITRD}"
fi
Respuesta3
Funcionó después de editar el grub.cfg
archivo y ejecutar:
sudo update-grub
sudo grub.mkconfig