
我有一台安裝了 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.512. 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 分割區的實際 PARTUUIDBootNNNN
。
在此範例中,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 實作可能會以某種隨機順序將任何遺漏的條目添加回啟動順序的尾部。根據我的經驗,如果沒有緊急需要,最安全的做法是重新排列啟動順序,而不是縮短或延長啟動順序。