Wie überprüfe ich, ob eine Partition von UUID eingehängt wird?

16

Wenn ich die UUID einer Laufwerkspartition habe, wie kann ich dann über die Befehlszeile herausfinden, ob sie angehängt ist oder nicht?

Arronisch
quelle
Ich habe UUIDs auf meinen Laufwerken dupliziert, und dies kann nicht vermieden werden.
Joshua
Ich glaube, dass Sie die UUID einer Partition mit ändern können tune2fs.
Arronical
@Joshua, @Arronical Ja, Sie können die UUID mit ändern tune2fs -U random /dev/sdxx. Dies funktioniert jedoch nicht für alle Arten von Partitionen.
Katu
In der Tat wird es nicht funktionieren. Die Laufwerke müssen dieselbe UUID haben, da sie gespiegelt sind. Der Versuch, anhand der UUID zu erkennen, gibt doppelte Pfade zurück und nicht nur das Spiegelgerät.
Joshua

Antworten:

20

lsblkkönnte helfen. Es kann nur die UUID und den Einhängepunkt drucken. Überprüfen Sie daher anhand der UUID, ob der Einhängepunkt nicht leer ist:

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

So:

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

Da Sie lbslkauf bestimmten Geräten arbeiten können, können Sie auch Folgendes tun:

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

Bei der ersten Methode tritt kein Fehler auf, wenn diese UUID nicht von einer aktuell verbundenen Festplatte stammt. Bei der zweiten Methode lsblkwird ein Fehler ausgegeben, wenn er /dev/disk/by-uuid/$uuidnicht vorhanden ist.

muru
quelle
17
lsblk -o UUID,SIZE,MOUNTPOINT

Wenn Sie nur eine Zeile mit Ihrer UUID und Ihrem Einhängepunkt wünschen ($ UUID steht für Ihre UUID):

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

Der Bereitstellungspunkt ist leer, wenn er nicht bereitgestellt ist. Probieren Sie lsblk -hweitere Optionen aus.

Verwenden Sie awk, um das Ergebnis auszudrucken. Wenn NF(Anzahl der Felder) mehr als eins ist, bedeutet dies, dass es einen Einhängepunkt hat:

lsblk -o UUID,MOUNTPOINT|grep "$UUID"|awk '{if (NF>1) print $1" is mounted"; else print $1" is unmounted";}'
Katu
quelle
3
Ja das ! genau das ! kann auch mit grep verbessert werden, um bestimmte UUID herauszufiltern, vielleicht sogar mit awk analysieren
Sergiy Kolodyazhnyy
9

Wenn Sie die Details ab wollen mount

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

Ersetzen Sie your-UUID-heredurch Ihre UUID

besser lesbar:

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

Ausgabebeispiel:

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

Sie können einfach überprüfen, ob die Zeichenfolge nicht null ist und "eingehängt" ausgeben:

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

aber andere gaben bessere Möglichkeiten, das zu tun :)

Zanna
quelle
Ich mag die alternative Route +1 :)
Arronical
@Arronical sehr großzügig von Ihnen: D
Zanna
6

Ubuntu verwendet einen UDisks2Daemon, der eine ganze Reihe von Informationen über Dateisysteme abfragt, und wir können udisksctlseine Ausgabe verwenden und filtern, um einen schnellen und unsauberen Weg zu finden, um die benötigten Informationen zu finden:

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

Was Sie oben sehen, wird im Grunde UUIDs von Dateisystemen und deren Mountpunkten drucken. Durch visuelle Prüfung können Sie jetzt herausfinden, welche UUID aktiviert ist und welche nicht.

$ 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
Sergiy Kolodyazhnyy
quelle
6

Meine Lösung

  • verwendet nur eine Shell und procfsdaher keine seltsamen Formatierungsprobleme bei der Befehlsausgabe
  • überprüft keine Geräte-UUIDs (erneut), sondern verwendet den Kernel-Cache,
  • erfordert daher keine Superuser-Rechte,
  • Verlässt sich nicht auf kanonisierte Pfadnamen, sondern verwendet die (Geräte-) Dateiidentität.
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
David Foerster
quelle
5

Aufbauend auf den hervorragenden Antworten, die ich auf diese Frage erhalten habe, wurde mir klar, dass es viel einfacher ist, mit Gerätenamen zu arbeiten. So rufen Sie den Gerätenamen von der UUID ab:

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

Was bedeutet, dass ich schnell ableiten kann, ob es gemountet ist, indem ich die Ausgabe von df:

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

Oder indem Sie den Code in Murus Antwort verwenden , der den zusätzlichen Vorteil hat, mir mitzuteilen, wo das Laufwerk eingebunden ist:

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

Mit dem dfBefehl können Sie die bereitgestellten Dateisysteme und ihren Bereitstellungspunkt anzeigen. Hier ist ein Beispiel von meinem Computer ... die Partition sdb3, auf der ich ein anderes System installiert habe, ist nicht gemountet, daher nicht aufgelistet (Partitionen sind neu beschriftet, daher werden Namen anstelle von UUIDs angezeigt):

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  
cl-netbox
quelle
Kann ich die Partitions-UUID mit verwenden df?
Arronical
0

Wenn es einen Link namens " the_UUID" in /dev/disk/by-uuid/der Partition gibt, wird gemountet. Auf meinem 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
Waltinator
quelle
2
Leider erscheint mein angeschlossenes Laufwerk in dieser Liste, auch wenn es nicht gemountet ist.
Arronical
Suchen Sie nach "interessanten" Nachrichten in dmesgund /var/log/kern.log*. Es hört sich so an, als ob das System mit dem Dateisystem auf der Partition nicht zufrieden ist und es nicht mounten kann. Eine mögliche Ursache ist der Windows-Ruhezustand.
Waltinator
Ich glaube, ich war verwirrt, das Laufwerk wird sauber ein- und ausgebaut. Es ist nur so, dass es im /dev/disks/by-uuid/Verzeichnis angezeigt wird, solange es nicht gemountet ist, aber verbunden und eingeschaltet ist .
Arronical
2
Nope /dev/disk/by-uuidund seine Gegenstücke enthalten alle UUIDs / IDs / Labels der angeschlossenen Geräte, die udev bekannt sind, unabhängig von ihrem Bereitstellungsstatus.
David Foerster