Dentro de los ordenadores portátiles, o laptops, existe un pequeño componente consumible, la pila de litio, que cambiarla puede llegar a ser un suplicio. No me refiero al hecho de quitar la gastada y poner otra como quien le cambia las pilas a un mando, sino a dos hechos unidos que a su vez te consumen a ti:
- desmontar la parte trasera del portátil.
- recuperar la parte del sistema que gestiona el arranque, el bootloader.
En este tutorial recopilo los pasos que he seguido para volver a habilitar el bootloader de Manjaro, una distribución basada en Arch Linux. El portátil es un Slimbook PROX14 que, por suerte, contiene la pila de litio debajo de la batería, por lo que el desmontaje no era complicado. Una vez cambiada la pila, vamos a seguir los pasos pero antes saber cuál era el síntoma:
error: symbol 'grub_memcpy' not found.
Entering rescue mode...
grub rescue>
y hasta aquí, no esperemos que venga nadie a rescatarnos. Hemos perdido la configuración UEFI y tenemos una partición raíz cifrada con LUKS. El workaround ha sido arrancar con un Manjaro instalado en un USB y elegir un bootloader de ese sistema, ubicado en la carpeta:
/boot/EFI/Manjaro
Recuperamos el bootloader
1. Arrancar con un Manjaro Live USB
Arranca el equipo desde un USB de Manjaro en modo UEFI. Este sistema se instaló con Balena Etcher.
Abrimos una terminal para seguir estos pasos.
2. Identificar las particiones
lsblk -f
Ejemplo típico:
Partición Tipo Uso Ruta
nvme0n1p1 vfat EFI /boot/efi
nvme0n1p2 crypto_LUKS Sistema cifrado /
3. Desbloquear la partición cifrada
sudo cryptsetup open /dev/nvme0n1p2 luksroot
Insertamos la contraseña de ese sistema cifrado y nos aparece si buscamos en:
ls -l /dev/mapper/
4. Montar el sistema
sudo mount /dev/mapper/luksroot /mnt
sudo mount /dev/nvme0n1p1 /mnt/boot/efi
No nos debería dar ningún error y si listamos el directorio /mnt, nos debería ir saliendo nuestro sistema nativo:
ls -l /mnt
5. Montar sistemas virtuales
Esta parte fue clave, lo obvié en un primer intento y no lo conseguí. Con esos pasos fue distinto y no salieron errores en los pasos posteriores.
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo mount --bind /run /mnt/run
6. Entrar en el sistema instalado mediante chroot
sudo chroot /mnt
7. Asegurar que EFI variables está montado
mount -t efivarfs efivarfs /sys/firmware/efi/efivars
8. Reinstalar GRUB limpio
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=Manjaro --recheck
El resultado de los pasos 7 y 8:
[manjaro /]# mount -t efivarfs efivarfs /sys/firmware/efi/efivars
[manjaro /]# grub-install \ --target=x86_64-efi \ --efi-directory=/boot/efi \ --bootloader-id=Manjaro \ --recheck
Installing for x86_64-efi platform.
Installation finished.
No error reported.
9. Regenerar la configuración de GRUB
grub-mkconfig -o /boot/grub/grub.cfg
10. Crear el fallback de arranque
En ese primer intento que comentaba en el paso 5, seguí los pasos que podrían darse para Arch Linux, pero al comprobar que Manjaro tiene su propio sistema, dupliqué algunas carpetas de /boot. Expongo el contenido de la carpeta /boot/efi/EFI:
[manjaro /]# ls -laR /boot/efi/EFI
/boot/efi/EFI: total 24
drwxr-xr-x 6 root root 4096 ene 8 10:27 .
drwxr-xr-x 4 root root 4096 ene 1 1970 ..
drwxr-xr-x 2 root root 4096 ago 14 2024 boot
drwxr-xr-x 4 root root 4096 ene 8 10:58 EFI
drwxr-xr-x 2 root root 4096 ene 8 10:25 GRUB
drwxr-xr-x 2 root root 4096 ago 14 2024 Manjaro
/boot/efi/EFI/boot: total 268
drwxr-xr-x 2 root root 4096 ago 14 2024 .
drwxr-xr-x 6 root root 4096 ene 8 10:27 ..
-rwxr-xr-x 1 root root 266240 sep 29 08:24 bootx64.efi
/boot/efi/EFI/EFI: total 16
drwxr-xr-x 4 root root 4096 ene 8 10:58 .
drwxr-xr-x 6 root root 4096 ene 8 10:27 ..
drwxr-xr-x 3 root root 4096 ene 8 10:58 EFI
drwxr-xr-x 2 root root 4096 ene 8 10:27 manjaro
/boot/efi/EFI/EFI/EFI: total 12
drwxr-xr-x 3 root root 4096 ene 8 10:58 .
drwxr-xr-x 4 root root 4096 ene 8 10:58 ..
drwxr-xr-x 2 root root 4096 ene 8 10:58 manjaro
/boot/efi/EFI/EFI/EFI/manjaro: total 164
drwxr-xr-x 2 root root 4096 ene 8 10:58 .
drwxr-xr-x 3 root root 4096 ene 8 10:58 ..
-rwxr-xr-x 1 root root 159744 ene 8 10:58 grubx64.efi
/boot/efi/EFI/EFI/manjaro: total 164
drwxr-xr-x 2 root root 4096 ene 8 10:27 .
drwxr-xr-x 4 root root 4096 ene 8 10:58 ..
-rwxr-xr-x 1 root root 159744 ene 8 10:27 grubx64.efi
/boot/efi/EFI/GRUB: total 164
drwxr-xr-x 2 root root 4096 ene 8 10:25 .
drwxr-xr-x 6 root root 4096 ene 8 10:27 ..
-rwxr-xr-x 1 root root 159744 ene 8 10:25 grubx64.efi
/boot/efi/EFI/Manjaro: total 344
drwxr-xr-x 2 root root 4096 ago 14 2024 .
drwxr-xr-x 6 root root 4096 ene 8 10:27 ..
-rwxr-xr-x 1 root root 344064 feb 8 21:32 grubx64.efi
Me centro en las importantes, /boot/efi/EFI/Manjaro y la del fallback, /boot/efi/EFI/boot. El resto las borraré después, en realidad son dos que contienen las otras 6. Copio el archivo grubx64.efi y lo sobrenombro en la ubicación de la fallback.
cp /boot/efi/EFI/Manjaro/grubx64.efi /boot/efi/EFI/boot/bootx64.efi
Aunque sería raro que no fuese así, aquí compruebo que los tamaños coinciden.
[manjaro /]# cp /boot/efi/EFI/Manjaro/grubx64.efi \ /boot/efi/EFI/boot/bootx64.efi
[manjaro /]# ls -l /boot/efi/EFI/boot/bootx64.efi
-rwxr-xr-x 1 root root 344064 feb 8 21:46 /boot/efi/EFI/boot/bootx64.efi
[manjaro /]# ls -l /boot/efi/EFI/Manjaro/grubx64.efi
-rwxr-xr-x 1 root root 344064 feb 8 21:32 /boot/efi/EFI/Manjaro/grubx64.efi
11. Salir y reiniciar
exit
sudo reboot
y extraímos el USB con el Manjaro Live.
Limpieza del GRUB y orden de arranque
Si todo ha ido bien y nuestro sistema nativo ha arrancado, procedemos a poner un poco de orden.
1. Ver entradas UEFI
Como comentaba en el paso 5 del bloque anterior, tenía más de dos carpetas en /boot por lo que decidí comprobar cuáles eran las mal copiadas. Con el siguiente comando, puedes ver el registro del arranque y decidir qué hacer con las carpetas redundantes. En mi caso, las moví a un backup y probé si todo iba bien, por lo que decidí borrarlas a posteriori.
sudo efibootmgr -v
El contenido:
BootCurrent: 0001 Timeout: 1 seconds
BootOrder: 0001,0000
Boot0000* Manjaro HD(1,GPT,73b40a30-b2a6-4754-a2c9-d97789fc433c,0x1000,0x96000)/\EFI\MANJARO\GRUBX64.EFI dp: 04 01 2a 00 01 00 00 00 00 10 00 00 00 00 00 00 00 60 09 00 00 00 00 00 30 0a b4 73 a6 b2 54 47 a2 c9 d9 77 89 fc 43 3c 02 02 / 04 04 36 00 5c 00 45 00 46 00 49 00 5c 00 4d 00 41 00 4e 00 4a 00 41 00 52 00 4f 00 5c 00 47 00 52 00 55 00 42 00 58 00 36 00 34 00 2e 00 45 00 46 00 49 00 00 00 / 7f ff 04 00
Boot0001* UEFI OS HD(1,GPT,73b40a30-b2a6-4754-a2c9-d97789fc433c,0x1000,0x96000)/\EFI\BOOT\BOOTX64.EFI0000424f dp: 04 01 2a 00 01 00 00 00 00 10 00 00 00 00 00 00 00 60 09 00 00 00 00 00 30 0a b4 73 a6 b2 54 47 a2 c9 d9 77 89 fc 43 3c 02 02 / 04 04 30 00 5c 00 45 00 46 00 49 00 5c 00 42 00 4f 00 4f 00 54 00 5c 00 42 00 4f 00 4f 00 54 00 58 00 36 00 34 00 2e 00 45 00 46 00 49 00 00 00 / 7f ff 04 00 data: 00 00 42 4f
Poner Manjaro como primera opción
sudo efibootmgr -o 0000,0001
El contenido:
➜ ~ sudo efibootmgr -o 0000,0001
BootCurrent: 0001 Timeout: 1 seconds BootOrder: 0000,0001
Boot0000* Manjaro HD(1,GPT,73b40a30-b2a6-4754-a2c9-d97789fc433c,0x1000,0x96000)/\EFI\MANJARO\GRUBX64.EFI
Boot0001* UEFI OS HD(1,GPT,73b40a30-b2a6-4754-a2c9-d97789fc433c,0x1000,0x96000)/\EFI\BOOT\BOOTX64.EFI0000424f
El arranque de Manjaro sería el primero y si falla, el fallback toma el testigo. Este último registro se podría eliminar con:
sudo efibootmgr -b 0001 -B
Pero mejor dejarlo así.
2. Limpiar copias antiguas (opcional)
sudo rm -rf /boot/efi/EFI/backup-EFI
sudo rm -rf /boot/efi/EFI/backup-GRUB
Y hasta aquí, he podido restaurar el sistema de arranque de Manjaro sin víctimas. Mis agradecimientos a Juanra, Alejandro y José Luis porque este tutorial es un compendio de todos sus consejos.
Foto: "Albion Low Loader Heavy Haulage 1951
by pschube is licensed with CC BY 2.0

Top comments (0)