Wie ermitteln Sie das Root-Gerät, wenn /dev/root fehlt?

Wie ermitteln Sie das Root-Gerät, wenn /dev/root fehlt?

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/rootzum echten Root-Gerät, aber meines macht das nicht. IchkönnteSchauen Sie sich den Inhalt an, /proc/cmdlineaber 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 findmntvorhanden...

Antwort2

Der mountfolgende 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 lsblkein 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

findmntaus demselben Paket erhalten Sie den tatsächlichen zugrunde liegenden Root-Gerätenamen:

findmnt -oTARGET,SOURCE -rn /
/ /dev/mapper/vg01-lv_root

Das Flag -Pfür beide Dienstprogramme liefert Ihnen dieselben Informationen in einem für evaldie 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 rdevBefehls automatisch interpretieren lassen.

verwandte Informationen