
Auf der Distribution, die ich gerade verwende, Arch Linux ARM, wird Linux ohne anfängliche RAM-Disk gestartet, was bedeutet, dass der Kernel die gesamte Arbeit beim Mounten des Root-Dateisystems übernimmt. Dieses System ist auf einer SD-Karte installiert und enthält ein Skript, das den Geräteknoten des Dateisystems bestimmen muss, auf dem es sich befindet. Dieser Geräteknoten kann sich ändern, je nachdem, wie ich das Gerät hochfahre (z. B. wenn ich es an ein anderes Gerät anschließe, das bereits läuft).
Ich kann den Einhängepunkt mithilfe von ermitteln df -k --output=target ${0} | sed "1d"
. Um das Quellgerät zu ermitteln, führe ich aus df -k --output=source ${0} | sed "1d"
. Wenn ich Arch Linux gestartet habe, gibt das Ergebnis dieses letzten Befehls aus /dev/root
:die es nicht gibt. Sicher, auf einigen Systemen erstellt udev einen symbolischen Link /dev/root
zum echten Root-Gerät, aber meines macht das nicht. IchkönnteSchauen Sie sich den Inhalt an, /proc/cmdline
aber dieser bleibt während der gesamten Betriebszeit eines Kernels gleich, was bedeutet, dass er nicht zuverlässig ist.
Wenn ich erhalte /dev/root
, wie kann ich das tatsächlich zugrunde liegende Blockgerät ermitteln, für das es steht?
Antwort1
Antwort vondie Kommentare hierist ganz einfach. Rufen Sie einfach an:
findmnt -n -o SOURCE /
Sofern findmnt
vorhanden...
Antwort2
Der mount
folgende Befehl zeigt es:
mount | sed -n 's|^/dev/\(.*\) on / .*|\1|p'
Antwort3
ich fanddieser Blog-Beitragsehr hilfreich beim Suchen des Root-Geräts und der primären Festplatte in Linux.
Sie müssen lsblk
ein Dienstprogramm installieren, das in CentOS/RHEL bereitgestellt wird util-linux
. Beispielsweise gibt Ihnen eine solche Variante den Festplattennamen des Root-Geräts:
lsblk -oMOUNTPOINT,PKNAME -rn | awk '$1 ~ /^\/$/ { print $2 }'
sda3
findmnt
aus demselben Paket erhalten Sie den tatsächlichen zugrunde liegenden Root-Gerätenamen:
findmnt -oTARGET,SOURCE -rn /
/ /dev/mapper/vg01-lv_root
Das Flag -P
für beide Dienstprogramme liefert Ihnen dieselben Informationen in einem für eval
die Shell geeigneten Format:
findmnt -oTARGET,SOURCE -Pn /
TARGET="/" SOURCE="/dev/mapper/vg01-lv_root"
lsblk -oMOUNTPOINT,PKNAME -Pn | grep 'MOUNTPOINT="/"'
MOUNTPOINT="/" PKNAME="sda3"
Antwort4
Sie können stat /
die Haupt-/Nebennummer des Geräts verwenden und prüfen oder diese mithilfe des rdev
Befehls automatisch interpretieren lassen.