我該如何遷移到新的 EFI 引導分區?
在現有的問題中,這看起來與我正在做的最相似,只是我試圖擴大我的分區並且我不知道為什麼有不同的分區安裝到 /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 ...
現在根據
lsblk
andefibootmgr -v
(感謝@oldfred)新的,第一個引導選項將要使用sda1
and notnvme0n1p4
。sda1
是我當然不想從中啟動的外部驅動器。為什麼預設是這樣??
- 缺少什麼更改,所以它從新分區啟動?
- 我必須在重新啟動之前更改 fstab 中的
UUID
of嗎?/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.cfg
UEFI 系統上具有實際的 GRUB 配置。但是,如果要合併
/boot
and/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
在安裝/刪除特定核心包完成後再次解除安裝它。)如果您沒有牢牢把握要求是什麼,則引導載入程序通常被認為是“可怕且危險的”。另一方面,它通常是相當獨立的,因此與引導載入程序相關的問題通常並不難修復……一旦你克服了從外部媒體引導系統的第一個障礙,你就可以開始修復它。我不會說具有非功能引導載入程序的系統是“吐司”:它只需要一點外部幫助。