Effiziente Möglichkeit, einen Geräte-Mountpoint anhand seiner UUID zu ermitteln

Effiziente Möglichkeit, einen Geräte-Mountpoint anhand seiner UUID zu ermitteln

In einem Skript, an dem ich arbeite, muss eine variable UUID verwendet werden, um den aktuellen Einhängepunkt zu ermitteln, an den ein Gerät angeschlossen ist. Die Lösung, die ich gefunden habe, ist diese:

UUID='fc70ae3d-65e7-4437-a371-b237c8ca3f56h'
MNTPNT=$(lsblk -o +UUID | grep ${UUID} | tr -s ' ' | cut -d ' ' -f 7)

Beim Ausführen des Befehls speichert die Variable MNTPNT wie erwartet den aktuellen Einhängepunkt. Allerdings handelt es sich dabei um einen ziemlich umfangreichen Befehl, und ich kann den Gedanken nicht unterdrücken, dass es einen effizienteren Weg geben muss, dasselbe Ziel zu erreichen.

Ist es möglich, eine bessere Lösung zu finden? Es wäre hauptsächlich eine Frage der Optimierung. Vielen Dank im Voraus für alle Erkenntnisse.

Antwort1

findmnt -noTARGET "/dev/disk/by-uuid/$UUID"

grep "$(stat -Lc '%#t %#T' "/dev/disk/by-uuid/$UUID" | xargs printf '%d:%d')" /proc/self/mountinfo

awk -v dev="$(stat -Lc '%#t %#T' "/dev/disk/by-uuid/$UUID" | xargs printf '%d:%d')" '$3~dev{print$5}' /proc/self/mountinfo

So trimmen Sie Bind-Mounts:

awk -v dev="$(stat -Lc '%#t %#T' "/dev/disk/by-uuid/$UUID" | xargs printf '%d:%d')" '$3~dev&&$4=="/"{print$5}' /proc/self/mountinfo

Bedenken Sie, dass Geräte an mehreren Orten montiert werden können.

Die $(stat ... | xargs printf)Monstrosität ist nur, weil stat(1)nicht in der Lage ist, die großen, kleinen Zahlen inDezimal. Einfach die Ausgabe zu analysieren ls -Hlwäre wahrscheinlich besser (und viel portabler).

Antwort2

df | grep "^$(readlink -f /dev/disk/by-uuid/$UUID) " |sed 's/^[^%]*% \+//'

Dies funktioniert auch, wenn Bind-Mounts von Unterverzeichnissen des Mounts vorhanden sind, was andere potenzielle Lösungen durcheinanderbringen könnte.

(Bearbeiten:)
Leerzeichen im Einhängepunkt zulassen.

(Edit2:)
Der Einhängepunkt kann auch "% " enthalten.

verwandte Informationen