如您所述,initramfs的目的是安装“真正的”根文件系统(它也可以做其他事情,但这是常见的任务)。
如果没有initramfs,内核通常会将分区挂载为只读,然后将控制权传递给/sbin/init
。通常,当根文件系统不是普通分区(mdraid,lvm,加密等)时,initramfs将从内核接手此任务。
现在,除了initramfs的背景之外,您还/etc/fstab
驻留在根文件系统上。因此,启动initramfs时,该根文件系统不存在,因此无法进入fstab(鸡肉和鸡蛋问题)。
取而代之的是,我们必须将参数传递到内核启动参数中,以供initramfs使用。通常这是类似的root=/dev/sdX
。但是,它也可以做一些事情来自动确定您的根设备在哪里,因此根本没有任何参数。由于它只是软件(通常是脚本),因此它可以真正完成挂载根设备所需的任何操作。
现在,如前所述,内核会将真实根挂载为只读。initramfs应该完全做到这一点。完成initramfs之后,系统将完全像完全没有initramfs一样继续引导,然后/sbin/init
启动。然后,此init启动所有正常的启动脚本,并且其中一个脚本的工作是读取/etc/fstab
,将root切换为读写,并挂载所有其他文件系统。