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


11

我在各种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中的参数安装根设备,然后init/systemd根据fstab正确地重新安装它。如果是这样,那么我认为init维持mtab。如果我的理论是正确的,我如何使init真正的根设备节点写入mtab我注意到这/etc/mtab实际上是到的符号链接/proc/mounts,这意味着mtab由内核维护。那么,如何配置/修补内核,而不是说根设备节点路径是/dev/rootmtab包含真实设备节点?

Answers:


4

通常,这是使用initramfs的人工产物。

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

什么是rootfs?

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

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

因此rootfs,这是为initramfs创建的根文件系统,无法卸载。

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


mount通过此设置提供rootfs on / type rootfs (rw)了initrd和/dev/root on / type ext2 (rw,relatime,block_validity,barrier,user_xattr)ext2硬盘。
Ciro Santilli冠状病毒审查六四事件法轮功

/dev/root用于initramfs的某些实现,但不用于其他实现-在这些情况下,这不是由于内核引起的。当使用initramfs时,它似乎是内核使用的占位符值。(也许可以在更高版本的内核中删除它)。 stackoverflow.com/questions/37310046/…–
sourcejedi


2

在Linux中,/dev/root(如果存在)是到引导时创建的实际设备的符号链接。

您可以使用readlink /dev/rootcat /proc/cmdline查看已root引导内核的参数,从而找出其背后的实际设备。

从人 dracut(8)

但是,要继续成功引导,目标是找到您的根卷并创建一个指向文件系统的符号链接/ dev / root。


我不完全确定是否 /dev/root是基于RedHat的发行版的人工制品。
Rui F Ribeiro

恩,我的Debian 8没有/dev/root/。在旧的CentOS上,它似乎是一个实际的设备节点,而不是符号链接。
ilkkachu

1
好吧,OpenEmbedded的base-files食谱fstab提到了/dev/root,因此它不仅仅是使用Red Hat的发行版。
2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.