每次修改 grub.conf 时是否需要更新 initramfs 映像文件?

每次修改 grub.conf 时是否需要更新 initramfs 映像文件?

我正在尝试解决涉及旧版 grub (0.97)、LVM2 和 dracut 的 Linux 启动配置问题,并尝试消除一些干扰因素。

我的反复试验过程如下:

  1. 修改grub.conf
  2. 通过 grub shell 将 grub.conf 安装到 MBR 中
  3. 重启
  4. 内核崩溃

为了删除#4,我是否错过了需要更新 initramfs 映像的步骤?

initramfs 映像包含哪些可能与启动期间安装的文件系统有关的内容?

我正在尝试弄清楚如何通过将新操作系统放在备用 LVM 分区上,然后修改 grub.conf/menu.lst 以从备用分区启动,以最少的停机时间编写正在运行的系统的整体升级脚本。

该操作系统基于 CentOS 6,我们使用 Anaconda 安装程序 - 出于某种原因,Anaconda 创建了一个/boot/grub/grub.conf文件并将其符号链接到/boot/grub/menu.lst

答案1

您提到了 grub.conf 和 Grub 0.97。Grub 0.97 不使用grub.conf。它使用menu.lst。听起来好像您在系统上安装了两个二进制文件,但您把事情弄得有点混乱。

你不需要重建 initramfs/initrd 文件更改 grub.conf 或 menu.list 时。这两者之间几乎没有关系,至少在我见过的任何发行版中都没有关系。

grub 文件必须存在于 initramfs 之外,因为它们在加载 ramdisk 之前被使用。Grub 调用内核并将其指向 ramdisk 映像的位置。例如,如果您在 grub 菜单中添加另一个选项来启动另一个操作系统,则您无需对 initramfs 进行任何操作。

如果您确实更改了系统启动方式,那么您可能需要更改 grub 配置和其他配置,这可能需要您更新 initramfs。因此,您可能需要更新两者,但您不需要因为更新 grub 而更新 initramfs,反之亦然。

答案2

必须有一个启动分区,其中包含

  • grub.conf,
  • 要加载的内核,
  • initramfs 映像,
  • 一些 grub 组件(通常安装到 /boot/grub)。

此启动分区必须可由 grub 读取,因此它不能位于 LVM 中。在启动磁盘的前面创建一个单独的小型主分区(我通常为此使用 100MB,通常安装为 /boot)是一种很好的做法。

initramfs 中的内容及其配置方式取决于您的实现。通常,您的 Linux 发行版包含其特定的 initramfs 实现(因此这完全取决于您使用的发行版)。

initramfs 必须能够挂载根文件系统,为此,它需要必要的内核模块来访问该磁盘、分区和文件系统,除非它们已经编译到内核本身中。它还需要某种方式来指定您选择的根文件系统和要使用的挂载选项。某些实现在更改某些设置、选择不同的根文件系统或使用不同的挂载选项时必须更新 initramfs 映像。但是,可以编写一个不需要任何更新的 initramfs 实现,除非更改/升级/重新编译内核和模块,方法是从内核命令行读取必要的参数。因此,要了解您的 initramfs 实现的具体工作原理,您必须阅读里面的脚本,或者阅读特定于您的发行版的文档。

相关内容