Dies sollte wahrscheinlich aktualisiert werden, da viele der hier gegebenen Informationen irreführend sind und möglicherweise nie vollständig korrekt waren.
https://bootlin.com/blog/find-root-device/
Für den / mount-Punkt wird Ihnen lediglich mitgeteilt, dass er / dev / root entspricht, was nicht das richtige Gerät ist, das Sie suchen.
Natürlich können Sie in der Kernel-Befehlszeile nachsehen, auf welchem ursprünglichen Root-Dateisystem Linux zum Booten angewiesen wurde (root-Parameter):
$ cat / proc / cmdline mem = 512M console = ttyS2,115200n8 root = / dev / mmcblk0p2 rw rootwait
Dies bedeutet jedoch nicht, dass Sie das aktuelle Root-Gerät sehen. Viele Linux-Systeme booten auf zwischengeschalteten Root-Dateisystemen (wie initramdisks und initramfs), die nur für den Zugriff auf das letzte verwendet werden.
Eine Sache, auf die dies hinweist, war, dass das Ding in / proc / cmdline nicht unbedingt das eigentliche Endgerät ist, auf dem Root-Benutzer tatsächlich leben.
Das ist von den Busybox-Leuten, von denen ich annehme, dass sie wissen, wovon sie reden, wenn es um Boot-Situationen geht.
https://www.linuxquestions.org/questions/slackware-14/slackware-current-dev-root-688189/page2.html
Die zweite nützliche Ressource, die ich gefunden habe, ist ein sehr alter Slackware-Thread über die Frage von / dev / root. Ab dem Alter dieses Threads können wir sehen, dass alle Varianten immer vorhanden waren, aber ich glaube, dass die meisten Distributionen die Symbolik verwendeten Link-Methode, aber das war ein einfacher Kernel-Kompilierungs-Schalter, es könnte einen machen oder keinen machen, wenn ich die Poster richtig verstehe, das heißt, es in eine Richtung wechseln, und readlink / dev / root meldet den realen Gerätenamen und schaltet ihn um der andere, und das tut es nicht.
Da das Hauptthema dieses Threads war, wie man / dev / root loswird, mussten sie sich damit befassen, was es eigentlich ist, was es ausmacht usw. Das heißt, sie mussten es verstehen, um es loszuwerden.
knifflig erklärt es gut:
/ dev / root ist ein generisches Gerät, das in der fstab verwendet werden kann. Man kann auch 'rootfs' verwenden. Dies bietet den Vorteil, dass Sie weniger spezifisch sind. Ich meine, wenn sich die Root-Partition auf einem externen Laufwerk befindet, wird sie möglicherweise nicht immer als dasselbe Gerät angezeigt und kann erfolgreich gemountet werden, da / die fstab geändert werden muss, um dem richtigen Gerät zu entsprechen. Mit / dev / root wird immer das Gerät gefunden, das in den Kernel-Boot-Parametern von lilo oder grub angegeben ist.
/ dev / root war immer als virtueller Einhängepunkt vorhanden, auch wenn Sie ihn nie gesehen haben. Auch rootfs (vergleiche dies mit den speziellen virtuellen Geräten wie proc und tmpfs, die kein vorheriges / dev haben)
/ dev / root ist ein virtuelles Gerät wie 'proc' oder / dev / tcp '. Es gibt keinen Geräteknoten in / dev für diese Dinge - er ist bereits als virtuelles Gerät im Kernel.
Dies erklärt, warum ein symbolischer Link nicht unbedingt existiert. Ich bin überrascht, dass ich dieses Problem noch nie zuvor angetroffen habe, da ich einige Programme verwalte, die diese Informationen benötigen, aber besser spät als nie.
Ich glaube, einige der hier angebotenen Lösungen werden "oft" funktionieren und sind wahrscheinlich das, was ich tun werde, aber sie sind nicht die eigentliche wahre Lösung für das Problem, das, wie der Autor der Busybox bemerkte, in einer sehr komplizierten Weise zu implementieren ist robuste Weise.
[UPDATE:} Nachdem ich einige Benutzertestdaten erhalten habe, gehe ich zur Mount-Methode über, die zumindest in einigen Fällen in Ordnung zu sein schien. Die / proc / cmdline war nicht nützlich, da es zu viele Varianten gibt. Im ersten Beispiel sehen Sie die alte Methode. Dies kommt immer seltener vor, da von der Verwendung dringend abgeraten wird (die ursprüngliche Syntax vom Typ / dev / sdx [0-9]), da sich diese Pfade dynamisch ändern können (Plattenreihenfolge tauschen, neue Platte einlegen usw. und plötzlich / dev / sda1 wird zu / dev / sdb1).
root=/dev/sda1
root=UUID=5a25cf4a-9772-40cd-b527-62848d4bdfda
root=LABEL=random string
root=PARTUUID=a2079bfb-02
VS die sehr sauber und einfach zu analysieren:
mount
/dev/sda1 on / type ext4 (rw,noatime,data=ordered)
Im Fall von cmdline werden Sie sehen, dass die einzige Variante, die in der Theorie die richtige 'Antwort' ist, die erste, veraltete Variante ist, da Sie nicht root auf ein sich bewegendes Ziel wie / dev / sdxy verweisen sollten
Bei den nächsten beiden Schritten muss die symbolische Verknüpfung aus dieser Zeichenfolge entweder in / dev / disk / by-uuid oder / dev / disk / by-label abgerufen werden
Das letzte setzt voraus, dass ich glaube, dass ich parted -l verwende, um herauszufinden, auf was diese ID zeigt.
Das sind nur die Varianten, die ich kenne und die ich gesehen habe. Es könnte auch andere geben, wie zum Beispiel GPTID.
Also die Lösung, die ich benutze, ist diese:
Überprüfen Sie zunächst, ob / dev / root eine symbolische Verknüpfung ist. Wenn dies der Fall ist, überprüfen Sie, ob es sich nicht um / dev / disk / by-uuid oder by-label handelt. Wenn dies der Fall ist, müssen Sie einen zweiten Verarbeitungsschritt ausführen, um den letzten tatsächlichen Pfad abzurufen. Hängt vom verwendeten Tool ab.
Wenn Sie nichts haben, gehen Sie zum Mount und sehen Sie, wie das ist. Ein letzter Fall, den ich nicht benutze, weil die Argumente, die dagegen angeführt werden, nicht unbedingt die tatsächliche Partition oder das betreffende Gerät sind, gut genug sind, um diese Lösung für mein Programm abzulehnen. mount ist keine robuste Lösung, und ich bin mir sicher, dass es bei genügend Beispielen leicht ist, Fälle zu finden, in denen es überhaupt nicht richtig ist, aber ich glaube, dass diese beiden Fälle die meisten Benutzer abdecken, was alles ist, was ich brauche.
Die schönste, sauberste und zuverlässigste Lösung wäre gewesen, wenn der Kernel immer nur die symbolische Verknüpfung hergestellt hätte, die weder irgendetwas noch irgendjemanden geschadet hätte, und sie als gut bezeichnet hätte, aber in der realen Welt hat das nicht funktioniert. .
Ich betrachte keine dieser Lösungen als "gut oder robust", aber die Mount-Option scheint die "gut genug" zu erfüllen, und wenn die wirklich robuste Lösung erforderlich ist, verwenden Sie das von busybox empfohlene Material.