UUIDからデバイスのマウントポイントを取得する効率的な方法

UUIDからデバイスのマウントポイントを取得する効率的な方法

私が取り組んでいるスクリプトでは、デバイスが接続されている現在のマウントポイントを取得するために、変数 UUID を使用する必要があります。私が思いついた解決策は次のとおりです。

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

コマンドを実行すると、変数MNTPNTは期待どおりに現在のマウントポイントを保存します。ただし、これはかなり広範囲にわたるコマンドであり、同じ目的を達成するにはもっと効率的な方法があるはずだと考えざるを得ません。

もっと良い解決策を思いつくことは可能でしょうか? 主に最適化の問題になります。ご意見をお寄せいただければ幸いです。

答え1

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

バインドマウントをトリミングするには:

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

デバイスは複数の場所に取り付けることができることに注意してください。

この怪物は、メジャーとマイナーの数字を印刷できない$(stat ... | xargs printf)というだけのことだstat(1)小数点の出力を解析するだけの方がls -Hlおそらく良いでしょう (そして移植性もはるかに高くなります)。

答え2

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

これは、マウントのサブディレクトリにバインドマウントが存在する場合にも機能し、他の潜在的なソリューションを混乱させる可能性があります。

(編集:)
マウントポイントにスペースを許可します。

(編集2:)
マウントポイントには「%」も含まれる場合があります。

関連情報