Linux和Initrd中的Chicken/EggEgg问题

时间:2019-05-19 01:25:42  来源:igfitidea点击:

什么是Chicken/Egg问题?

Linux引导过程中出现了Chicken/Egg问题(先有鸡还是先有蛋)

Linux内核需要模块挂载root分区,root分区通常使用ext3文件系统、LVM、RAID等。
所有Linux模块都驻留在/var/lib/($uname -r)目录中,但是Linux内核在不挂载它的情况下无法访问它们。
所以问题是Linux内核访问模块需要如何挂载root分区。

Linux内核如何解决它

grub引导加载程序和Linux内核一起使用初始Ram磁盘(initrd)解决这个问题,这是用于Linux内核的grub规范的一部分。
初始RAM磁盘(initrd)是特定于特定硬件和软件平台的。
它是在系统安装时创建的,包括需要挂载文件系统的模块。

重新创建initrd文件

有时我们需要重新创建initrd文件。
创建内核用于预加载访问根文件系统所需的块设备模块(如IDE、SCSI或RAID)的初始ram磁盘映像。

# mkinitrd -f /boot/initrd-$(uname -r).img $(uname -r)

第一个参数是initrd映像的位置。
第二个参数告诉/var/lib/中包含模块的目录名。
还可以使用-with关键字强制在initrd映像文件中添加特定模块。

#  mkinitrd --with=scsi_mod -f /boot/initrd-$(uname -r).img $(uname -r)

本文基于RHEL/CentOS 5系统。
RHEL/CentOS 6系统模块目录不同于CentOS 5。