准备新的启动分区

准备新的启动分区

在现有的问题中,看起来与我正在做的事情最相似,只是我尝试扩大我的分区,但我不知道为什么 /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

相关内容