Entendiendo UEFI¶
3. Gestión del registro de arranque UEFI (NVRAM)¶
Como hemos visto anteriormente, la NVRAM es una memoria, normalmente integrada en la placa base y de naturaleza no volátil, que almacena las entradas de arranque (boot entries).
Cuando se instala un sistema operativo, este crea una entrada en la NVRAM que le indica al firmware UEFI lo siguiente:
- Ruta del cargador de arranque (
.efidentro de la ESP). - Nombre de la entrada que aparecerá en el menú de arranque.
La gestión de la NVRAM se centra en manipular esa lista de entradas para poder añadir, eliminar y reordenar estos registros permitiendo al usuario controlar el arranque de sus sistemas sin necesidad de reinstalarlos.
Este capítulo se enfoca en el uso de las herramientas más comunes para este fin, tanto dentro del mundo Windows como del mundo GNU/Linux.
%%{init: {'theme': 'base', 'themeVariables': { 'fontSize': '14px', 'fontFamily': 'Inter'}}}%%
flowchart TD
%% Nodos verticales con información interna
NVRAM["
<b>NVRAM</b> (Boot Entries)<hr><div style='text-align: left; padding-left: 10px; line-height: 1.8' >Boot0001: Windows
Boot0002: GNU/Linux</div>
"]
ESP["""<div style='width:240px; text-align:center; line-height:1.2; margin:0; padding:2px;'><b>ESP (EFI System Partition)</b>
<hr style='margin: 4px'><div style='text-align: left; padding-left: 10px; padding-top: 5px; line-height: 1.8'>/EFI/BOOT/BOOTX64.EFI
/EFI/Microsoft/Boot/bootmgfw.efi
/EFI/ubuntu/grubx64.efi
</div>
</div>"""]
BOOT["<b>Bootloaders</b> (.efi files)<hr><div style='text-align: left; padding-left: 10px; line-height: 1.8' >Windows Boot Manager
GRUB2
Shim</div>"]
FALLBACK["<b>Fallback</b> (.efi file)<hr><div style='text-align: left; padding-left: 10px; line-height: 1.8' >\EFI\BOOT\bootx64.efi
</div>"]
OS["<b>Sistema Operativo</b><hr><div style='text-align: left; padding-left: 10px; line-height: 1.8' >Windows
Linux</div>"]
%% Conexiones con etiquetas
NVRAM -->|Apunta a| ESP
ESP -->|Contiene| BOOT
BOOT -->|Inicia| OS
ESP -->|Si no hay entradas válidas| FALLBACK
FALLBACK -->|Arranca| OS
%% Estilo minimalista y monocromo
classDef default fill:#eeeeee,stroke:#333,stroke-width:1px; font-size: 10px
3.1 Herramientas de gestión en sistemas modernos¶
La mayoría de los firmware UEFI permiten gestionar de una manera limitada las entradas de la NVRAM desde el propio setup de la BIOS, por ejemplo, para cambiar el orden de arranque o deshabilitar alguna entrada. Los sistemas operativos modernos disponen además de herramientas en línea de comandos que permiten un control mucho más exhaustivo, preciso y flexible sobre las rutas y nombres de entradas, lo cual es esencial para una configuración precisa y un diagnóstico efectivo.
Las dos herramientas que abordaremos en detalle son:
bcdedit(en Windows): Herramienta originalmente concebida para la configuración de arranque de los sistemas Windows que hubiera en una máquina, pero extendida para gestionar la NVRAM.efibootmgr(en GNU/Linux): simple y potente herramienta de código abierto que permite la interacción con las entradas almacenadas en la NVRAM.
3.1.1 bcdedit en Windows¶
bcdedit (Boot Configuration Data Editor) es una herramienta de línea de comandos incluida en Windows que permite
gestionar las configuraciones de arranque del sistema. Permite interactuar tanto con el BCD
(Boot Configuration Data) (Su función principal), como con las entradas registradas en la
NVRAM (una función
secundaria, pero muy útil, pues cubre la mayoría de necesidades habituales).
3.1.1.1 BCD vs NVRAM: Dos capas de arranque diferentes¶
Ya que bcdedit trabaja sobre el BCD y sobre la NVRAM, conviene aclarar la diferencia entre ambas capas:
-
BCD es una base de datos (normalmente el archivo
\EFI\Microsoft\Boot\BCD) que contienen la configuración de arranque específica de Windows. Habitualmente incluye dos tipos de entradas:- Cargadores de SO: Detallan las opciones y los parámetros para iniciar los sistemas operativos Windows (ubicación del kernel, opciones de depuración, información sobre el entorno donde se ejecuta, etc.).
- Representaciones de Firmware: Entradas especiales para reflejar o sincronizar el contenido de la NVRAM dentro del propio Windows.
3.1.1.2 La acción de bcdedit¶
bcdedit permite gestionar ambas capas por separado:
- Gestión del BCD: Crear, modificar y eliminar entradas relacionadas con los cargadores de arranque de Windows.
No es el foco principal de este manual
Ya que el tema que nos ocupa principalmente es lo relacionado con
UEFI, no se profundiza en el uso de bcdedit para
gestionar el BCD.
- Gestión de la NVRAM: Consultar y modificar las entradas de arranque almacenadas en la NVRAM del firmware UEFI (especialmente el orden de arranque).
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#ffffff', 'lineColor': '#666', 'fontSize': '14px', 'fontFamily': 'Inter'}}}%%
graph TD
%% Nodo NVRAM
NVRAM["<b>NVRAM</b> (Entradas UEFI)<hr><div style='text-align: left; padding-left: 10px; line-height: 1.6; width:225px'><b>Boot0000</b>: Windows Boot Manager<br><b>Boot0001</b>: MemTest<br><b>Boot0002</b>: Linux / Otra entrada</div>"]
%% Nodo Boot Manager
BOOT["""<div style='width:240px; text-align:center; line-height:1.2; margin:0; padding:2px;'><b>Windows Boot Manager (.efi)</b><hr style='margin:4px'>Lee BCD y presenta opciones de arranque</div>"""]
%% Opciones del BCD como nodos paralelos
OPCION1["Winload.efi<br>(Windows)"]
OPCION2["winresume.efi<br>(Reanudación de Windows)"]
OPCION3["memtest.exe<br>(MemTest)"]
OPCION4["grubx64.efi / Otra EFI<br>(Linux u otra herramienta)"]
%% Convergencia final
OS["<b>Sistema operativo / utilidad</b><hr>Windows, Linux o MemTest"]
%% Conexiones con texto
NVRAM -->|Arranca <b>BOOT0000</b>| BOOT
BOOT -->|Entrada <b>BCD 1</b>| OPCION1
BOOT -->|Entrada <b>BCD 2</b>| OPCION2
BOOT -->|Entrada <b>BCD 3</b>| OPCION3
BOOT -->|Entrada <b>BCD 4</b>| OPCION4
OPCION1 -->|Arranca|OS
OPCION2 -->|Arranca|OS
OPCION3 -->|Arranca|OS
OPCION4 -->|Arranca|OS
%% Estilo minimalista y monocromo
classDef default fill:#eeeeee,stroke:#333,stroke-width:1px; font-size: 10px
Windows Boot Manager NO arranca cualquier .efi
A diferencia de firmware UEFI, el Windows Boot Manager no está diseñado para arrancar cualquier
archivo .efi arbitrario. Solo puede iniciar los cargadores de arranque específicos de Windows (como winload.efi),
algunas herramientas de diagnóstico proporcionadas por Microsoft (como memtest.exe) y herramientas específicamente
diseñadas para Windows Boot Manager.
Lo expuesto arriba es el modelo teórico de cómo funciona bcdedit y el BCD en relación con la NVRAM, pero en
la práctica, en el BCD solo deben registrarse entradas relacionadas con Windows y sus herramientas oficiales, es
decir, ese grubx64.efi que arrancaría un SO GNU/Linux, no funcionará a priori si se intenta iniciar a través
del BCD.
3.1.1.3 Uso de bcdedit¶
bcdedit debe ejecutarse con privilegios de administrador desde una ventana de PowerShell o Símbolo del sistema.
Su forma de uso general es:
Donde /command es la acción que se desea realizar (como /enum, /set, /delete, etc.) y [opciones] son los
parámetros específicos para esa acción. (En la sección 3.2 se detallan algunas de estas operaciones).
Obtener ayuda sobre bcdedit
Para obtener una lista completa de comandos y opciones disponibles en bcdedit, se puede ejecutar:
Documentación oficial de bcdedit (Windows 11)
Para más detalles sobre bcdedit, se puede consultar la documentación oficial de Microsoft:
Microsoft Docs
3.1.2 efibootmgr en GNU/Linux¶
efibootmgr es una herramienta de línea de comandos que permite gestionar las entradas de arranque
almacenadas directamente en la NVRAM del firmware UEFI. Es la utilidad nativa y estándar para este fin en la
mayoría de las distribuciones GNU/Linux.
Debe ejecutarse con privilegios de superusuario (usando sudo o como root) desde una terminal.
Su forma de uso general es:
A diferencia de bcdedit (que trabaja sobre el BCD), efibootmgr interactúa de forma directa y minimalista con la
capa de firmware para consultar y manipular los registros de arranque.
Pero antes de ver las operaciones más comunes, es importante entender que efibootmgr trabaja sobre lo que se conoce
como variables EFI (EFI_VARS):
3.1.2.1 Variables EFI (EFI_VARS)¶
En sistemas UEFI la configuración del arranque, las entradas registradas y otras opciones del firmware se
almacenan como variables EFI en la NVRAM. Estas variables son accesibles desde el sistema operativo mediante
un sistema de archivos virtual montado en GNU/Linux llamado efivarfs o efivars.
- Cada variable EIF tiene un nombre y un valor (es una clave identificador/valor).
- Algunas variables importantes a modo de ejemplo:
BootOrder: Contiene el orden de prioridad de las entradas de arranque.BootXXXX: DondeXXXXes un número hexadecimal que identifica cada entrada de arranque individual.Timeout: Define el tiempo de espera antes de arrancar la entrada por defecto.BootCurrent: Indica la entrada que se está utilizando actualmente para arrancar.BootNext: Permite especificar una entrada de arranque para la próxima vez que se inicie el sistema.
Estas variables corresponden directamente a lo que efibootmgr lee y modifica.
3.1.2.2 Partición efivars¶
Las variables EFI se exponen al sistema operativo a través de un sistema de archivos virtual llamado efivars.
Para que efibootmgr funcione correctamente, es necesario que este sistema de archivos esté montado en el sistema.
Montaje de efivars
En la mayoría de las distribuciones modernas, el sistema de archivos efivars se monta automáticamente al
iniciar el sistema.
Si por alguna razón no está montado, se puede montar manualmente con el siguiente comando:
Y si se quiere comprobar si está montado:
Al tratarse de un sistema de archivos virtual, no ocupa espacio en disco y no es persistente entre reinicios, pero se puede usar para interactuar con las variables EFI desde el sistema operativo. Por ejemplo:
Se pueden listar las variables EFI:
Ver el contenido de una variable específica:
Modificar variables EFI directamente
Aunque es posible modificar las variables EFI directamente a través del sistema de archivos efivarfs, no es
recomendable hacerlo manualmente, ya que un error podría corromper la configuración del firmware y hacer que el
sistema no arranque correctamente. Es preferible usar herramientas como efibootmgr para gestionar estas variables
de forma segura.
3.1.2.3 Copia de seguridad de la NVRAM¶
Antes de realizar cambios en las entradas de arranque, es recomendable hacer una copia de seguridad de las variables EFI.
Primero, se extrae un backup textual de las entradas con efibootmgr:
Esto guarda todas las entradas de arranque (Boot IDs, etiquetas y rutas .efi) en un archivo legible.
Ventaja del backup textual
- Permite restaurar las entradas de forma segura usando
efibootmgr. - Sirve como registro de configuración antes de cambios importantes.
- Es independiente de la distribución y no requiere manipular directamente efivars.
En caso de necesitar restaurar las entradas, se pueden usar los datos del archivo de backup para recrearlas con
efibootmgr. Mira más adelantes en la sección 3.2.3.2 para ver cómo crear nuevas
entradas y en la sección 3.2.2.2 para ver cómo modificar el orden de arranque.
3.2 Operaciones fundamentales en la NVRAM¶
A continuación, se describen algunas de las operaciones más comunes que se pueden realizar con bcdedit y efibootmgr.
Diferencias clave entre Powershell y CMD para entender los ejemplos
Cuando se ejecuta un comando en Windows es importante tener claro que PowerShell y el Símbolo del sistema (CMD) tienen diferente manera de interpretar los comandos y sus parámetros.
-
CMD: Espera el nombre del comando seguido de una cadena con los parámetros que le hagan falta. Así, CMD pasa esta cadena tal cual al programa que se ejecuta y este se encarga de parsearla.
-
Powershell: Analiza los argumentos de manera independiente y se los va pasando al programa, por ejemplo, los corchetes
[]y llaves{}tienen un significado especial y deben escaparse si se quieren usar literalmente.
La sintaxis que se emplea en este documento está adaptada para Powershell de manera que se añaden comillas
dobles " alrededor de los parámetros que contienen caracteres especiales. Estas comillas no son necesarias en
CMD.
3.2.1 Visualizar las entradas de arranque existentes¶
Se trata de mostrar las entradas de arranque almacenadas, incluyendo las rutas a los cargadores de arranque y sus identificadores únicos (GUID).
3.2.1.1 bcdedit (Windows):¶
De manera genérica, se ejecuta:
Explicación de los parámetros
Con /enum se listan las entradas de arranque tanto las internas de Window (BCD) como las externas (NVRAM).
<tipo> filtra el tipo de entradas a mostrar. Algunas de las opciones disponibles son:
all: Muestra todas las entradas (por defecto).firmware: Muestra las entradas de arranque UEFI almacenadas en la NVRAM.osloader: Muestra las entradas relacionadas con los cargadores de arranque del sistema operativo.bootmgr: Muestra la configuración del gestor de arranque de Windows.
Y la opción /v (verbose) proporciona información detallada sobre cada entrada.
Ejemplo de salida de bcdedit /enum firmware
3.2.1.2 efibootmgr (GNU/Linux)¶
Para listar las entradas de arranque UEFI almacenadas en la NVRAM basta con ejecutar:
Este comando muestra todas las entradas de arranque almacenadas en la NVRAM, junto con sus identificadores y el orden de prioridad. No requiere parámetros adicionales para una visualización básica.
Ejemplo de salida de efibootmgr
- BootCurrent: Indica la entrada que se está utilizando actualmente para arrancar.
- Timeout: Tiempo en segundos que el firmware espera antes de arrancar automáticamente la entrada por defecto.
- BootOrder: Lista de las entradas de arranque en el orden en que se intentarán iniciar.
- BootXXXX: Cada entrada de arranque, donde
XXXXes un número hexadecimal único (Boot ID). Incluye el nombre descriptivo y la ruta al archivo.eficorrespondiente.
Comparativa entre GUID y Boot ID
Como se puede observar, cada entrada tiene un Boot ID (número hexadecimal de 4 dígitos, ej., 0003) que
identifica cada entrada de arranque. Mientras que bcdedit usa GUIDs para identificar las entradas,
efibootmgr utiliza estos Boot IDs. Ambos identificadores cumplen la misma función: distinguir de forma única
cada entrada dentro del firmware, aunque su formato sea distinto.
3.2.2. Modificar el orden de arranque¶
Cambiar el orden de arranque permite especificar al firmware UEFI qué cargador de arranque debe intentar
iniciar primero. Esta operación requiere el GUID en el caso de bcdedit o el número de entrada en el caso de
efibootmgr.
3.2.2.1 bcdedit (Windows):¶
bcdedit puede modificar el orden de arranque de en la NVRAM y en el BCD. Nos centraremos en la NVRAM.
Se puede realizar dos acciones distintas:
-
Sobreescribir la lista completa de entradas en el Firmware Boot Manager ({fwbootmgr}):
-
Manipular una entrada específica para cambiar su posición en el orden de arranque (ponerla al principio o al final):
3.2.2.2 efibootmgr (GNU/Linux):**¶
Con efibootmgr, se utiliza la opción -o para especificar la nueva secuencia de Boot IDs
(los números hexadecimales de 4 dígitos, ej., 0003).
Donde <BootOrder> es una lista separada por comas de los números de las entradas en el orden deseado.
Precaución al modificar el orden de arranque con efibootmgr
Este comando sobreescribe completamente el orden de arranque. Asegúrese de incluir todas las entradas que desea mantener, ya que las que no se incluyan serán eliminadas del orden de arranque.
3.2.3. Crear una nueva entrada de arranque¶
En sistemas UEFI, se pueden crear y registrar manualmente nuevas entradas a cargadores de arranque
(.efi) dentro de la NVRAM. Esta operación suele ser necesaria tras una instalación personalizada, al añadir un
nuevo disco o al recuperar un cargador eliminado.
En cualquier caso, no suele ser una operación habitual, ya que, como se ha comentado, al instalar un sistema operativo, este suele encargarse de crear su propia entrada en la NVRAM automáticamente.
3.2.3.1 bcdedit (Windows):¶
bcdedit no permite crear nuevas entradas en la NVRAM directamente. Solo puede crearlas dentro del BCD. Por
esto, queda fuera del alcance de este manual.
3.2.3.2 efibootmgr (GNU/Linux):¶
efibootmgr permite un control mucho más completo sobre las entradas de arranque en la NVRAM, permitiendo
la creación de nuevas entradas.
| Opción | Función | Ejemplo |
|---|---|---|
-c | --create |
Indica que se va a crear una entrada | (no procede) |
-d | --disk |
El disco que contiene la ESP | /dev/sda |
-p | --part |
El número de partición de la ESP | 1 |
-L | --label |
Descripción de la entrada | "Mi GNU/Linux" |
-l | --loader |
Ruta al .efi dentro de la ESP |
\EFI\manjaro\grubx64.efi |
Formato de la ruta al cargador .efi
La ruta al cargador .efi debe especificarse relativa a la raíz de la partición ESP con barras invertidas
(\), que no es lo habitual en sistemas GNU/Linux, pero es el formato que espera efibootmgr.
Ejemplo de creación de una entrada con efibootmgr
3.2.4 Eliminar entradas obsoletas¶
Con el tiempo, es posible que se acumulen entradas de arranque que ya no se utilizan o que correspondan a sistemas operativos eliminados. Mantener la NVRAM limpia evita confusiones durante el arranque.
3.2.4.1 bcdedit (Windows):¶
bcdedit no permite eliminar entradas de la NVRAM directamente. Solo puede eliminarlas del BCD. Por
esto, queda fuera del alcance de este manual.
3.2.4.2 efibootmgr (GNU/Linux):¶
Una vez más, efibootmgr es más completo y permite eliminar entradas de arranque de la NVRAM de
forma sencilla.
| Opción | Función | Ejemplo |
|---|---|---|
-b | --bootnum |
Id de la entrada a modificar | 0003 |
-B | --delete-bootnum |
Indica que se quiere borrar | (no procede) |
Ejemplo de eliminación de una entrada con efibootmgr
3.2.5 Modificación del timeout¶
El timeout define el número de segundos que el firmware UEFI espera antes de arrancar automáticamente la entrada por defecto. Modificarlo permite, por ejemplo, dar más tiempo para elegir un sistema en un dual boot.
Un valor de timeout 0 arranca inmediatamente la entrada por defecto.
3.2.5.1 bcdedit (Windows):¶
El valor actual del timeout se puede ver con:
Ejemplo de salida de bcdedit /enum firmware
Para modificar el timeout del firmware UEFI, se usa:
Por ejemplo, para establecer un timeout de 10 segundos:
3.2.5.2 efibootmgr (GNU/Linux):¶
El valor actual del timeout se puede ver con:
(Ver ejemplo de salida en sección 3.2.1.2)
Para modificar el timeout del firmware UEFI, se usa:
3.2.6 Resumen y comparativa¶
| Operación | bcdedit (Windows) |
efibootmgr (Linux) |
|---|---|---|
| Listar entradas | ✅ | ✅ |
| Cambiar orden | ✅ | ✅ |
| Crear nuevas | ⚠️ Solo BCD | ✅ NVRAM |
| Eliminar | ⚠️ Solo BCD | ✅ NVRAM |
| Modificar timeout | ✅ | ✅ |
3.2.6.1 Visualización de entradas¶
3.2.6.2 Modificar orden de arranque¶
3.2.6.3 Crear nueva entrada¶
3.2.6.4 Eliminar entrada¶
3.2.6.5 Modificar timeout¶
3.2.3 Conclusión¶
Con esto se tienen suficientes herramientas y conocimientos para gestionar las entradas de arranque en la NVRAM de sistemas UEFI tanto en Windows como en GNU/Linux.
Aunque se puede seguir profundizando en las opciones avanzadas de bcdedit y efibootmgr, lo expuesto aquí cubre
las operaciones más comunes y necesarias para la mayoría de los usuarios.
📅 Documento escrito el 01/10/2025 · Última revisión: 31/10/2025 · Versión: v1.0