与 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}