不使用 BIOS 设置重新启动至 Ubuntu

不使用 BIOS 设置重新启动至 Ubuntu

我有一台安装了 Ubuntu 22 和 Windows 11 的远程 PC(通过 Team Viewer 连接),启动优先级设置为启动到 Windows。目前我已启动至 Ubuntu 22,由于 CUDA 问题,我必须重新启动我的电脑。由于目前没有人可以物理访问 PC,有什么方法可以更改 Ubuntu 本身的启动优先级,以便它再次重新启动回到 Ubuntu。问题是我只有一次尝试,如果失败,它将启动到 Windows,我们仍然可以进行远程访问,但我不希望这种情况发生。

谢谢,

我检查了 GRUB 设置,它已经设置为“0”,如下所示,

GRUB_DEFAULT=0 GRUB_TIMEOUT_STYLE=hidden GRUB_TIMEOUT=10 GRUB_DISTRIBUTOR=lsb_release -i -s 2> /dev/null || echo Debian GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" GRUB_CMDLINE_LINUX=""

注意:下面是我遇到的 CUDA 问题,如果有人知道无需重新启动即可修复它的方法,那也可以。

我已经设置了 AlexyAB Darknet YoloV4,它一直工作正常,但今天突然出现以下错误。上次我遇到同样的情况时,我必须重新启动系统,然后一切正常。

错误:

Darknet error location: ./src/dark_cuda.c, cuda_set_device(), line #38 CUDA Error: no CUDA-capable device is detected: Bad file descriptor backtrace (8 entries) 1/8: ./darknet(log_backtrace+0x38) [0x5593a5171208] 2/8: ./darknet(error+0x3d) [0x5593a51712ed] 3/8: ./darknet(check_error+0xd0) [0x5593a5173be0] 4/8: ./darknet(check_error_extended+0x7c) [0x5593a5173ccc] 5/8: ./darknet(main+0x28d) [0x5593a51306cd] 6/8: /lib/x86_64-linux-gnu/libc.so.6(+0x29d90) [0x7f61655d4d90] 7/8: /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0x80) [0x7f61655d4e40] 8/8: ./darknet(_start+0x25) [0x5593a51329f5]

“nvcc --version”的输出:nvcc:NVIDIA (R) Cuda 编译器驱动程序 版权所有 (c) 2005-2023 NVIDIA Corporation 构建于 Fri_Sep__8_19:17:24_PDT_2023 Cuda 编译工具,版本 12.3,V12.3.52 构建 cuda_12.3.r12 .3/编译器.33281558_0

答案1

由于您使用的是 Windows 11,因此您的系统必须以 UEFI 方式启动。因此,您应该能够使用该sudo efibootmgr -v命令查看 Linux 中的引导顺序和其他引导设置。

它应该输出类似这样的内容:

BootCurrent: 0004
Timeout: 1 seconds
BootOrder: 0004,0002,0000,0006,0005,0001,0003,0007
Boot0000* Windows Boot Manager  HD(1,GPT,12345678-9abc-def0-1234-56789abcdef0,0x800,0x82000)/File(\EFI\MICROSOFT\BOOT\BOOTMGFW.EFI)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{.9.8.7.6.5.4.3.2.-.1.0.f.e.-.d.c.b.a.-.9.8.7.6.-.5.4.3.2.1.0.f.e.d.c.b.a.}...d................
Boot0001* UEFI:CD/DVD Drive     BBS(129,,0x0)
Boot0002* rEFInd Boot Manager   HD(1,GPT,12345678-9abc-def0-1234-56789abcdef0,0x800,0x82000)/File(\EFI\REFIND\REFIND_X64.EFI)
Boot0003* UEFI:Removable Device BBS(130,,0x0)
Boot0004* debian        HD(1,GPT,12345678-9abc-def0-1234-56789abcdef0,0x800,0x82000)/File(\EFI\DEBIAN\SHIMX64.EFI)
Boot0005* UEFI: PXE IP4 Intel(R) Ethernet Connection (7) I219-V PciRoot(0x0)/Pci(0x1f,0x6)/MAC(0123456789ab,0)/IPv4(0.0.0.00.0.0.0,0,0)..BO
  • 该行指示用于引导当前操作系统的行BootCurrent:号。BootNNNN
  • 该行指定引导系统时尝试各行BootOrder:指定的各种引导目标的顺序BootNNNN
  • UUID 字符串12345678-9abc-def0-1234-56789abcdef0是包含各行指定的引导加载程序文件的 ESP 分区的实际 PARTUUID BootNNNN

在此示例中,Windows 的本机启动管理器是 option Boot0000,因此如果系统设置为默认启动到 Windows,则BootOrder将会0000作为第一个条目。如果 GRUB 配置为默认引导 Ubuntu,则“默认引导到 Windows”设置必须位于 UEFI 引导设置中。

此示例系统当前配置为默认启动到 Debian,这就是它开始生成示例输出的方式。

要告诉您的系统仅引导至 Ubuntu 一次,您可以使用sudo efibootmgr --bootnext NNNN其中 NNNN 是BootNNNN运行 Ubuntu GRUB 的行号。

要告诉您的系统保持默认为 Ubuntu,除非另有明确指示,请使用sudo efibootmgr --bootorder XXXX,YYYY,ZZZZ....其中 XXXX,YYYY,ZZZZ 是当前在该行列出的引导选项的编号BootOrder:重新排列,使 Ubuntu 的行号成为第一行。

换句话说,要使该示例系统仅启动一次 Windows,然后在后续启动时返回默认 Debian:

sudo efibootmgr --bootnext 0000

要使示例系统引导至 Windows,直到再次更改设置:

sudo efibootmgr --bootorder 0000,0004,0002,0006,0005,0001,0003,0007

理论上,您可以从启动顺序行中删除不需要的条目,但一些有缺陷的 UEFI 实现可能会以某种随机顺序将任何遗漏的条目添加回启动顺序的尾部。根据我的经验,如果没有紧急需要,最安全的做法是重新排列启动顺序,而不是缩短或延长启动顺序。

相关内容