Si tengo el UUID de una partición de unidad, ¿cómo podría averiguar si está montado o no, usando la línea de comando?
tune2fs
.
tune2fs -U random /dev/sdxx
. Pero esto no funcionará para todos los tipos de particiones.
Si tengo el UUID de una partición de unidad, ¿cómo podría averiguar si está montado o no, usando la línea de comando?
tune2fs
.
tune2fs -U random /dev/sdxx
. Pero esto no funcionará para todos los tipos de particiones.
Respuestas:
lsblk
podría ayudar. Puede imprimir solo el UUID y el punto de montaje, por lo tanto, dado el UUID, solo vea si el punto de montaje no está vacío:
uuid=foo
lsblk -o UUID,MOUNTPOINT | awk -v u="$uuid" '$1 == u {print $2}'
Entonces:
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
Como lbslk
puede actuar en dispositivos específicos, también puede hacer:
mountpoint=$(lsblk -o MOUNTPOINT "/dev/disk/by-uuid/$uuid" | awk 'NR==2')
Con el primer método, no habrá un error si ese UUID no es de un disco conectado actualmente. Con el segundo método, se lsblk
producirá un error si /dev/disk/by-uuid/$uuid
no existe.
lsblk -o UUID,SIZE,MOUNTPOINT
Si solo desea una línea con su UUID y punto de montaje ($ UUID representa su UUID):
lsblk -o UUID,MOUNTPOINT|grep "$UUID"
El punto de montaje estará vacío si se desmonta. Prueba lsblk -h
por más opciones.
Use awk
para imprimir el resultado. si NF
(Número de campos) es más de uno, significa que tiene un punto de montaje:
lsblk -o UUID,MOUNTPOINT|grep "$UUID"|awk '{if (NF>1) print $1" is mounted"; else print $1" is unmounted";}'
Si quieres los detalles a 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
reemplazar your-UUID-here
con su UUID
más legible:
for uuid in /dev/disk/by-uuid/*; do
if [[ "$uuid" =~ .*your-UUID-here.* ]]
then echo $(mount | grep "$(readlink -e "$uuid")")
fi
done
ejemplo de salida:
/dev/mmcblk1p2 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
Simplemente puede hacer que compruebe que la cadena no es nula y echo "montado":
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
pero otros dieron mejores formas de hacerlo :)
Ubuntu usa UDisks2
daemon, que sondea mucha información sobre sistemas de archivos, y podemos usar udisksctl
y filtrar su salida para encontrar una manera rápida y sucia de encontrar la información que necesitamos:
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)'
Lo que ves arriba, básicamente imprimirá UUID de sistemas de archivos y sus puntos de montaje. Mediante inspección visual, ahora puede averiguar qué UUID está montado y cuál no.
$ 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
Mi solución
procfs
temas, el formato de salida de comandos por lo que no extraña,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
Sobre la base de las excelentes respuestas que recibí para esta pregunta, me di cuenta de que es mucho más fácil trabajar con los nombres de los dispositivos. Para obtener el nombre del dispositivo de UUID:
disk_uuid=foo
disk_devname=$(blkid -U "$disk_uuid")
Lo que significa que puedo deducir rápidamente si está montado haciendo grep a la salida de df
:
df | grep -q "$disk_devname" && echo "Disk mounted" || echo "Disk not mounted"
O usando el código en la respuesta de Muru , que tiene la ventaja adicional de decirme dónde está montado el disco:
mountpoint=$(lsblk -no MOUNTPOINT "$disk_devname")
if [[ -n "$mountpoint" ]]; then
echo "Disk is mounted at $mountpoint"
else
echo "Disk not mounted"
fi
Puede usar el df
comando para ver los sistemas de archivos montados y su punto de montaje. Aquí hay un ejemplo de mi máquina ... la partición sdb3
, en la que tengo otro sistema instalado, no está montada, por lo que no aparece en la lista (las particiones se vuelven a etiquetar, por eso se muestran los nombres en lugar de los 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
df
?
Si hay un enlace llamado " the_UUID
" en /dev/disk/by-uuid/
la partición está montado. En mi 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
dmesg
y /var/log/kern.log*
. Suena como el sistema no está contento con el sistema de archivos en la partición, y no puede montarlo. Una posible causa es la hibernación de Windows.
/dev/disks/by-uuid/
directorio.
/dev/disk/by-uuid
y sus homólogos contienen todos los UUID / ID / etiquetas de dispositivos conectados conocidos por udev, independientemente de su estado de montaje.