![ESP 和 GRUB 安装](https://linux22.com/image/228754/ESP%20%E5%92%8C%20GRUB%20%E5%AE%89%E8%A3%85.png)
目的是使用 debootstrap 安装 Debian。首先我想把所有系统安装在一个32GB的小闪存盘上。
GPT分区表和GRUB的概念很清楚:有一个分区表。每个分区都有唯一的 ID。此外,在每个分区上创建了一个文件系统。 FileSystem本身是存储文件、日志、目录等的方式,它是一个DataSturture。
好的。清除。
现在有ESP。存储BOOTLoader的分区。而且一定是FAT32不是吗?
现在我需要获取内核、ramdisk。在 FlashStick 上创建 ESP。安装 GRUB,使其位于 ESP 上,并选择适当的内核和 Ramdisk。我被困在这里了。
- 如何创建ESP?它是一个简单的分区,进一步格式化为FAT32吗?
- 如何告诉 GRUB 安装在哪里?如何配置呢?我知道
grub-mkconfig
- 并且我知道需要设置 linux 和 initrd 但仍然有点令人困惑。
所以这里开始出现问题。
如何将 ESP 与文件系统的其余部分连接?内核如何知道在哪里搜索所有文件和配置?
从启动 GRUB 到启动内核传递参数以及将 ESP 安装到 FileSystm 的跳转看起来很奇怪和尴尬。
需要帮忙。
谢谢。
答案1
如何创建ESP?它是一个简单的分区,进一步格式化为FAT32吗?
是的,它是一个简单的分区,格式化为 FAT32(较新的 UEFI 版本也可能接受其他形式的 FAT),并且分区类型 UUIDGPT 样式分区表设置为指示它是 EFI 系统分区(或简称 ESP)。如果您从 MBR 分区磁盘启动 UEFI 样式,则 ESP 的分区类型代码应设置为,0xef
而不是常规的 FAT32 分区类型代码。
如何告诉 GRUB 安装在哪里?如何配置呢?
要安装 GRUB,grub-install
需要使用该命令。它将应安装 GRUB 的磁盘或分区的设备名称作为参数。
如果磁盘上只有一个 ESP(通常建议这样做),您可以只指定整个磁盘设备,例如/dev/sda
或/dev/nvme0n1
,就像安装旧版 BIOS 风格的 GRUB 时所做的那样。它会自动找到ESP并写入grubx64.efi
其中,并且将其注册到 UEFI NVRAM 固件变量中(您可以使用 查看efibootmgr -v
)。
如果要安装到可移动闪存磁盘,还应该指定--removable
选项grub-install
。如果磁盘本身不可移动,但您计划将其移动或克隆到另一个系统,--force-extra-removable
则您可能应该使用该选项。
一旦安装了 GRUB,grub-mkconfig
或者它的 Debian 特定update-grub
包装器,就可以用来创建 GRUB 配置文件。
在 Debian 中,ESP 的标准挂载点是/boot/efi
.其他发行版的做法可能有所不同。
当系统以 UEFI 方式引导时,固件将首先检查其 NVRAM 引导变量以获取引导顺序。 UEFI 样式的引导变量将指定设备、其上的 ESP 分区(主要由 ESP 的唯一 PARTUUID 标识)以及要在该 ESP 中使用的引导文件。对于永久安装的 Debian 发行版,启动文件路径名将为(Windows 样式,就像固件通常代表的那样)\EFI\debian\grubx64.efi
,或者\EFI\debian\shimx64.efi
如果还需要安全启动兼容性并且已安装 和 软件包shim-signed
。grub-efi-amd64-signed
如果没有启动变量(例如,因为选择了可移动媒体进行启动),64 位 x86 UEFI 系统将查找路径名(Windows 风格)\EFI\BOOT\BOOTx64.efi
。如果 GRUB 是使用--removable
或--force-extra-removable
选项安装的,则这实际上是grubx64.efi
.
因此,固件将启动 GRUB,然后 GRUB\EFI\debian\grub.cfg
将从 ESP 中读取数据。它通常只包含一个search
命令,告诉 GRUB 使用其 UUID 查找包含的任何分区 ,然后是从那里/boot/grub
读取所需的命令。 /boot/grub/grub.cfg
(根据系统的设置方式,这可能指根文件系统,或单独的/boot
文件系统 - 任何一种方式都可以。)
从 读取真实配置后/boot/grub/grub.cfg
,GRUB 将知道在哪里可以找到内核和 initramfs 文件,以及向用户呈现哪些菜单项。然后GRUB将加载选定的内核和initramfs文件,将指定的内核启动选项传递给内核命令行,然后启动内核。至此,GRUB、ESP、/boot
目录的启动时工作就全部完成了- 从此时开始,启动可以在没有它们的情况下继续进行。
内核将根据root=
内核引导选项和 initramfs 中的任何脚本找到根文件系统,一旦找到、检查(如果需要)并安装根文件系统,引导过程将能够访问真实的文件系统/etc
并根据在那里找到的信息。
在启动时,内核永远不会需要也无法访问/boot
ESP - 当内核启动时,引导加载程序和固件将已经从那里读取所需的所有内容。安装 ESP/boot/efi
仅是为了方便更新引导加载程序及其配置。如果您打算永远不这样做(例如,在将通过完全重新映像接收任何更新的嵌入式设备系统中),您可以完全卸载 ESP。