如何从命令行重新启动特定设备?

如何从命令行重新启动特定设备?

我有以下磁盘:

/dev/sda 
  /dev/sda1 EFI partition
  /dev/sda2 Windows
/dev/sdb
  /dev/sdb1 EFI partition
  /dev/sdb2 Linux                    <-- currently mounted as /

并且我目前正在使用 Linux,因此/dev/sdb2当前已安装为/

我的 BIOS 设置为默认在第二个 HDD 上启动,从而在 Linux 上启动。

问题:从 Linux 命令行,如何重新启动到 Windows,即/dev/sda2(引导加载程序位于 中/dev/sda1,更准确地说位于 中/EFI/Boot/bootx64.efi

没有必须执行诸如F12在计算机启动时触发启动菜单之类的操作,以及没有在 Grub/启动菜单中选择一个选项。
TL;DR:有没有办法/dev/sda2使用单个命令行命令重新启动?

答案1

首先,运行sudo efibootmgr -v以显示当前的 UEFI 启动变量。引导条目的命名方式BootXXXX为 XXXX=四位数字(可能是十六进制)。

如果有一个启动项的第二列显示“Windows Boot Manager”,那么它就是 Windows 的启动项。它应该类似于:

BootXXXX* Windows Boot Manager  HD(2,GPT,12345678-90ab-cdef-0123-456789abcdef,0x109000,0x32000)/File(\EFI\Microsoft\Boot\bootmgfw.efi)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{ <UTF-16 representation of an UUID here>

此处,12345678-90ab-cdef-0123-456789abcdef将是 Windows 启动管理器所在的 ESP 分区的 PARTUUID \EFI\Microsoft\Boot\bootmgfw.efi。对于您的情况,它应该是您磁盘的 PARTUUID /dev/sda1。用于lsblk -o +PARTUUID查看磁盘分区的 PARTUUID。

一旦您知道 Windows 启动项的 XXXX 编号,您就可以运行:

sudo efibootmgr --bootnext XXXX

这应该使系统使用指定的启动项启动(仅一次),即Windows。一旦您告诉 Windows 关闭或重新启动,下次启动时应该会自动再次启动 Linux。

使用该sudo efibootmgr --bootnext命令后,系统准备启动进入 Windows,您可以使用任何常规命令来重新启动系统。

如果您想使用单个命令来完成此操作,您可以编写一个简单的脚本:

#!/bin/sh
sudo efibootmgr --bootnext XXXX
sudo reboot

答案2

systemctl reboot --firmware-setup

这将重新启动进入 BIOS 设置实用程序。

相关内容