双系统小技巧:如何重启到 Windows

与 grub 无关,原理是动态修改 BIOS 中的启动项,用到的工具分别是 efibootmgr 和 bcdedit。

Linux 下重启到 Windows

当先我的笔记本 BIOS 中的启动项目如下,默认启动 0000,Windows 是 0004。(每个人的启动项目都不一样,不能照抄)

~ [4]> efibootmgr 
BootCurrent: 0000
Timeout: 0 seconds
BootOrder: 0000,0004,2001,2002,2003
Boot0000* openSUSE
Boot0001* EFI PXE 0 for IPv4 
Boot0002* EFI PXE 0 for IPv6 
Boot0004* Windows Boot Manager	
Boot2001* EFI USB Device	RC
Boot2002* EFI DVD/CDROM	RC
Boot2003* EFI Network	RC

指定下次启动 Windows

sudo efibootmgr --bootnext 0004

Windows 下重启到 Windows

bcdedit 的输出如下:

C:\Windows\system32>bcdedit /enum all

固件启动管理器
---------------------
标识符                  {fwbootmgr}
displayorder            {a7ea34a6-e3c0-11ee-871c-806e6f6e6963}
                        {bootmgr}
                        {c7032c0a-773d-11ee-8e3c-00808a8d96ac}
                        {c7032c0b-773d-11ee-8e3c-00808a8d96ac}
                        {c7032c0c-773d-11ee-8e3c-00808a8d96ac}
timeout                 0

Windows 启动管理器
--------------------
标识符                  {bootmgr}
device                  partition=\Device\HarddiskVolume5
path                    \EFI\Microsoft\Boot\bootmgfw.efi
description             Windows Boot Manager
locale                  zh-CN
inherit                 {globalsettings}
default                 {current}
resumeobject            {d3a4efac-a0dc-11ee-9827-a68860bb4dc2}
displayorder            {current}
toolsdisplayorder       {memdiag}
timeout                 3

固件应用程序 (101fffff)
-------------------------------
标识符                  {a7ea34a6-e3c0-11ee-871c-806e6f6e6963}
device                  partition=\Device\HarddiskVolume1
description             openSUSE

固件应用程序 (101fffff)
-------------------------------
标识符                  {c49882f4-eca1-11ee-872f-806e6f6e6963}
description             EFI PXE 0 for IPv4 (00-E0-4C-68-03-91)

固件应用程序 (101fffff)
-------------------------------
标识符                  {c49882f5-eca1-11ee-872f-806e6f6e6963}
description             EFI PXE 0 for IPv6 (00-E0-4C-68-03-91)

指定下次启动 Windows

bcdedit /set {fwbootmgr} bootsequence {bootmgr}

指定下次启动 Linux

bcdedit /set {fwbootmgr} bootsequence  {a7ea34a6-e3c0-11ee-871c-806e6f6e6963}

将 Windows 设置为默认启动项

bcdedit /set {fwbootmgr} default {bootmgr}
4赞