Bir bölümün UUID tarafından monte edilip edilmediği nasıl kontrol edilir?

16

Bir sürücü bölümünün UUID'sine sahip olsaydım, komut satırını kullanarak takılı olup olmadığını öğrenmek için nasıl giderim?

    
sordu Arronical 14.11.2016 15:27

8 cevap

18

lsblk yardımcı olabilir. Sadece UUID ve bağlama noktasını yazdırabilir, bu nedenle UUID verildiğinde, sadece bağlantı noktasının boş olup olmadığını görün:

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

Yani:

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

lbslk belirli cihazlarda işlem yapabileceğinden, şunları yapabilirsiniz:

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

İlk yöntemle, UUID'nin bağlı olan bir diskten olmaması durumunda bir hata olmayacaktır. İkinci yöntemle, lsblk , /dev/disk/by-uuid/$uuid bulunamazsa hata verir.

    
verilen cevap muru 14.11.2016 15:43
17
lsblk -o UUID,SIZE,MOUNTPOINT

UUID'niz ve bağlama noktanızla yalnızca bir satır istiyorsanız ($ UUID UUID'nizi temsil eder):

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

Bağlanmamışsa montaj noktası boş olacaktır. Daha fazla seçenek için lsblk -h deneyin.

Sonucu yazdırmak için awk değerini kullanın. NF (Alan sayısı) birden fazla ise, bir bağlama noktası olduğu anlamına gelir:

lsblk -o UUID,MOUNTPOINT|grep "$UUID"|awk '{if (NF>1) print " is mounted"; else print " is unmounted";}'
    
verilen cevap Katu 14.11.2016 15:44
9

Ayrıntıların mount

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

your-UUID-here değerini UUID'nizle değiştirin

daha okunaklı:

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

çıkış örneği:

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

Sadece dizenin boş olmadığını ve "monte edilmiş" yankılanmadığını kontrol edebilirsiniz:

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

Ancak diğerleri bunu yapmak için daha iyi yollar verdi:)

    
verilen cevap Zanna 14.11.2016 16:14
6

Ubuntu, dosya sistemleri hakkında birçok bilgiyi toplayan UDisks2 daemon'u kullanır ve ihtiyacımız olan bilgiyi bulmak için hızlı ve kirli bir yol bulmak amacıyla udisksctl kullanabilir ve çıktısını filtreleyebiliriz:

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)'

Yukarıda gördüğünüz, temel olarak UUID dosya sistemlerini ve bunların bağlantı noktalarını yazdıracaktır. Görsel inceleme ile artık hangi UUID'nin monte edildiğini ve hangisinin olmadığını öğrenebilirsiniz.

$ 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
    
verilen cevap Sergiy Kolodyazhnyy 14.11.2016 16:44
6

Benim çözümüm

  • yalnızca bir kabuk ve procfs kullanır, bu nedenle garip komut çıkışı biçimlendirme sorunları yoktur,
  • cihaz UUID'lerini (yeniden) taramaz, ancak çekirdek önbelleğini kullanır,
  • bu nedenle süper kullanıcı ayrıcalıkları gerektirmez,
  • kurallı yol adlarına güvenmiyor, ancak (cihaz) dosya kimliğini kullanıyor.
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
    
verilen cevap David Foerster 14.11.2016 18:07
5

Bu soru için aldığım mükemmel yanıtların üzerine inandığımda, cihaz isimleriyle çalışmanın çok daha kolay olduğunu anladım. UUID'den cihaz adını almak için:

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

Bunun anlamı, df 'lık çıkışa grep ile monte edilirse hızlıca anlayabilirim:

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

Veya kodu, sürücünün nerede monte edildiğini anlatan ek bonus olan Muru'nun cevabı 'nı kullanarak ekleyin:

mountpoint=$(lsblk -no MOUNTPOINT "$disk_devname")
if [[ -n  "$mountpoint" ]]; then
   echo "Disk is mounted at $mountpoint"
else
   echo "Disk not mounted"
fi
    
verilen cevap Arronical 14.11.2016 16:37
4

Bağlı dosya sistemlerini ve bunların mount noktalarını görmek için df komutunu kullanabilirsiniz. İşte benim makinemden bir örnek ... başka bir sisteme yüklediğim sdb3 bölümü eklenmemiş, bu yüzden listelenmemiş (bölümler yeniden etiketlenmiş, bu yüzden UUID'lerin yerine isimler gösterilmiştir):

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  
    
verilen cevap cl-netbox 14.11.2016 15:43
0

the_UUID dizininde " /dev/disk/by-uuid/ " adlı bir bağlantı varsa, bölüm bağlanır. Ubuntu 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
    
verilen cevap waltinator 14.11.2016 15:34

Etiketlerdeki diğer soruları oku