我试图解决一个涉及遗留 grub (0.97)、LVM2 和 dracut 的 linux 引导配置问题,并试图消除一些红鲱鱼。
我的试错过程是这样的:
- 修改 grub.conf
- 通过 grub shell 将 grub.conf 安装到 MBR
- 重启
- 内核恐慌
为了删除 #4,我是否错过了需要更新 initramfs 映像的步骤?
initramfs 映像包含哪些可能与引导期间挂载的文件系统有关的内容?
我试图弄清楚如何通过将新操作系统放在备用 LVM 分区上,然后修改 grub.conf/menu.lst 以从备用分区启动,以最少的停机时间编写正在运行的系统的大规模升级脚本。
该操作系统基于 CentOS 6,我们使用 Anaconda 安装程序 - 出于某种原因,Anaconda 创建了一个/boot/grub/grub.conf
文件并将其符号链接到/boot/grub/menu.lst
.
您提到了 grub.conf 和 Grub 0.97。Grub 0.97 不使用
grub.conf
. 它使用menu.lst
. 听起来好像您的系统上都安装了两个二进制文件,并且您有些混淆了。更改 grub.conf 或 menu.list 时不必重新构建 initramfs/initrd 文件。两者之间几乎没有关系,至少在我见过的任何发行版上都没有。
grub 文件必须存在于 initramfs 之外,因为它们是在加载 ramdisk 之前使用的。Grub 调用内核并将其指向 ramdisk 映像的位置。例如,如果您在 grub 菜单中添加另一个选项来启动另一个操作系统,则您无需对 initramfs 执行任何操作。
如果您确实更改了有关系统启动方式的某些内容,那么您可能需要同时更改 grub 配置和其他配置,这可能需要您更新 initramfs。因此,您可能需要同时更新两者,但您不需要更新 initramfs,因为您更新了 grub,或者相反。
必须有一个引导分区,其中包含
这个引导分区必须是 grub 可以读取的,所以它不能在 LVM 中。在引导磁盘的前面创建一个单独的小型主分区是一个很好的做法(我通常为此使用 100MB,通常挂载为 /boot)。
initramfs 中存在什么以及如何配置它取决于您的实现。通常,您的 Linux 发行版包含其特定的 initramfs 实现(因此这完全取决于您使用的发行版)。
initramfs 必须能够挂载根文件系统,为此,它需要内核模块来访问该磁盘、分区和文件系统,除非它们已经编译到内核本身中。它还需要某种方式来指定您选择的根文件系统以及要使用的挂载选项。在更改某些设置、选择不同的根文件系统或使用不同的挂载选项时,某些实现必须更新 initramfs 映像。但是,可以通过从内核命令行读取必要的参数来编写不需要任何更新的 initramfs 实现,除非在更改/升级/重新编译内核和模块时。所以要知道你的 initramfs 实现是如何工作的,你要么必须阅读里面的脚本,