据我所知,initramfs负责加载“真实”根文件系统。
现在,有两个地方我们定义了这个根。首先,我们在/etc/fstab中添加了一个条目。其次,我们将设备放在内核引导命令上,例如root=/dev/sda1。
initramfs使用哪一个来确定根文件系统在哪里?如果它使用根内核参数,为什么我们在/etc/fstab中有一个条目?第二个选项(它读取/etc/fstab)非常不合逻辑,因为/etc/fstab文件位于initramfs最初试图挂载的根设备上。
非常令人困惑的东西。
发布于 2013-09-28 07:04:07
正如您所述,initramfs的目的是安装“真正的”根文件系统(它也可以做其他事情,但这是常见的任务)。
如果没有initramfs,内核通常会将分区挂载为只读,然后将控制传递给/sbin/init。initramfs只是从内核接管这个任务,通常是当根文件系统不是一个正常的分区(mdraid、lvm、加密等)时。
现在,除了initramfs的背景之外,您的/etc/fstab驻留在根文件系统上。因此,当启动initramfs时,根文件系统就不存在了,因此它无法进入fstab (鸡肉和鸡蛋问题)。
相反,我们必须将一个参数传递到内核引导参数中,以便initramfs使用。通常情况下,这类似于root=/dev/sdX。但是,它也可能会自动确定根设备在哪里,因此根本就没有参数。因为它只是一个软件(通常是一个脚本),它真的可以做任何它想要的挂载根设备的事情。
现在,如前所述,内核将将真正的根挂载为只读。initramfs应该做到这一点。一旦完成initramfs,系统就会启动,就好像根本没有initramfs一样,并且启动了/sbin/init。这个init然后启动所有正常的引导脚本,其中一个脚本的工作是读取/etc/fstab,将根切换为读-写,并挂载所有其他文件系统。
发布于 2013-09-28 00:17:45
它可能会也可能不会。因为Initramfs可以以各种方式构造(内核只是加载它并运行/init,它可以执行任何操作)。但是,使用参数更常见,因为它允许更多的灵活性--也就是说,如果某些东西发生了变化,您只需编辑引导条目就可以了。使用内置硬编码的根,这不一定是可能的。
fstab条目可能仍然是需要的,因为它还决定了其他事情,例如挂载选项(其中一些选项可以在go中更改)和fsck顺序。而且,即使它完全是多余的(如果Initramfs处理它,它可能没有工作),我仍然会为了完整性而将条目保存在那里。
发布于 2013-09-28 00:17:19
您可以将/etc/fstab视为静态挂载,它只是执行此类任务的一种方式,但实际上并不是唯一运行命令挂载的方法,而且您可以看到很多在fstab中缺少的文件系统。这样的服务udev和udisk管理许多“自动生成”,忽略/etc/fstab文件.
因此,如果某个东西被挂载或不经常挂载,它与/etc/fstab无关。
initramfs --它只是在引导过程中使用的临时rootfs,直到"true“rootfs被挂载,那么为什么initramfs应该在/etc/fstab上呢?
https://unix.stackexchange.com/questions/92720
复制相似问题