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/^[^%]*% \+//'

이는 마운트의 하위 디렉터리에 바인드 마운트가 있는 경우에도 작동하며, 이로 인해 다른 잠재적인 솔루션이 혼동될 수 있습니다.

(편집:)
마운트 지점에 공백을 허용합니다.

(Edit2:)
마운트 지점에는 "% "도 포함될 수 있습니다.

관련 정보