为什么在某些 Linux 系统上,根文件系统在 mtab 中显示为 /dev/root 而不是 /dev/<real device node>?

Bil*_*lly 12 linux root-filesystem

我在各种 Linux 系统上看到过/dev/sda1,根设备不是真实设备节点(例如:)/dev/root,而是显示为,或者不是真实文件系统,mtab表示它是一个名为rootfs(在 中显示为真实文件系统/proc/filesystems,但是中没有代码<linux-kernel-source-tree>/fs)。已经制作了各种实用程序来使用某些属性来确定真正的根设备节点(例如 rdev 和 Chromium OS rootdev)。除了在某处读到非常小的嵌入式设备并不总是必须/dev为它们的根设备提供设备节点之外,我找不到任何合乎逻辑的解释。(这是真的吗,如果是,那是我问题的答案吗?)为什么 mtab 有时会说/dev/root(我想我可能已经看到它说rootdev一次)而不是真实设备节点,我怎样才能让它总是说真实设备节点?内核首先root按照cmdline中的参数挂载root设备,然后init/systemd按照 重新挂载,对fstab吗?如果是这样,那么我认为init维护mtab. 如果我的理论是正确的,我怎样才能init将真正的根设备节点写入mtab我注意到这/etc/mtab实际上是到 的符号链接/proc/mounts,这意味着mtab由内核维护。那么,如何配置/修补内核,而不是说的根设备节点的路径/dev/root,已经mtab包含了真实的设备节点?

phe*_*mer 5

这通常是使用 initramfs 的产物。

来自内核文档(https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt

什么是rootfs?

Rootfs 是 ramfs(或 tmpfs,如果已启用)的一个特殊实例,它始终存在于 2.6 系统中。您无法卸载 rootfs 的原因与您无法终止 init 进程的原因大致相同;与使用特殊代码来检查和处理空列表相比,内核确保某些列表不会变空更小更简单。

大多数系统只是在 rootfs 上挂载另一个文件系统并忽略它。一个空的 ramfs 实例占用的空间很小。

rootfs就是为 initramfs 创建的根文件系统,不能卸载。

关于/dev/root,我不太确定,但如果我没记错的话/dev/root是在使用 initrd(与 initramfs 不同)时创建的。