準備新的啟動分區

準備新的啟動分區

在現有的問題中,看起來與我正在做的事情最相似,只是我嘗試擴大我的分區,但我不知道為什麼 /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 中UUID的?/boot
  • 我需要一個單獨的分割區嗎/boot/efi

答案1

/boot和都/boot/efi作為單獨的檔案系統是多餘的,但是:

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

現代 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.cfggrubx64.efi.該檔案僅包含幾行,標識包含該目錄的檔案系統的檔案系統 UUID /boot(無論它是單獨的分割區還是根檔案系統上的常規目錄)。因此,Debian/Ubuntu 系統可以總是/boot/grub/grub.cfg無論系統使用 BIOS 還是 UEFI,“主”GRUB 設定檔都位於。如果你有大量不同年代的系統,那就很方便了。

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

然而,如果要合併/boot/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在安裝/刪除特定核心包完成後再次卸載它。)

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

答案2

引導程式將尋找您目前已安裝的內容/boot/efi,因此,如果您不想擴大該分割區,則可以按原樣保留該分割區,只需對檔案進行一個微小的更改,如下所述。

準備新的啟動分區

  1. 建立一個ext2具有所需大小的新分割區。這個分割區不需要引導標誌 - 您的 efi 分割區是入口點並將委託給這個新分割區。
  2. 將新分割區安裝到某處。/newBoot例如
  3. 從舊的啟動分區複製文件,例如使用rsync --recursive --delete --archive /boot/ /newBoot/
  4. 刪除 的內容/newBoot/efi/,這裡只是一個資料夾:rm -rf /newBoot/efi/EFI/。不要刪除newBoot/efi/。我們想efi在那裡安裝舊資料夾。

告訴efi使用新分區

找出/newBoot的 UUID:

$ lsblk -e 7 -o name,fstype,size,fsused,label,partlabel,mountpoint,uuid,partuuid
NAME                                          FSTYPE        SIZE FSUSED LABEL     PARTLABEL            MOUNTPOINT           UUID                                   PARTUUID
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
├─nvme0n1p3                                   crypto_LUKS 927.7G                                                            e7f674b8-4bec-4502-a1e5-0e93aa34786f   2fed2ecb-b548-479b-aa3f-7f1bbfb9981f
│ └─sda3_crypt                                LVM2_member 927.7G                                                            9tx8Yv-XDCR-RmGf-fmXo-WiX2-SDpG-xH1si4 
│   ├─ubuntu--gnome--vg-root                  ext4        911.6G 734.2G                                /                    1cccfb0a-69da-4246-a071-52f882681418   
│   └─ubuntu--gnome--vg-swap_1                swap         15.8G                                       [SWAP]               e3facfb8-db2e-426d-aef4-b6c81004fd6f   
└─nvme0n1p4                                   ext2          1.5G        newBoot   newBoot                                   5aca79e7-b740-46d3-bc76-aa7e8b8b93da   9e8baf2f-2118-4042-9c47-7ffb824ada52

進行相應的編輯/boot/efi/EFI/ubuntu/grub.cfg,將舊的當前 UUID 替換為新的 UUID:

# cat /boot/efi/EFI/ubuntu/grub.cfg
# search.fs_uuid 606a1976-d1c2-4246-a256-a8afddb04f84 root 
search.fs_uuid 5aca79e7-b740-46d3-bc76-aa7e8b8b93da root 
set prefix=($root)'/grub'
configfile $prefix/grub.cfg

整理起來

現在系統應該已經從新分區啟動,但從/boot/新分區啟動後將是舊分區。編輯/etc/fstab以便系統更新找到其位置的所有檔案:

# UUID=606a1976-d1c2-4246-a256-a8afddb04f84 /boot           ext2    defaults        0       2
UUID=5aca79e7-b740-46d3-bc76-aa7e8b8b93da /boot           ext2    defaults        0       2

/boot/efi中的行保持/etc/fstab原樣:

UUID=FD0E-EECA  /boot/efi       vfat    umask=0077      0       1

相關內容