web-dev-qa-db-ja.com

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

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

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

コマンドを実行すると、変数MNTPNTは現在のマウントポイントを期待どおりに格納します。しかし、それはかなり広範なコマンドであり、同じ目的を達成するためのより効率的な方法が必要だと考えざるを得ません。

より良い解決策を考え出すことは可能ですか?ほとんどの場合、最適化の問題になります。洞察を事前に感謝します。

2
Livewire
_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) monstruosityは、stat(1)decimalのメジャーとマイナーの数値を出力できないためです。 _ls -Hl_の出力を解析するだけで、おそらくより良い(そしてはるかに移植性が高い)でしょう。

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

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

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

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

1
bavang