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


16

Bir sürücü bölümünün UUID'sine sahipsem, komut satırını kullanarak monte edilip edilmediğini nasıl öğrenebilirim?


Sürücülerimde çoğaltılan UUID'ler var ve bu önlenemiyor.
Joshua

Bir bölümün uuidini ile değiştirebileceğinize inanıyorum tune2fs.
16:17

@Joshua, @Arronical Evet, UUID'yi ile değiştirebilirsiniz tune2fs -U random /dev/sdxx. Ancak bu, tüm bölüm türleri için işe yaramaz.
Katu

Aslında işe yaramaz. Yansıtılmış oldukları için sürücüler aynı UUID'ye sahip olmalıdır. UUID ile algılamaya çalışmak, yalnızca yansıtma cihazı yerine yinelenen yollar döndürür.
Joshua

Yanıtlar:


20

lsblkyardımcı olabilir. Yalnızca UUID ve bağlama noktasını yazdırabilir, bu nedenle UUID verildiğinde, bağlama noktasının boş olup olmadığına bakın:

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

Yani:

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

Yana lbslközel cihazlarda hareket edebilir, ayrıca yapabilirsiniz:

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

İlk yöntemde, UUID o anda bağlı olan bir diskten değilse hata olmaz. İkinci yöntemle, lsblkyoksa hata oluşacaktır /dev/disk/by-uuid/$uuid.


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ğlanma noktası takılırsa boş olacaktır. Daha lsblk -hfazla seçenek deneyin .

Sonucu awkyazdırmak için kullanın . eğer NF(alanların sayısı) birden fazla olan bunun bir bağlama noktası sahip olduğu anlamına gelir:

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

3
Evet bu ! kesinlikle bu ! Ayrıca belirli UUID'yi filtrelemek için grep ile geliştirilebilir, hatta awk ile ayrıştırılabilir
Sergiy Kolodyazhnyy

9

Gibi ayrıntıları istiyorsanız 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'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

çıktı örneği:

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

Sadece dize boş ve yankı "monte" olup olmadığını kontrol yapabilirsiniz:

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

ama diğerleri bunu yapmanın daha iyi yollarını verdi :)


+1 :) alternatif rotasını seviyorum
Arronical

@Arronical size çok cömert: D
Zanna

6

Ubuntu, UDisks2dosya sistemleri hakkında çok fazla bilgi toplayan arka plan programı kullanır ve ihtiyacımız olan bilgiyi udisksctlbulmak için hızlı ve kirli bir yol bulmak için çıktısını kullanabilir ve 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ükleriniz temel olarak dosya sistemlerinin UUID'lerini ve bağlantı noktalarını basacaktır. Görsel inceleme ile artık hangi UUID'nin monte edildiğini, hangisinin takılı olmadığını anlayabilirsiniz.

$ 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

Çözümüm

  • yalnızca bir kabuk kullanır ve procfsbu nedenle garip komut çıktı biçimlendirme sorunları olmaz,
  • cihaz UUID'lerini (yeniden) taramaz, ancak çekirdek önbelleğini kullanır,
  • bu nedenle süper kullanıcı ayrıcalıkları gerektirmez,
  • standartlaştırılmış yol adlarına güvenmez, ancak (aygıt) dosya kimliğini kullanır.
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

Bu soru için aldığım mükemmel cevapları temel alarak, cihaz adlarıyla çalışmanın çok daha kolay olduğunu fark ettim. Cihaz adını UUID'den almak için:

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

Bu, çıktısını selamlayarak monte edilirse hızlı bir şekilde çıkarabileceğim anlamına gelir df:

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

Veya Muru'nun cevabındaki kodu kullanarak , sürücünün nereye monte edildiğini bana söyleme bonusunu ekledi:

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

4

dfBağlı dosya sistemlerini ve bağlama noktalarını görmek için komutu kullanabilirsiniz . İşte makinemden bir örnek ... sdb3Üzerine başka bir sistem yüklediğim bölüm monte edilmedi, bu yüzden listelenmedi (bölümler yeniden etiketlendi, bu yüzden UUID'ler yerine adlar gösteriliyor):

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 bölümünü birlikte kullanabilir miyim df?
Arronical

0

Bölümde " the_UUID" adında bir bağlantı varsa /dev/disk/by-uuid/monte edilir. Ubuntu 14.04.5 (YMMV) cihazımda:

$ 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
Ne yazık ki bağlı olan sürücüm takılı olmasa bile bu listede görünüyor.
Arronical

"İlginç" iletilerin arayın dmesgve /var/log/kern.log*. Sistem, bölümdeki dosya sisteminden memnun değil gibi görünüyor ve onu bağlayamıyor. Olası bir neden Windows hazırda bekletme modudur.
waltinator

Sanırım kafa karıştırıcı olabilirim, sürücü temiz bir şekilde takılır ve çıkarılır. Sadece takılı değil, ancak bağlı ve açıkken, /dev/disks/by-uuid/dizinde görünür .
Arronical

2
Nope /dev/disk/by-uuidve benzerleri, montaj durumlarına bakılmaksızın udev tarafından bilinen tüm UUID'leri / ID'leri / bağlı aygıtları tutar.
David Foerster
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.