UUID로 파티션을 마운트했는지 확인하는 방법은 무엇입니까?


16

드라이브 파티션의 UUID가있는 경우 명령 행을 사용하여 마운트되었는지 여부를 어떻게 알 수 있습니까?


드라이브에 UUID가 중복되어 있으므로이를 피할 수 없습니다.
Joshua

나는 파티션의 UUID를로 변경할 수 있다고 생각합니다 tune2fs.
Arronical

@Joshua, @Arronical 예,로 UUID를 변경할 수 있습니다 tune2fs -U random /dev/sdxx. 그러나 이것은 모든 유형의 파티션에서 작동하지는 않습니다.
카투

실제로는 작동하지 않습니다. 드라이브는 미러링되므로 동일한 UUID를 가져야합니다. UUID로 탐지하려고하면 미러 장치 만이 아니라 중복 경로가 반환됩니다.
Joshua

답변:


20

lsblk도움이 될 수 있습니다. UUID와 마운트 지점 만 인쇄 할 수 있으므로 UUID가 지정된 경우 마운트 지점이 비어 있지 않은지 확인하십시오.

uuid=foo
lsblk -o UUID,MOUNTPOINT | awk -v u="$uuid" '$1 == u {print $2}'

그래서:

uuid=foo
mountpoint=$(lsblk -o UUID,MOUNTPOINT | awk -v u="$uuid" '$1 == u {print $2}')
if [[ -n $mountpoint ]]
then
    echo mounted
else
    echo not mounted
fi

때문에 lbslk특정 장치에서 작동 할 수 있습니다, 당신은 또한 할 수 있습니다 :

mountpoint=$(lsblk -o MOUNTPOINT "/dev/disk/by-uuid/$uuid" | awk 'NR==2')

첫 번째 방법을 사용하면 해당 UUID가 현재 연결된 디스크가 아닌 경우 오류가 발생하지 않습니다. 두 번째 방법으로 존재하지 않으면 lsblk오류가 발생 /dev/disk/by-uuid/$uuid합니다.


17
lsblk -o UUID,SIZE,MOUNTPOINT

UUID 및 마운트 포인트가있는 한 줄만 원할 경우 ($ UUID는 UUID를 나타냄) :

lsblk -o UUID,MOUNTPOINT|grep "$UUID"

마운트 포인트가 마운트 해제되면 비어 있습니다. lsblk -h더 많은 옵션을 시도하십시오 .

awk결과를 인쇄하는 데 사용 합니다. 경우 NF(필드 수)보다 더 그것은이 마운트 포인트를 갖는 것을 의미한다 :

lsblk -o UUID,MOUNTPOINT|grep "$UUID"|awk '{if (NF>1) print $1" is mounted"; else print $1" is unmounted";}'

3
예, 이것! 정확히 이것! 특정 UUID를 필터링 할 수 그렙으로 개선 될 수있다, 어쩌면 AWK와 분석
세르지 Kolodyazhnyy

9

세부 정보를 원하는 경우 mount

