Grub Rescue de x86_64 a i386
Hacer cambios de una unidad de almacenamiento ya sea un disco duro, o un disco de estado solido con un sistema operativo instalado puede causar algunos inconvenientes, puesto que los equipos pueden contar con una diferencia de fabricación y en como acceden al sistema operetivo. Teniendo esto presente se tiene un SSD con un sistema linux EFI/UEFI y al migrar a otro equipo que solo conoce BIOS se presenta el inconveniete a continuación:
Al arrancar el sistema aparece el tedioso mensaje Grub Rescue después de transladar un disco de una máquina a otra.
ls
> (hd0), (hd0,msdos3), (hd0,msdos2), (hd0,msdos3)
Al usar ‘ls’ podemos ver unas particiones, significa que se presenta la oportunidad de recuperar nuestro sistema. Podemos hacer ‘ls’ para ver en las diferentes particiones su contenido, debemos hacerlo hasta encontrar nuestra raíz de sistema.
ls (hd0,msdos3)/
Hacer esto permite ver nuestra raíz de archivos linux instalados en el disco, y buscando entre los directorios encontramos
ls (hd0,msdos3)/boot/grub
Algunas publicaciones sugieren hacer
isnmod normal
Pero hacer esto solo reproduce el error:
File '/boot/grub/i386-pc/normal.mod' not found
Pero no hay más información respecto a que hacer en caso del error. Esto se debe a que la configuración de GRUB se vió afectada al mover la unidad del disco a una máquina diferente, y al inspeccionar el sistema de archivos con ls (hd0,msdos3)
, se pudo ver la carpeta /boot/grub, pero no existía la subcarpeta i386-pc
. En su lugar, se encontro x86_64-pc
con los módulos .mod correspondientes.
Solución al GRUB Rescue
Dado que el sistema usa GRUB en su versión de 64 bits, la solución consiste en apuntar a la ruta correcta de los módulos.
Configurar la raíz y el prefijo de GRUB
Ejectura los siguientes comandos para asegurar que GRUB esté apuntando al lugar correcto con:
set root=(hd0,msdos3)
set prefix=(hd0,msdos2)/boot/grub/x86_64-pc
Cargar el módulo normal
insmod (hd0,msdos3)/boot/grub/x86_64-pc/normal.mod
Y si el comando se ejecuta sin errores, se debe escribir
normal
Y así se debería llegar al menu GRUB normal.
Arrancar el sistema manualmente
Si el menú de GRUB no aparece, se puede intentar arrancar el kernel manualmente:
linux (hd0,msdos3)/boot/vmlinux-linux root=/dev/sda3 ro
initrd (hd0,msdos3)/boot/initramfs-linux.img
boot
Si el comando linux
no es reconocido, significa que GRUB sigue en modo de rescate, por lo que tenemos que reinstalar el GRUB.
Solución desde un Live USB
Si los pasos anteriores no funcionan, la mejor opción es arrancar desde un Live USB de Arch Linux y reinstalar GRUB:
Montar la partición root
sudo mount /dev/sda3 /mnt
# Si hay una partición /boot separada, móntala también:
sudo mount /dev/sda1 /mnt/boot
Preparar el entorno chroot
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo chroot /mnt
Reinstalar GRUB
grub-install /dev/sda
# Actualizar la configuración de GRUB:
grub-mkconfig -o /boot/grub/grub.cfg
Salir del chroot y reiniciar
exit
sudo umount /mnt/dev /mnt/proc /mnt/sys /mnt
sudo reboot
Conclusión
Este problema ocurrió porque el sistema tenía GRUB de 64 bits, pero GRUB buscaba archivos en la carpeta incorrecta (i386-pc en lugar de x86_64-pc). Ajustando la ruta correctamente en grub rescue, fue posible recuperar el sistema.
Sin embargo, para evitar futuros inconvenientes, se recomienda reinstalar GRUB desde un entorno Live USB.
Esta publicación ha sido creada como soporte en mi formación académica y crecimiento profesional.
© Juan David Garcia Acevedo (aka liandd)