initramfs 是否使用 /etc/fstab?

Ahm*_*nim 20 boot initramfs fstab

按照我的理解,initramfs 负责加载“真正的”根文件系统。

现在,我们在两个地方定义了这个根。首先我们在/etc/fstab. 其次,我们将设备放在内核引导命令上,例如root=/dev/sda1.

initramfs 使用哪一个来确定根文件系统在哪里?如果它使用 root 内核参数,为什么我们在 中有一个条目/etc/fstab?第二个选项(它读为/etc/fstab)是非常不合逻辑的,因为该/etc/fstab文件位于 initramfs 最初尝试挂载的根设备上。

很混乱的东西。

phe*_*mer 15

正如您所说,initramfs 的目的是安装“真正的”根文件系统(它也可以做其他事情,但这是常见任务)。

如果没有 initramfs,内核通常会将分区挂载为只读,然后将控制权交给/sbin/init. initramfs 只是从内核接管这项任务,通常是当根文件系统不是普通分区(mdraid、lvm、加密等)时。

现在,除了 initramfs 的背景之外,您还/etc/fstab驻留在根文件系统上。因此,当启动 initramfs 时,该根文件系统不存在,因此无法访问 fstab(鸡和蛋问题)。
相反,我们必须将参数传递到内核引导参数中以供 initramfs 使用。通常这类似于root=/dev/sdX. 但是,它也可能会自动找出根设备的位置,因此根本没有参数。因为它只是一个软件(通常是一个脚本),它真的可以做任何它想做的事情来挂载根设备。

现在,如前所述,内核将以只读方式挂载真正的根。initramfs 应该完全做到这一点。一旦 initramfs 完成,系统就会像根本没有 initramfs 一样继续引导,然后/sbin/init启动。然后这个 init 启动所有正常的引导脚本,这些脚本之一的工作是读取/etc/fstab、将 root 切换为读写,以及挂载所有其他文件系统。

  • 是的。通常通过简单的`mount -o remount,rw /`。它不会更改挂载的设备,但会更改挂载上的选项。来自手册页:`在此调用之后,mount 读取 fstab(或 mtab)并将这些选项与命令行中的选项合并` (3认同)
  • `lsinitramfs /boot/initrd* | lsinitramfs /boot/initrd* | fgrep fstab` 令人惊讶的是,initramfs 确实包含 fstab 文件,至少对我来说是这样。 (2认同)