Linux
如何重新創建 EFI 引導分區?
我已經在我的機器上安裝了 Fedora,帶有用於 EFI 引導的
/
分區、swap
分區和分區。ESP
現在,我安裝的是 Elementary OS 而不是 Fedora。
- 我已經格式化了
/
分區(/dev/sda3)- 格式化交換分區 (/dev/sda4)
- 但沒有格式化 EFI 引導分區 (/dev/sda1)
現在當我啟動時,我得到了由 Fedora 安裝的舊 grub 菜單。我只能通過以下方式啟動 Elementary OS:
- 進入啟動菜單。
- 選擇從 EFI 文件啟動
- 瀏覽
/dev/sda1/
, 以獲取elementary
包含grubx64.efi
文件的目錄。這是/boot/efi/EFI/elementary/grubx64.efi
。我該如何解決?
/dev/sda1/
我想用或其他東西格式化引導分區,fat16
然後在其上重新安裝 grub。我
/dev/sda1
現在包含這個:root@rafael:/home/rafael# ls /boot/efi/ EFI mach_kernel System root@rafael:/home/rafael# ls /boot/efi/EFI/ BOOT/ elementary/ fedora/ root@rafael:/home/rafael# ls /boot/efi/EFI/fedora/ BOOT.CSV fonts gcdx64.efi grub.cfg grubx64.efi MokManager.efi shim.efi shim-fedora.efi root@rafael:/home/rafael# ls /boot/efi/EFI/elementary/ grubx64.efi
這是我的
efibootmgr
輸出:BootCurrent: 003D Timeout: 0 seconds BootOrder: 2001,2002,2003 Boot0000* Notebook Hard Drive Boot0010* Internal CD/DVD ROM Drive Boot0011* Internal CD/DVD ROM Drive (UEFI) Boot0012* Fedora Boot0013* Fedora Boot0014* Fedora Boot0015* Fedora Boot0016* Fedora Boot0017* Fedora Boot0018* Fedora Boot0019* Fedora Boot001A* Fedora Boot001B* Fedora Boot001C* Fedora Boot001D* Fedora Boot001E* Fedora Boot001F* elementary Boot2001* USB Drive (UEFI) Boot2002* Internal CD/DVD ROM Drive (UEFI)
任何幫助,將不勝感激。
我做到了 !
首先,我通過以下方式刪除了所有不必要的引導條目:
efibootmgr -b <entry_hex_number> -B
然後,用文件系統重新格式化 ESP 分區
FAT32
。mkfs.vfat -F32 /dev/sda1
然後將 grub 安裝為
/dev/sda
NOT/dev/sda1
grub-install /dev/sda
我不知道你為什麼首先使用 grub。UEFI 充當引導載入程序,它允許從引導菜單中選擇不同的作業系統或單個核心。儘管有一些例外,但通常不需要連結第二個引導載入程序,在這種情況下是 grub。
您提到,您安裝了基本作業系統而不是Fedora,這意味著您只需要載入一個作業系統。在這裡,我提出了一種 不使用 grub 的方法。核心需要使用 EFI_STUB 編譯,如果是這種情況,您可以檢查
grep EFI_STUB /boot/config-<version>
將核心和initramfs複製到ESP(EFI系統分區)
cp /boot/vmlinuz-<version> /boot/efi/EFI/elementary/vmlinuz-<version>.efi cp /boot/initrd.img-<version> /boot/efi/EFI/elementary/initrd.img-<version>
在 UEFI 中將核心註冊為引導選項
echo "root=UUID=<disk_uuid> ro quiet rootfstype=ext4 add_efi_memmap initrd=\\EFI\\elementary\\initrd.img-<version>" | iconv -f ascii -t ucs2 | efibootmgr \ --create --gpt \ --disk /dev/<disk> --part <partition_number> \ --label "Elementary OS" \ --loader "\\EFI\\elementary\\vmlinuz-<version>.efi" \ --write-signature --append-binary-args -
--disk
參數取磁碟的設備名稱,例如 ,--disk /dev/sda
參數--part
取 ESP 的分區號,例如 4。您可以使用以下命令找到 ESP 分區號:gdisk -l /dev/sda | awk '$6=="EF00" {print $1}'
確保在每次核心更新後重複這些步驟
您可以手動執行此操作(只需重複上述步驟),或者您編寫一個完成這項工作的小腳本。為了使其完全自動化,腳本可以掛接到核心安裝後程序、initramfs 更新後程序和核心 postrm 程序(以刪除 UEFI 引導條目)。實際上,我不知道為什麼發行版預設不這樣做,它只是幾行程式碼。