我试图解决一个涉及传统grub(0.97),LVM2和dracut的linux启动configuration问题,并试图消除一些红鲱鱼。
我的试错过程如下:
为了消除#4,我是否缺less一个需要更新initramfs映像的步骤?
initramfs映像包含哪些与启动过程中挂载的文件系统有关的内容?
我试图找出如何通过在备用LVM分区上放置一个新的操作系统,然后修改grub.conf / menu.lst以从备用分区启动,以最小的停机时间对脚本进行批量升级。
操作系统基于CentOS 6,我们使用Anaconda安装程序 – 出于某种原因,Anaconda创build一个/boot/grub/grub.conf文件,并将其链接到/boot/grub/menu.lst 。
你提到grub.conf和Grub 0.97。 Grub 0.97不使用grub.conf 。 它使用menu.lst 。 这有点听起来像你的系统上安装了两个二进制文件,你有混乱的东西了一点。
在更改grub.conf或menu.list时, 不必重新构buildinitramfs / initrd文件 。 两者之间几乎没有任何关系,至less不是我见过的任何发行版。
grub文件必须存在于initramfs之外,因为在ramdisk被加载之前使用它们。 Grub调用内核并将其指向虚拟盘映像的位置。 如果你在grub菜单中添加另一个选项来启动另一个操作系统,你不需要对你的initramfs做任何事情。
如果你确实改变了你的系统启动方式,那么你可能需要修改你的grubconfiguration和其他configuration,这可能需要你更新你的initramfs。 所以,你可能需要同时更新,但是你不需要更新initramfs,因为你更新了grub,或者反过来。
必须有一个启动分区,它保存
这个引导分区必须可以被grub读取,所以它不能在LVM中。 在启动磁盘的前端创build一个单独的小主分区是一个很好的做法(我通常使用100MB,通常挂载为/ boot)。
initramfs中的内容以及如何configuration,取决于您的实现。 通常,您的Linux发行版包含特定的initramfs实现(所有这一切取决于您使用的发行版)。
initramfs必须能够挂载根文件系统,为此,它将需要内核模块来访问该磁盘,分区和文件系统,除非它们已经被编译到内核中。 它还需要一些方法来指定您select的根文件系统,以及要使用的安装选项。 某些实现必须在更改某些设置,select不同的根文件系统或使用不同的安装选项时更新initramfs映像。 但是,通过从内核命令行读取必要的参数,可以编写一个不需要任何更新的initramfs实现,除非更改/升级/重新编译内核和模块。 所以要知道你的initramfs实现是如何工作的,你必须阅读里面的脚本,或者阅读你的发行版特有的文档。