Warum wird auf einigen Linux-Systemen das Root-Dateisystem in mtab als / dev / root anstelle von / dev / <realer Geräteknoten> angezeigt?

11

Ich habe auf verschiedenen Linux-Systemen gesehen, dass anstelle des realen Geräteknotens (zum Beispiel :) /dev/sda1das Root-Gerät als /dev/rootoder anstelle des realen Dateisystems mtabals Dateisystem bezeichnet wird rootfs(das als reales Dateisystem in angezeigt wird /proc/filesystems, aber) hat keinen Code in <linux-kernel-source-tree>/fs). Es wurden verschiedene Dienstprogramme erstellt, um bestimmte Attribute zu verwenden, um den tatsächlichen Root-Geräteknoten zu bestimmen (z. B. rdev und Chromium OS rootdev). Ich kann keine logische Erklärung dafür finden, außer irgendwo zu lesen, dass sehr kleine eingebettete Geräte nicht immer einen /devGeräteknoten für ihr Root-Gerät haben müssen. (Ist das wahr, und wenn ja, ist das die Antwort auf meine Frage?) Warum sagt mtab manchmal /dev/root(und ich glaube, ich hätte es vielleicht gesehen ?)rootdeveinmal) anstelle des realen Geräteknotens, und wie kann ich dafür sorgen, dass immer der reale Geräteknoten angezeigt wird? Der Kernel stellt das Root-Gerät zuerst gemäß dem rootParameter in der cmdline bereit und stellt es dann init/systemdgemäß dem fstabkorrekten? Wenn ja, dann nehme ich an, initbehauptet mtab. Wenn meine Theorie korrekt ist, wie kann ich initden echten Root-Geräteknoten schreiben lassen mtab? Mir ist aufgefallen, dass dies /etc/mtabtatsächlich eine symbolische Verbindung zu ist /proc/mounts, was bedeuten würde, mtabdass der Kernel sie verwaltet. Wie kann ich einen Kernel so konfigurieren / patchen /dev/root, dass er mtabden realen Geräteknoten enthält , anstatt zu sagen, dass der Knotenpfad des Root-Geräts lautet ?

Billy
quelle

Antworten:

4

Dies ist im Allgemeinen ein Artefakt bei der Verwendung eines Initramfs.

Aus der Kerneldokumentation ( https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt )

Was ist rootfs?

Rootfs ist eine spezielle Instanz von ramfs (oder tmpfs, falls aktiviert), die in 2.6-Systemen immer vorhanden ist. Sie können rootfs nicht aus dem gleichen Grund aushängen, aus dem Sie den Init-Prozess nicht beenden können. Anstatt speziellen Code zum Suchen und Behandeln einer leeren Liste zu haben, ist es für den Kernel kleiner und einfacher, nur sicherzustellen, dass bestimmte Listen nicht leer werden können.

Die meisten Systeme mounten einfach ein anderes Dateisystem über rootfs und ignorieren es. Der Platz, den eine leere Instanz von Ramfs einnimmt, ist winzig.

Dies rootfsist das Root-Dateisystem, das für die initramfs erstellt wurde und nicht ausgehängt werden kann.

In Bezug auf /dev/rootbin ich mir weniger sicher, aber wenn ich mich richtig erinnere, /dev/rootwird es bei Verwendung eines initrd erstellt (nicht dasselbe wie ein initramfs).

Patrick
quelle
mountgibt rootfs on / type rootfs (rw)für initrd und /dev/root on / type ext2 (rw,relatime,block_validity,barrier,user_xattr)für ext2 Festplatte mit diesem Setup .
Ciro Santilli 30 改造 中心 法轮功 六四
/dev/rootwird von einigen Implementierungen von initramfs verwendet, andere jedoch nicht - in diesen Fällen liegt es nicht am Kernel. Wenn Sie kein initramfs verwenden, scheint es sich um einen Platzhalterwert zu handeln, der vom Kernel verwendet wird. (Vielleicht könnte es aber in einer späteren Kernel-Version entfernt werden). stackoverflow.com/questions/37310046/…
sourcejedi
3

Gentoo hat einen Patch, der genau dies tut (stellt sicher, dass das echte Root-Gerät angezeigt wird). Sie finden es hier: https://lkml.org/lkml/2013/1/31/574

Milos Ivanovic
quelle
2

Unter Linux ist /dev/root, falls vorhanden, ein Symlink zum tatsächlichen Gerät, das beim Booten erstellt wurde.

Sie verwenden readlink /dev/rootoder cat /proc/cmdline, um den rootParameter des gebooteten Kernels anzuzeigen, und ermitteln so das tatsächliche Gerät dahinter.

Vom Menschen dracut(8)

Um jedoch mit einem erfolgreichen Start fortzufahren, müssen Sie Ihr Root-Volume lokalisieren und einen Symlink / dev / root erstellen, der auf das Dateisystem verweist.

Rui F Ribeiro
quelle
Ich bin nicht ganz sicher, ob /dev/rootes sich um ein Artefakt von RedHat-basierten Distributionen handelt.
Rui F Ribeiro
Nun, mein Debian 8 hat nicht /dev/root/. Auf einem alten CentOS scheint es sich um einen tatsächlichen Geräteknoten anstelle eines Symlinks zu handeln.
Ilkkachu
1
Nun, OpenEmbedded's base-filesRezeptfstab erwähnt /dev/root, also sind es nicht nur Distributionen, die von Red Hat stammen, die es verwenden.
Bestätigen Sie den