‘bootctl status’ 顯示選項不可用
擁有 (2) 個 Linux Mint 20.1 系統 - 一個正常硬體,一個 VMware VM。我已經在兩者上都安裝/配置
systemd-boot
了,但我看到每個都有不同的可用設置。到目前為止,我能指出的唯一區別是我從正常硬體系統中刪除了 GRUB:正常硬體
System: Firmware: n/a (n/a) Secure Boot: disabled Setup Mode: user Current Boot Loader: Product: n/a Features: ✗ Boot counting ✗ Menu timeout control ✗ One-shot menu timeout control ✗ Default entry control ✗ One-shot entry control ✗ Support for XBOOTLDR partition ✗ Support for passing random seed to OS ✗ Boot loader sets ESP partition information ESP: n/a File: └─n/a Random Seed: Passed to OS: no System Token: not set Exists: yes Available Boot Loaders on ESP: ESP: /boot/efi (/dev/disk/by-partuuid/82492fa6-1969-4569-851b-269909138b7b) File: └─/EFI/systemd/systemd-bootx64.efi (systemd-boot 245.4-4ubuntu3.4) File: └─/EFI/BOOT/bootx64.efi (systemd-boot 245.4-4ubuntu3.4) Boot Loaders Listed in EFI Variables: Title: Linux Boot Manager ID: 0x0000 Status: active, boot-order Partition: /dev/disk/by-partuuid/82492fa6-1969-4569-851b-269909138b7b File: └─/EFI/systemd/systemd-bootx64.efi Boot Loader Entries: $BOOT: /boot/efi (/dev/disk/by-partuuid/82492fa6-1969-4569-851b-269909138b7b) Default Boot Loader Entry: title: Linux Mint XFCE 5.4.0-65-generic id: linuxmint.conf source: /boot/efi/loader/entries/linuxmint.conf linux: /linuxmint/vmlinuz initrd: /linuxmint/initrd.img options: root=UUID=408c53a0-e8d0-417f-8281-eb0eea0a2318 rw rootflags=subvol=@ iommu=pt
虛擬機
System: Firmware: UEFI 2.31 (VMware, Inc. 1.00) Secure Boot: disabled Setup Mode: user Current Boot Loader: Product: systemd-boot 245.4-4ubuntu3.4 Features: ✓ Boot counting ✓ Menu timeout control ✓ One-shot menu timeout control ✓ Default entry control ✓ One-shot entry control ✓ Support for XBOOTLDR partition ✓ Support for passing random seed to OS ✓ Boot loader sets ESP partition information ESP: /dev/disk/by-partuuid/0a3b1b4f-28e9-44ae-a15e-629a3242f8a6 File: └─/EFI/systemd/systemd-bootx64.efi Random Seed: Passed to OS: no System Token: not set Exists: yes Available Boot Loaders on ESP: ESP: /boot/efi (/dev/disk/by-partuuid/0a3b1b4f-28e9-44ae-a15e-629a3242f8a6) File: └─/EFI/systemd/systemd-bootx64.efi (systemd-boot 245.4-4ubuntu3.4) File: └─/EFI/BOOT/BOOTX64.EFI (systemd-boot 245.4-4ubuntu3.4) Boot Loaders Listed in EFI Variables: Title: Linux Boot Manager ID: 0x0005 Status: active, boot-order Partition: /dev/disk/by-partuuid/0a3b1b4f-28e9-44ae-a15e-629a3242f8a6 File: └─/EFI/systemd/systemd-bootx64.efi Title: ubuntu ID: 0x0004 Status: active, boot-order Partition: /dev/disk/by-partuuid/0a3b1b4f-28e9-44ae-a15e-629a3242f8a6 File: └─/EFI/ubuntu/shimx64.efi Boot Loader Entries: $BOOT: /boot/efi (/dev/disk/by-partuuid/0a3b1b4f-28e9-44ae-a15e-629a3242f8a6) Default Boot Loader Entry: title: Linux Mint XFCE 5.4.0-65-generic id: linuxmint.conf source: /boot/efi/loader/entries/linuxmint.conf linux: /linuxmint/vmlinuz initrd: /linuxmint/initrd.img options: root=UUID=c15f5a73-6120-4cfd-81ef-c5891e4dbdf6 rw rootflags=subvol=@
我有一種感覺,我刪除了一些我不應該刪除的東西,但我不希望 GRUB 回來(它已經做過一次,在它的軟體包升級之後)。
更新 #1:我從 VM 中刪除了 GRUB 包,驗證了它的 /boot/efi 與我的主系統具有相同的(二進制)文件。仍然收到上述錯誤。
更新:2:結果
sudo efibootmgr -v
:No BootOrder is set; firmware will attempt recovery
更新3:結果
efivar -l
:7b59104a-c00d-4158-87ff-f04d6396a915-SecureBootSetup 77fa9abd-0359-4d32-bd60-28f4e78f784b-Kernel_EntRevokeSiStatus 77fa9abd-0359-4d32-bd60-28f4e78f784b-Kernel_ATPSiStatus 77fa9abd-0359-4d32-bd60-28f4e78f784b-Kernel_WinSiStatus 77fa9abd-0359-4d32-bd60-28f4e78f784b-Kernel_SkuSiStatus 77fa9abd-0359-4d32-bd60-28f4e78f784b-Kernel_RvkSiStatus 77fa9abd-0359-4d32-bd60-28f4e78f784b-Kernel_SiStatus 77fa9abd-0359-4d32-bd60-28f4e78f784b-CurrentPolicy 8be4df61-93ca-11d2-aa0d-00e098032b8c-ConIn 8be4df61-93ca-11d2-aa0d-00e098032b8c-ConOut 97e8965f-c761-4f48-b6e4-9ffa9cb2a2d6-DeploymentModeNv 4599d26f-1a11-49b8-b91f-858745cff824-StdDefaults
看起來
bootctl
“正常硬體”系統上的命令無法確認系統是否已使用systemd-boot
. 這可能是因為該系統的 UEFI 韌體中的一些錯誤或怪癖,或者因為系統實際上systemd-boot
尚未啟動。請
efibootmgr -v
在“正常硬體”系統上執行並將輸出添加到您的原始文章中。這將顯示 UEFI 啟動變數的實際內容:查看原始數據而不是對其進行bootctl
分析可能會提供更多關於正在發生的事情的線索。您似乎根本沒有任何名稱為
8be4df61-93ca-11d2-aa0d-00e098032b8c-Boot*
. 就像你所有的 UEFI 啟動變數都被清除了一樣。這肯定可以解釋為什麼bootctl status
目前引導載入程序似乎不確定:它沒有找到8be4df61-93ca-11d2-aa0d-00e098032b8c-BootCurrent
記錄韌體目前引導系統方式的引導變數。如果刪除 GRUB 導致所有引導變數被刪除,那可能是一個錯誤:這是對任何其他引導載入程序的不必要的反社會行為。或者它可能是 UEFI 韌體錯誤:一些供應商的 UEFI 韌體實施會自動清除所有引用不再存在的磁碟或分區的引導變數,但也許這個在清理時有點過於熱心了?(系統韌體更新可能會解決該問題。)
缺少 UEFI 引導變數會導致韌體嘗試從它可以找到的任何磁碟中找到 ESP 分區,這種順序可能只有韌體程序員才知道。當它找到
/EFI/BOOT/BOOTX64.EFI
(相對於 ESP 分區的根目錄;在 Mint 中,它的完整路徑是/boot/efi/EFI/BOOT/BOOTX64.EFI
)時,它將使用它來引導系統。在可移動媒體上,/EFI/BOOT/BOOTX64.EFI
韌體可以理解的任何文件系統上的存在可能足以從該媒體啟動。假設包含您的 ESP 分區(即
/boot/efi
文件系統)的磁碟是/dev/sda
,您可能需要執行以下命令:sudo efibootmgr -b 0000 -c -d /dev/sda -l \\EFI\\systemd\\systemd-bootx64.efi -L "Linux Mint"
這應該創建
8be4df61-93ca-11d2-aa0d-00e098032b8c-Boot0000
引導變數並使其正確指向systemd-bootx64.efi
引導載入程序。它還將為該啟動選項提供一個人類可讀的名稱“Linux Mint”;您可能可以在韌體啟動設置中看到它(您可能將它們稱為“BIOS 設置”)。它還應該自動創建
8be4df61-93ca-11d2-aa0d-00e098032b8c-BootOrder
變數,並使引導選項 0000(即剛剛在上面創建的變數)成為目前第一個也是唯一的活動引導選項。如果使用 添加時引導變數似乎沒有“粘住”
efibootmgr
,那麼您肯定擁有一個帶有古怪 UEFI 韌體的系統。每個供應商的第一個 UEFI 實現往往都有稍後修復的錯誤:如果您的“正常硬體”系統不是全新的,它可能仍然具有早期的 UEFI 實現之一。您可以嘗試在韌體設置菜單中添加 UEFI 引導載入程序路徑;這樣做可能會滿足使韌體拒絕由efibootmgr
.在這種情況下,您可能還想閱讀Roderick W. Smith 的關於“引導政變”的頁面- 它主要是考慮到 rEFInd 引導載入程序編寫的,但它很好地描述了各種 UEFI 韌體怪癖和可用的解決方法。