for uuid in /dev/disk/by-uuid/*; do if [[ "$uuid" =~ .*your-UUID-here.* ]]; then echo $(mount | grep "$(readlink -e "$uuid")") ; fi; done

your-UUID-hereUUID로 교체

더 읽기 쉽게 :

 for uuid in /dev/disk/by-uuid/*; do 
   if [[ "$uuid" =~ .*your-UUID-here.* ]]
     then echo $(mount | grep "$(readlink -e "$uuid")")
   fi
 done

출력 예 :

/dev/mmcblk1p2 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)

문자열이 null이 아닌지 확인하고 "마운트 된"에코를 만들 수 있습니다.

for uuid in /dev/disk/by-uuid/*; do if [[ "$uuid" =~ .*your-UUID-here.* ]]; then if [[ $(mount | grep "$(readlink -e "$uuid")") ]]; then echo "mounted"; fi; fi; done

그러나 다른 사람들은 더 나은 방법을 제시했습니다. :)


나는 대안 경로 +1 :)
Arronical

@Arronical 매우 관대 한 : D
Zanna

6

데비안은 UDisks2데몬을 사용하는데 , 파일 시스템에 대한 많은 정보를 폴링 udisksctl하고, 출력을 사용 하고 필터링하여 필요한 정보를 빠르고 쉽게 찾을 수 있습니다.

udisksctl dump | python -c 'import sys;lines = [l.strip() for l in sys.stdin if " UUID" in l or " MountPoints:" in l];print "\n".join(lines)'

위에서 보았 듯이 기본적으로 파일 시스템의 UUID와 해당 마운트 지점을 인쇄합니다. 육안 검사를 통해 이제 어떤 UUID가 마운트되고 어떤 UUID가 마운트되지 않았는지 파악할 수 있습니다.

$ udisksctl dump | python -c 'import sys;lines = [l.strip() for l in sys.stdin                                           
> if " UUID" in l or " MountPoints:" in l];print "\n".join(lines)'
MountPoints:        /
UUID:               000b5321-01
MountPoints:
UUID:               bbf23a81-808e-11e4-a445-201a06d7b0e9
MountPoints:
UUID:               bbf23a87-808e-11e4-a445-201a06d7b0e9
MountPoints:
UUID:               bbf23a89-808e-11e4-a445-201a06d7b0e9
MountPoints:
UUID:               bbf23a8f-808e-11e4-a445-201a06d7b0e9
MountPoints:
UUID:               02fe8de2-a408-11e4-8eeb-f0761c8c6df7
MountPoints:        /mnt/HDD
UUID:               53827413-0b7e-4ae6-ae09-1daea529d6a1

6

내 솔루션

  • 껍질 만 사용하고 procfs 하므로 이상한 명령 출력 형식 문제가 없습니다.
  • 장치 UUID를 (다시) 스캔하지 않지만 커널 캐시를 사용합니다.
  • 따라서 수퍼 유저 권한이 필요하지 않습니다.
  • 정규화 된 경로 이름에 의존하지 않지만 (장치) 파일 ID를 사용합니다.
my_uuid=...
while IFS=' ' read -r dev mnt remainder; do
  case "$dev" in
  /dev/*)
    if [ "$dev" -ef "/dev/disk/by-uuid/$my_uuid" ]; then
      echo "$my_uuid ($dev) mounted at $mnt"
      break
    fi;;
  esac
done < /proc/mounts

5

이 질문에 대한 훌륭한 답변을 바탕으로 장치 이름으로 작업하는 것이 훨씬 쉽다는 것을 깨달았습니다. UUID에서 장치 이름을 가져 오려면

disk_uuid=foo
disk_devname=$(blkid -U "$disk_uuid")

즉, 출력을 grepping하여 마운트 된 경우 신속하게 추론 할 수 있습니다 df.

df | grep -q "$disk_devname" && echo "Disk mounted" || echo "Disk not mounted"

또는 Muru의 답변 에있는 코드를 사용 하면 드라이브가 장착 된 위치를 알려주는 추가 보너스가 있습니다.

mountpoint=$(lsblk -no MOUNTPOINT "$disk_devname")
if [[ -n  "$mountpoint" ]]; then
   echo "Disk is mounted at $mountpoint"
else
   echo "Disk not mounted"
fi

4

df명령을 사용하여 마운트 된 파일 시스템 및 해당 마운트 지점을 볼 수 있습니다 . 다음은 내 컴퓨터의 예입니다 ... sdb3다른 시스템이 설치된 파티션은 마운트되지 않았으므로 나열되지 않습니다 (파티션은 레이블이 다시 지정되므로 UUID 대신 이름이 표시됩니다).

df
Filesystem                   1K-blocks     Used Available Use% Mounted on
udev                           8100756        0   8100756   0% /dev
tmpfs                          1625296     9952   1615344   1% /run
/dev/sdb4                     41022688  7074348  31834804  19% /
tmpfs                          8126464    19456   8107008   1% /dev/shm
tmpfs                             5120        4      5116   1% /run/lock
tmpfs                          8126464        0   8126464   0% /sys/fs/cgroup
/dev/loop0                       76800    76800         0 100% /snap/ubuntu-core/423
/dev/sdb1                      4186108    12160   4173948   1% /boot/efi
zsc-lxd/containers/uc-1604-1  58620160   516736  58103424   1% /var/lib/lxd/containers/uc-1604-1.zfs
zsc-lxd/containers/uc-1610-1  58637184   533760  58103424   1% /var/lib/lxd/containers/uc-1610-1.zfs
tmpfs                          1625292      124   1625168   1% /run/user/1000
/dev/sdb5                     61796348 10766892  47867344  19% /media/cl/virtual
/dev/sda4                    206293688 13419740 182371804   7% /media/cl/system
/dev/sda3                    206293688 32116600 163674944  17% /media/cl/rescue
/dev/sda2                    206293688  1867604 193923940   1% /media/cl/media
/dev/sda1                    206293688  2539712 193251832   2% /media/cl/data  

파티션 UUID를 사용할 수 있습니까 df?
Arronical

0

파티션에 " the_UUID" 라는 링크가 있으면 /dev/disk/by-uuid/마운트됩니다. 내 우분투 14.04.5 (YMMV)에서 :

$ ll /dev/disk/by-uuid
total 0
lrwxrwxrwx 1 root root  9 Nov 14 04:30 0123-4567 -> ../../sde
lrwxrwxrwx 1 root root 10 Nov 11 00:25 06ee65d5-26f7-41f3-91ab-3497021a6213 -> ../../dm-0
lrwxrwxrwx 1 root root 10 Nov 11 00:25 12817b99-9d2b-4357-a4ca-c11eab672a20 -> ../../sdb6
lrwxrwxrwx 1 root root 10 Nov 11 00:25 362254e8-2b99-442d-8ad9-4a348bc08032 -> ../../sda1
lrwxrwxrwx 1 root root 10 Nov 11 00:25 83a64b80-5a37-4659-b797-221b88ef41f8 -> ../../sdb5
lrwxrwxrwx 1 root root 10 Nov 11 00:25 ff359af0-d996-4949-b27e-f24ce453c48c -> ../../sdc1

2
불행히도 연결된 내 드라이브는 마운트되지 않은 경우에도이 목록에 표시됩니다.
Arronical

dmesg및 에서 "흥미로운"메시지를 찾으십시오 /var/log/kern.log*. 시스템이 파티션의 파일 시스템에 만족하지 않아서 마운트 할 수없는 것 같습니다. 가능한 원인 중 하나는 Windows 최대 절전 모드입니다.
waltinator

혼란 스러웠을지도 모릅니다. 드라이브가 깨끗하게 마운트 및 마운트 해제됩니다. 마운트되지 않았지만 연결되어 있고 켜져있는 동안 /dev/disks/by-uuid/디렉토리에 표시됩니다 .
Arronical

2
Nope /dev/disk/by-uuid와 그 대응 물은 마운트 상태에 관계없이 udev로 알려진 연결된 장치의 모든 UUID / ID / 라벨을 보유합니다.
David Foerster
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.