efibootmgr en Debian
Que son el EFI y UEFI
EFI y UEFI son firmwares para controlar e inicializar el hardware de un ordenador antes de cargar el sistema operativo.
- EFI (Extensible Firmware Interface) es el firmware desarrollado por Intel, para mejorar y superar las limitaciones de la antigua BIOS, dispone de interfaz gráfica de usuario, con la posibilidad de usar ratón, con conexión a internet, dispone de sistema de arranque seguro (garantiza que solo puede arrancar, aquel sistema operativo que previamente hemos instalado).
- UEFI (Unified Extensible Firmware Interface) es un firmware mas moderno y actualizado, basado en EFI. Incluye: todas la novedades del EFI, pero con mejoras y mas seguridad.
En resumen, ambos son firmware, EFI fue el primero en actualizar la antigua BIOS y UEFI es la actualización que amplia y mejora al EFI. Actualmente, por defecto, las nuevas placas base incluyen el firmware UEFI por defecto.
NOTA: En este manual usaremos el termino EFI para referirnos tanto a firmwares EFI como UEFI, ya que el comando que usaremos se llama: efibootmgr, de esta manera es mas fácil recordar el nombre del comando.
Que es efibootmgr
efibootmgr es un programa que se usa desde la linea de comando para gestionar las entradas de arranque en sistemas que utilizan tanto el firmware EFI como el UEFI. Pudiendo: añadir, eliminar, modificar y reordenadar la lista de entradas del gestor de arranque EFI.
Observaciones para el comando efibootmgr: este comando soporta parámetros, y cada parámetro tiene la versión abreviada y la versión sin abreviar, es decir, el parámetro es el mismo, la única diferencia, es que la versión corta, generalmente es una sola letra y la versión larga, es una, dos o varias palabras.
Ejemplo real:
-c | --create: Crea una nueva variable bootnum y la agréga a bootorder
Instalación de efibootmgr
Como siempre hacemos en este blog, lo primero que tenemos que hacer es instalar el paquete: efibootmgr
apt install efibootmgr
1- Visualizar las entradas actuales del EFI
El primer comando que vamos a usar es:
sudo efibootmgr
Nos muestra todas las entradas, el orden de estas, el sistema de arranque por defecto, el tiempo de demora antes de arrancar, y mas detalles.
Nota muy importante: la primera línea de arranque comienza por: 0000 (numeración hexadecimal: del 0-9 y de la A-F)
BootCurrent: 0001
Timeout: 2 seconds
BootOrder: 0001,0002,0000
Boot0000* Windows Boot Manager
Boot0001* Debian GNU/Linux
Boot0002* Ubuntu
=============================
BootCurrent: 0001 > Es el sistema operativo que va a arrancar por defecto
Timeout: 2 seconds > Es el tiempo por defecto que espera antes de arrancar la línea BootCurrent
BootOrder: 0001,0002,0000 > Es el orden en el que aparecen los sistemas operativos que puede arrancar
Boot0000* Windows Boot Manager > Es la primera entrada a arrancar
Boot0001* Debian GNU/Linux > Es la segunda entrada a arrancar
Boot0002* Ubuntu > Es la tercera entrada a arrancar
1- Añadir una nueva entrada de arranque
Vamos añadir una nueva entrada a la lista de arranque EFI, para ello pasaremos los siguientes parámetros a efibootmgr:
-c | --create : para crear una nueva entrada
-d | --disk /dev/sdX: seguido por el disco en el que se aloja la partición EFI, sustituye la X por el numero del disco duro en el que se encuentra la partición EFI
-p | --part Y: seguido por el número de partición en la que se aloja la partición EFI sustituye la Y con el numero de la partición en la que se encuentra la partición EFI.
-L | --label: es la etiqueta (el nombre que vamos a visualizar en la lista de sistemas operativos) que vamos a utilizar como entrada de arranque
-l | --loader: Dependiendo del sistema operativo que tenemos instalado, tenemos que usar un cargador especifico. Aquí tenemos dos cargadores, uno para Debian y otro para Windows:
"\EFI\debian\grubx64.efi"
"\EFI\Microsoft\Boot\bootmgfw.efi"
- Información de como se genera la entrada en el EFI
sudo efibootmgr --create --disk /dev/sdX --part Y --loader "\EFI\debian\grubx64.efi" --label "Debian"
sudo efibootmgr -c -d /dev/sdX -p Y -l "\EFI\debian\grubx64.efi" -L "Debian"
- Ejemplo real de como se genera la entrada en el EFI
sudo efibootmgr -c -d /dev/sda -p 3 -l "\EFI\"label"\grubx64.efi" -L "Debian"
sudo efibootmgr -c -d /dev/sda -p 2 -l "\EFI\Microsoft\Boot\bootmgfw.efi" -L "Windows 10"
Muy Importante 1:
=========================================================
La ruta de la imagen de arranque EFI debe usar barra invertida (\), en lugar de la barra diagonal (/), como separador de ruta.
Muy Importante 2: Si la partición de arranque ESP fue creada por Debian, la ruta es: \EFI\debian\grubx64.efi. Y si es creada por otro sistema operativo linux, se le cambia el nombre: debian por el nombre del otro sistema operativo linux. Y si es creada por un sistema operativo de microsoft la ruta es: \EFI\Microsoft\Boot\bootmgfw.efi
2- Cambiar el orden de arranque:
Primero vemos el orden actual, usando el siguiente comando:
sudo efibootmgr
Nos devuelve el orden actual (Esto es un ejemplo):
===============================================
[root@localhost ~]# efibootmgr
BootCurrent: 0004
BootNext: 0003
BootOrder: 0004,0000,0001,0002,0003
Timeout: 30 seconds
Boot0000* Diskette Drive(device:0)
Boot0001* CD-ROM Drive(device:FF)
Boot0002* Hard Drive(Device:80)/HD(Part1,Sig00112233)
Boot0003* PXE Boot: MAC(00D0B7C15D91)
Boot0004* Linux
================================================
Ahora reordenamos según nuestras necesidades, usando el parámetro: -o | --bootorder (cualquiera de los tres métodos de abajo son validos)
sudo efibootmgr --bootorder 0004,0000,0001,0002,0003
sudo efibootmgr -o 0000,0001,0002,0003,0004
sudo efibootmgr -o 0,1,2,3,4
3- Eliminar una entrada de arranque:
Para borrar / eliminar una entrada de la lista de arranque, usamos los parámetros:
-b | --bootnum = borra la entrada seleccionada
-B | --delete-bootnum = borra la entrada de la lista bootorder
El orden de los parámetros es indiferente, pero tienen que estar presentes ambos parámetros en caso contrario, No borrará / eliminará ninguna entrada, y nos devolverá un error, nos dirá que no sabe cual tiene que eliminar.
Muy importante:
===========================================================
- Asegúrate de seleccionar realmente el número de boot que quieres eliminar: XXXX
- Los cambios son inmediatos (no requiere confirmación adicional)
- El firmware UEFi actualiza la NVRAM automáticamente, con lo cual se borra directamente
===========================================================
(cualquiera de los tres métodos de abajo son validos)
sudo efibootmgr --delete-bootnum --bootnum 0003
sudo efibootmgr -b 0003 -B
sudo efibootmgr -B -b 0003
4- Especificar una entrada activa o desactiva
Una entrada de inicio seguida de un asterisco (Boot0001*) indica que está activo. En caso contrario, está inactivo (Boot0001).
Para establecer una entrada de arranque activa, usaremos los siguientes parámetros:
-b | --bootnum = indica el numero de la entrada
-a | --active = activar la entrada
sudo efibootmgr --bootnum 0003 --active
sudo efibootmgr -b 0003 -a
Para establecer una entrada de arranque inactiva, usaremos los siguientes parámetros:
-b | --bootnum = indica el numero de la entrada
-A | --inactive = desactivar la entrada
sudo efibootmgr --bootnum 0003
sudo efibootmgr -b 0003 --inactive
Ejemplo:
===============================================
[root@localhost ~]# efibootmgr
BootCurrent: 0004
BootNext: 0003
BootOrder: 0004,0000,0001,0002,0003
Timeout: 30 seconds
Boot0000* Diskette Drive(device:0)
Boot0001* CD-ROM Drive(device:FF)
Boot0002* Hard Drive(Device:80)/HD(Part1,Sig00112233)
Boot0003* PXE Boot: MAC(00D0B7C15D91)
Boot0004* Linux
Boot0005 Windows
================================================
5- Habilitar arranque seguro (Secure Boot)
Para habilitar el Secure Boot, normalmente se tiene que hacer desde la configuración del firmware EFI/UEFI del ordenador, el método correcto consiste en reiniciar el ordenador para acceder a la configuración del firmware EFI/UEFI, localizar la opción de Arranque seguro en la pestaña "Seguridad" o "Arranque" y configurarla como "Habilitado". También se tiene que desactivar el CSM (Módulo de Soporte de Compatibilidad) o modo de arranque "Legacy" a modo "UEFI".
Para acceder al EFI / UEFI, en el siguiente reinicio del ordenador lo más fácil es usar el siguiente comando:
sudo systemctl reboot --firmware-setup
Si quieres gestionar las opciones del Secure Boot sin necesidad de acceder al firmware EFI/UEFI, podemos usar el programa: mokutil, que permite activar y descativar el secure boot, y configuraciones relacionadas con claves de arranque en sistemas Linux.
Interfaz gráfica de usuario para efibootmgr
Ahora vamos a usar una interfaz gráfica para efiibootmgr que he encontrado en github. (No me hago responsable del uso de este programa, que es totalmente ajeno a este blog. Lo encontré en github, y lo informo aquí por si alguien lo quiere usar)
En Debian GNU/Linux, tenemos que instalar las siguientes dependencias:
sudo apt install efibootmgr python3
No todas las distribuciones instalan pyhton-gobject automáticamente con Python3, pero es necesario para ejecutar este script.
python3 efibootmgr_gui.py
# that should be the same as
./efibootmgr_gui.py
Nota muy importante: Este programa asume que la Partición del Sistema EFI (ESP) está montada en: /boot/efi
Sin embargo, puede usar --efi=/dev/sdXX (por ejemplo: sda1) para especificar manualmente su Partición del Sistema EFI (ESP).
Información sacada de github:
https://github.com/Swaphelaer/efibootmgr-gui/tree/master
No hay comentarios:
Publicar un comentario