Evitar que Windows 10 cambie el orden UEFI del boot

Actualizado el 13/06/2021 añadiendo el apartado con la configuración del orden del Boot de la BIOS: Configuración del Grub2 Boot como primera opción.

En equipos con inicio dual de los sistemas operativos de Linux y Windows, si en cada inicio de Windows cambia el orden arranque UEFI (Boot), esto se debe al orden incorrecto del Windows Boot Manager, así como la entrada por defecto.

La configuración del Windows Boot Manager se realizan con el comando bcdedit, siendo los los pasos los siguientes:

Abrir un consola de comando CMD en modo administrador

Obtener la configuración actual:

C:\WINDOWS\system32>bcdedit

Administrador de arranque de Windows
----------------------------------
Identificador           {bootmgr}
device                  partition=C:
path                    \EFI\Microsoft\Boot\bootmgfw.efi
description             Windows Boot Manager
locale                  es-ES
inherit                 {globalsettings}
default                 {default}
resumeobject            {d137d968-b736-11ea-88fd-ed4f51a2d0c1}
displayorder            {default}
toolsdisplayorder       {memdiag}
timeout                 30

Cargador de arranque de Windows
-----------------------------
Identificador           {default}
device                  partition=C:
path                    \WINDOWS\system32\winload.efi
description             Windows 10
locale                  es-ES
inherit                 {bootloadersettings}
recoverysequence        {8839051c-b72e-11ea-8103-f42c40c72b88}
displaymessageoverride  Recovery
recoveryenabled         Yes
isolatedcontext         Yes
allowedinmemorysettings 0x15000075
osdevice                partition=C:
systemroot              \WINDOWS
resumeobject            {d137d968-b736-11ea-88fd-ed4f51a2d0c1}
nx                      OptIn
bootmenupolicy          Standard

El comando anterior muestra la configuración del Administrador de arranque de Windows (Windows Boot Manager), es que es primero que se muestra y que tiene como identificador {bootmgr} y después muestra la entrada UEFI que se ha cargado actualmente y que en este caso es la entrada (default).
Se han marcado en negrita los valores a comprobar, en el caso que se muestra se observa lo siguiente:

En el bootmgr el valor de parámetro path corresponde con el cargador del boot manager de Windows (\EFI\Microsoft\Boot\bootmgfw.efi) y el cargado del parámetro default es el cargador de Windows, para corregir el problema y evitar que el Windows restaure el boot en cada inicio hay que cambiar esos parámetros, configurando los correspondientes al Grub2.

Lo siguiente será localizar el identificador del cargador de Linux así como path de la entrada UEFI.

Obtendremos toda la lista de cargadores y entradas que existen, ejecutando el siguiente comando:

bcdedit /enum all

Entre la lista que se mostrará, localizaremos al que corresponde la Grub2 del sistema operativo del Linux, que en mi caso es el siguiente:

Aplicación de firmware (101fffff)
---------------------------------
Identificador           {bf6c2251-7798-11eb-81b3-806e6f6e6963}
device                  partition=\Device\HarddiskVolume2
path                    \EFI\opensuse\grubx64.efi
description             opensuse

Nos harán falta los datos de las dos líneas marcada en negrita, los usaremos para configurar el Administrador de arranque de Windows ({bootmgr}), ejecutaremos los siguientes comandos:

bcdedit /set {bootmgr} path \EFI\opensuse\grubx64.efi
bcdedit /set {bootmgr} default {bf6c2251-7798-11eb-81b3-806e6f6e6963}

Procederemos a reiniciar y a confirmar que se muestra el Grub de Linux y que en caso de iniciar Windows vuelve a mostrar el Grub de Linux en el siguiente reinicio del sistema.

Configuración del Grub2 Boot como primera opción

También hay que comprobar el orden en el inicio del equipo, que será el que determina que Boot muestra la BIOS al cargar. En Windows esto también configura con el comando bcdedit en el identificador {fwbootmgr}.

Debemos comprobar que la primera opción del {fwbootmgr} no esté el {bootmgr} de Windows sino el correspondiente al Grub2 Boot de Linux.

Los pasos para comprobar y cambiar el orden serían los siguientes:

  • Mostrar la configuración actual
C:\WINDOWS\system32>bcdedit /enum {fwbootmgr}

Administrador de arranque de firmware
-----------------------------------
Identificador           {fwbootmgr}
displayorder            {bootmgr}
                        {bf6c2251-7798-11eb-81b3-806e6f6e6963}
                        {ce05a55d-c63f-11eb-827c-a01d48c07fb4}
timeout                 0

Como se muestra en el caso anterior, la primera opción del campo displayorder es el {bootmgr}, de tal forma que se cargará directamente Windows.

  • Buscamos el Grub2 Boot de Linux

Se haría ejecutando el comando bcdedit /enum all, el cual se ha ejecutado anteriormente y para nuestro ejemplo corresponde con el identificador {bf6c2251-7798-11eb-81b3-806e6f6e6963}

  • Configurar el Grub2 Boot de Linux como primera opción
C:\WINDOWS\system32>bcdedit /set {fwbootmgr} displayorder  {bf6c2251-7798-11eb-81b3-806e6f6e6963} /addfirst
La operación se completó correctamente.
  • Comprobación orden correcto
C:\WINDOWS\system32>bcdedit /enum {fwbootmgr}

Administrador de arranque de firmware
-----------------------------------
Identificador           {fwbootmgr}
displayorder            {bf6c2251-7798-11eb-81b3-806e6f6e6963}
                        {bootmgr}
                        {bf6c2251-7798-11eb-81b3-806e6f6e6963} 
                        {ce05a55d-c63f-11eb-827c-a01d48c07fb4}
timeout                 0

C:\WINDOWS\system32>

Como se puede ver ahora la opción primera es el Grub2 de Linux, con esto ya se debería mostrar la pantalla de selección de los sistemas operativos de Linux y no directamente la carga de Windows

Referencias

Documentación sobre el BCD de Windows

Manual para la distribución Ubuntu