web-dev-qa-db-fra.com

Comment vérifier si une partition est montée par UUID?

Si j'ai l'UUID d'une partition de lecteur, comment pourrais-je savoir si elle est montée ou non, en utilisant la ligne de commande?

16
Arronical

lsblk pourrait aider. Il ne peut imprimer que l'UUID et le point de montage, donc, étant donné l'UUID, il suffit de voir si le point de montage n'est pas vide:

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

Alors:

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

Puisque lbslk peut agir sur des périphériques spécifiques, vous pouvez également effectuer les tâches suivantes:

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

Avec la première méthode, il n'y aura pas d'erreur si cet UUID ne provient pas d'un disque actuellement connecté. Avec la deuxième méthode, lsblk affichera une erreur si /dev/disk/by-uuid/$uuid n'existe pas.

20
muru
lsblk -o UUID,SIZE,MOUNTPOINT

Si vous voulez seulement une ligne avec votre UUID et votre point de montage ($ UUID représente votre UUID):

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

Le point de montage sera vide s'il est démonté. Essayez lsblk -h pour plus d'options.

Utilisez awk pour imprimer le résultat. Si NF (Nombre de champs) est supérieur à un, cela signifie qu'il a un point de montage:

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

Si vous voulez les détails à partir de mount

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

remplacez your-UUID-here par votre UUID

plus lisiblement:

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

exemple de sortie:

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

Vous pouvez simplement faire vérifier que la chaîne n'est pas nulle et echo "monté":

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

mais d'autres ont donné de meilleures façons de le faire :)

9
Zanna

Ma solution

  • utilise uniquement un shell et procfs, donc pas de problème de formatage de sortie de commande étrange,
  • ne (ré) analyse pas les UUID du périphérique mais utilise le cache du noyau,
  • donc ne nécessite pas de privilèges de super-utilisateur,
  • ne repose pas sur des noms de chemin d'accès canonisés, mais utilise l'identité du fichier (périphérique).
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
6
David Foerster

Ubuntu utilise le démon UDisks2, qui interroge de nombreuses informations sur les systèmes de fichiers. Nous pouvons utiliser udisksctl et filtrer sa sortie pour trouver un moyen rapide et sale de trouver les informations dont nous avons besoin:

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

Ce que vous voyez ci-dessus imprimera essentiellement les UUID des systèmes de fichiers et leurs points de montage. Par inspection visuelle, vous pouvez maintenant déterminer quel UUID est monté et ce qui ne l’est pas.

$ 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

En me basant sur les excellentes réponses que j'ai reçues pour cette question, j'ai compris qu'il est beaucoup plus facile de travailler avec des noms d'appareils. Pour obtenir le nom du périphérique à partir de l'UUID:

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

Ce qui signifie que je peux en déduire rapidement s'il est monté en greppant la sortie de df:

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

Ou en utilisant le code dans réponse de Mur , qui a l'avantage supplémentaire de me dire où le lecteur est monté:

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

Vous pouvez utiliser la commande df pour afficher les systèmes de fichiers montés et leur point de montage. Voici un exemple de ma machine ... la partition sdb3, sur laquelle un autre système est installé, n'est pas montée, donc non répertoriée (les partitions sont renommées, c'est pourquoi les noms sont affichés à la place des 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  
4
cl-netbox

S'il existe un lien nommé "the_UUID" dans /dev/disk/by-uuid/, la partition est montée. Sur mon 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
0
waltinator