Boot

我該如何遷移到新的 EFI 引導分區?

  • November 6, 2021

在現有的問題中,看起來與我正在做的最相似,只是我試圖擴大我的分區並且我不知道為什麼有不同的分區安裝到 /boot/ 和 /boot/efi 以及如何繼續沒有射擊我的腳。

到目前為止,我創建了一個新分區,將其掛載到/newBoot並做sudo rsync -a /boot/ /newBoot/,所以我假設我在新分區中有所有相關文件可以切換。

$ lsblk -e 7 -o name,fstype,size,fsused,label,partlabel,mountpoint,uuid,partuuid
NAME                        FSTYPE   SIZE FSUSED LABEL   PARTLABEL          MOUNTPOINT UUID                                   PARTUUID
sda                                  7.3T                                                                                     
└─sda1                      crypto   7.3T                                              4dffc196-9926-43d9-a7c8-38898681f402   85b3a656-4886-4b37-b9c1-2acb0158587a
...
nvme0n1                            931.5G                                                                                     
├─nvme0n1p1                 vfat     512M   5.3M         EFI System Partition
│                                                                           /boot/efi  FD0E-EECA                              587cf214-f068-4879-a833-9dffa5ec6e3d
├─nvme0n1p2                 ext2     488M 313.7M                            /boot      606a1976-d1c2-4246-a256-a8afddb04f84   2e10e277-560f-4f5e-abce-1dce5187a7f0
...
└─nvme0n1p4                 vfat     1.5G        NEWBOOT newboot                       530D-4828                              ea886018-714f-46fb-8f21-785c74543891
$ efibootmgr -v
BootCurrent: 0004
Timeout: 1 seconds
BootOrder: 0004
Boot0004* ubuntu    HD(1,GPT,587cf214-f068-4879-a833-9dffa5ec6e3d,0x800,0x100000)/File(\EFI\UBUNTU\SHIMX64.EFI)
$ sudo efibootmgr -c -L ubuntuNew -l \\EFI\\UBUNTU\\SHIMX64.EFI
$ efibootmgr -v
BootCurrent: 0004
Timeout: 1 seconds
BootOrder: 0000,0004
Boot0000* ubuntuNew HD(1,GPT,85b3a656-4886-4b37-b9c1-2acb0158587a,0xffff,0x3a3535ca9)/File(\EFI\UBUNTU\SHIMX64.EFI)
Boot0004* ubuntu    HD(1,GPT,587cf214-f068-4879-a833-9dffa5ec6e3d,0x800,0x100000)/File(\EFI\UBUNTU\SHIMX64.EFI)

所以雖然我不明白為什麼目前/boot文件夾中涉及兩個分區,但我認為一個也應該工作?至少如此閱讀上面連結的問題的選擇答案,對吧?

現在缺少什麼?/etc/fstab?

$ cat /etc/fstab 
...
UUID=606a1976-d1c2-4246-a256-a8afddb04f84 /boot           ext2    defaults        0       2
...
UUID=FD0E-EECA  /boot/efi       vfat    umask=0077      0       1
...

現在根據lsblkand efibootmgr -v(感謝@oldfred)新的,第一個引導選項將要使用sda1and not nvme0n1p4sda1是我當然不想從中啟動的外部驅動器。為什麼預設是這樣??

  • 缺少什麼更改,所以它從新分區啟動?
  • 我必須在重新啟動之前更改 fstab 中的UUIDof嗎?/boot
  • 我需要一個單獨的分區/boot/efi嗎?

擁有兩個文件系統/boot/boot/efi作為單獨的文件系統是矯枉過正的,但是:

  • 非常舊的基於 BIOS 的系統可能需要單獨的/boot分區以避免 BIOS 限制
  • 任何以 UEFI 樣式啟動的系統都需要/boot/efi或等效的 ESP 分區,因為韌體希望在其中找到引導載入程序文件。
  • 有一個單獨的未加密將允許使用根文件系統/boot支持的任何加密方法,而不是 GRUB 理解的更有限的一組加密。cryptsetup

現代 Debian/Ubuntu 的預設分區都作為單獨的分區,因此預設配置可以覆蓋盡可能廣泛的系統。

正如 oldfred 在評論中提到的,UEFI 標識了 GPT 分區表中分區唯一 GUID 使用的 ESP 分區。該 GUID 在 Linux 中稱為 PARTUUID。lsblk -o +partuuid將顯示它。

你的efibootmgr命令幾乎是正確的。要使用正確的磁碟創建 ubuntuNew 引導選項,您應該使用:

sudo efibootmgr -c -d /dev/nvme0n1 -L ubuntuNew -l \\EFI\\UBUNTU\\SHIMX64.EFI

efibootmgr將自行查找 PARTUUID 並自動使用它來創建新的引導條目。您只需要指定磁碟(除非磁碟上有多個 EFI 系統分區)。

一旦shimx64.efi載入grubx64.efi,在配置了 Debian/Ubuntu 風格的系統上,它將grub.cfg在與grubx64.efi. 該文件僅包含幾行,用於標識包含該/boot目錄的文件系統的文件系統 UUID(無論它是單獨的分區還是只是根文件系統上的正常目錄)。因此,無論系統使用 BIOS 還是 UEFI ,Debian/Ubuntu 系統都可以始終擁有“主”GRUB 配置文件。/boot/grub/grub.cfg如果你有大量不同年齡的系統,那很方便。

/boot/grub2/grub.cfg作為參考,RedHat 7 和 8在 BIOS 樣式系統和/boot/efi/EFI/redhat/grub.cfgUEFI 系統上具有實際的 GRUB 配置。

但是,如果要合併/bootand /boot/efi,有幾點需要注意:

  • 給定的引導載入程序路徑efibootmgr基於 ESP 文件系統的根目錄。原來該路徑從 開始/boot/efi,所以從 Linux 來看\\EFI\\UBUNTU\\SHIMX64.EFI是指。/boot/efi/EFI/UBUNTU/SHIMX64.EFI如果您只使用/boot,那麼您需要將 UBUNTU 目錄上移一級,而不是將引導載入程序路徑指定為\\EFI\\EFI\\UBUNTU\\SHIMX64.EFI.
  • /boot必須是 GRUB 能夠理解的東西,以便它可以從那裡載入核心和 initramfs 文件。Ubuntu 的 UEFI 版本的 GRUB 肯定會懂 ext2 和 vfat;所以如果你合併/boot/boot/efi一個單獨的 vfat 分區,GRUB 不會有問題。您不能使用 ext2,因為韌體需要從該分區讀取 SHIMX64.EFI 和 GRUBX64.EFI,而典型的 UEFI 韌體將無法理解 ext2。
  • 在啟動時,/boot只有 GRUB 需要,Linux 核心不需要:您可以/boot保持解除安裝狀態,系統仍然可以正常啟動。但是您需要保持/boot掛載,以便核心更新可以正常進行。(或者,如果您真的想通過解除安裝它來隱藏它,那麼您可以添加腳本以/etc/kernel/pre*.d/在安裝核心更新之前自動安裝它,並/etc/kernel/post*.d在安裝/刪除特定核心包完成後再次解除安裝它。)

如果您沒有牢牢把握要求是什麼,則引導載入程序通常被認為是“可怕且危險的”。另一方面,它通常是相當獨立的,因此與引導載入程序相關的問題通常並不難修復……一旦你克服了從外部媒體引導系統的第一個障礙,你就可以開始修復它。我不會說具有非功能引導載入程序的系統是“吐司”:它只需要一點外部幫助。

引用自:https://unix.stackexchange.com/questions/675927