Pregunta ¿Cómo puedo encontrar el UUID de un sistema de archivos?


Estoy ejecutando Ubuntu, y quiero averiguar el UUID de un sistema de archivos particular (no partición). Sé que puedo usar e2label /dev/sda1 para averiguar la etiqueta del sistema de archivos, pero no parece haber una manera similar de encontrar el UUID.


114
2018-05-02 15:47


origen


Gracias por todas las respuestas, estoy seguro de que las usaré todas en diferentes circunstancias. - Brad Gilbert
Tenga en cuenta que el título solía ser "¿Cómo puedo encontrar el UUID de una partición". Esa pregunta solo tiene sentido cuando se usa una tabla de particiones GPT. Aquí hay una respuesta a esa pregunta.. - Alastair Irvine


Respuestas:


Otro comando que podría estar disponible y que también funciona bastante bien para esto es 'blkid'. Es parte del paquete e2fsprogs. Ejemplos de su uso:

Busque datos en / dev / sda1:

topher@crucible:~$ sudo blkid /dev/sda1
/dev/sda1: UUID="727cac18-044b-4504-87f1-a5aefa774bda" TYPE="ext3"

Mostrar datos UUID para todas las particiones:

topher@crucible:~$ sudo blkid
/dev/sda1: UUID="727cac18-044b-4504-87f1-a5aefa774bda" TYPE="ext3"
/dev/sdb: UUID="467c4aa9-963d-4467-8cd0-d58caaacaff4" TYPE="ext3"

Mostrar datos UUID para todas las particiones en un formato más fácil de leer: (Nota: en nuevos lanzamientos, blkid -L tiene un significado diferente, y blkid -o list debe utilizarse en su lugar)

topher@crucible:~$ sudo blkid -L
device     fs_type label    mount point    UUID
-------------------------------------------------------------------------------
/dev/sda1 ext3             /              727cac18-044b-4504-87f1-a5aefa774bda
/dev/sdc  ext3             /home          467c4aa9-963d-4467-8cd0-d58caaacaff4

Muestra solo el UUID para / dev / sda1 y nada más:

topher@crucible:~$ sudo blkid -s UUID -o value /dev/sda1
727cac18-044b-4504-87f1-a5aefa774bda

144
2018-05-04 19:11



En mi computadora Ubuntu, no necesito usar sudo. - Brad Gilbert
Solo escribiendo blkid, me consiguió exactamente lo que quería, pero no exactamente lo que pedí. (Lo estoy aceptando de todos modos, porque estoy seguro de que lo usaré a menudo) - Brad Gilbert
En las versiones más nuevas de Ubuntu, el comando equivalente para blkid -L es ahora blkid -o list; la -L La opción ha sido cambiada a -L label para buscar un dispositivo que utiliza la etiqueta especificada. - aculich
@aculich He actualizado la respuesta para incluir la sintaxis reciente de blkid. Gracias por mencionarlo. - Christopher Cashell
Excelente, nunca supe de blkid; Siempre he hecho ls -l /dev/disk/by-uuid. En gentoo, blkid es en sys-apps/util-linux - AdmiralNemo


Sólo para discos particionados GPT

En un disco con formato GPT, a cada partición se le asigna un GUID, que es una forma de UUID, aunque probablemente no sea a lo que se refería el cartel original. Por lo tanto, esta respuesta es probablemente menos útil para el interrogador original. Sin embargo creo que hay una distinción importante a tener en cuenta.

Para obtener el GUID de la partición 1 en el disco / dev / sda con formato GPT, así como su etiqueta de partición, etc.

sudo sgdisk -i 1 /dev/sda

o todos con:

ls -l /dev/disk/by-partuuid

Para arrancar con la raíz del sistema de archivos en una partición determinada, usaría la sintaxis del parámetro del kernel de Linux:

root=PARTUUID=87654321-4321-4321-abcd-123456789012

En este caso, puede especificar solo el comienzo del UUID, lo suficiente como para ser único. Este parámetro es más primitivo y puede ser comprendido por el núcleo anteriormente en su proceso de arranque.


Hay una diferencia en la semántica entre estos:

Un disco contiene particiones, una partición contiene un sistema de archivos, un sistema de archivos contiene directorios y archivos. Para algunas configuraciones y sistemas operativos hay más capas.

El GUID UUID y la etiqueta asociada hacen referencia a una partición, pero no a su contenido. Una nueva partición en el mismo disco o una partición en un nuevo disco tendrá un nuevo UID de GUID. La misma partición podría contener un sistema de archivos un día y otro en un día diferente. Solo existe para discos con formato GPT, pero no para discos particionados heredados. Usualmente no hay más utilidad aquí que especificar. root=/dev/sda1 o root=8:1.

Las otras respuestas actuales se refieren al UUID de un sistema de archivos en alguna partición que contiene. Si el sistema de archivos se copia, como un todo, a otra partición o disco duro, ese valor sigue siendo el mismo. Este UUID es útil para encontrar un sistema de archivos movido. Por lo tanto, esto es probablemente más pertinente para la mayoría de las personas. Parámetro kernel de linux root=UUID=87654321-4321-4321-a567-123456789012 se refiere a esto.

Yo creo root=LABEL= y root=UUID= Se implementan en el espacio de usuario inicial, el código de inicio que vi el otro día en mi sistema tradujo estos parámetros a / dev / disk / by-uuid y / dev / disk / by-label (los enlaces creo que fueron creados por udev en el espacio de usuario en mi sistema).

[1] http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/init/do_mounts.c#n183


9
2018-06-23 21:55



El uso correcto parece ser -i1 o -i 1, Opuesto a -i:1, con sgdisk 1.0.1. - Charles Duffy
@CharlesDuffy gracias por encontrar ese error. He editado la respuesta para corregirla. - John S Gruber


La forma más fácil de hacer esto para ext2 / ext3 / ext4 es:

/sbin/tune2fs -l /dev/sda1

5
2018-05-02 15:57



Esto funcionará siempre que su sistema de archivos esté formateado como ext2, ext3 o ext4. La mayoría de los sistemas de archivos son uno de estos pero no todos. Tampoco funcionará para intercambiar particiones. Mira mi respuesta de una manera universal. - Hamish Downer
Esto resulta en mi caso en Couldn't find valid filesystem superblock. - Michel


La forma recomendada de hacer esto es hacer

sudo vol_id -u /dev/sda2

Para más información sobre el uso de UUID, consulte Este artículo (de la ayuda de ubuntu, pero debería funcionar para cualquier distribución de Linux utilizando UUID).

Como se señaló en los comentarios a esta pregunta, es posible que vol_id no esté en su camino. En Ubuntu está en / sbin por lo que funcionará lo anterior. Para fedora parece necesitar

sudo /lib/udev/vol_id -u /dev/sda2

Si otras distribuciones tienen vol_id en otros lugares, publique un comentario y lo agregaré a esta respuesta.


3
2018-05-02 16:53



Esto no funciona en mi laptop Fedora 10. - Eddie
Esta es una solución mucho mejor que la mía. Eddie, vol_id se encuentra en / lib / udev. Mish, ¿podrías editar tu respuesta para prefijar la ruta completa frente a vol_id? / lib / udev no está en la ruta de la raíz de forma predeterminada en cualquier distribución que conozca. - Mihai Limbăşan
"/ lib / udev / vol_id / dev / sda2" parece funcionar. Pocas personas tendrán / lib / udev en su camino. - Eddie
En mi computadora Ubuntu hay un enlace simbólico de /sbin/vol_id a /lib/udev/vol_id - Brad Gilbert
vol_idse ha eliminado de Ubuntu a partir de Karmic (9.10), por lo que ya no es útil ni relevante. Pasó por muchas contorsiones para llegar allí vol_id Fue en un punto construido para reemplazar blkid. - Alain O'Dea


Suponiendo que desea el UUID para sda1, podría intentar algo como esto:

for v in /dev/disk/by-uuid/* ; do echo "`readlink $v`: $v" | grep ../sda1 | cut -d\: -f2 | cut -d/ -f5 ; done

Ajuste sda1 en consecuencia. Para obtener los UUID para todas las particiones, elimine los resortes y cortes, a la:

for v in /dev/disk/by-uuid/* ; do echo "`readlink $v`: $v" ; done

Salida de muestra para sda1 en mi escritorio:

[mihailim@home ~]$ for v in /dev/disk/by-uuid/* ; do echo "`readlink $v`: $v" | grep ../sdb3 | cut -d\: -f2 | cut -d/ -f5 ; done
dc8c49f1-e2dc-46bc-ba02-013f26c85f70

Edición: tenga en cuenta que esta solución, aunque está más diseñada que la udev-> vol_id no requieren privilegios de raíz, funcionarán en cualquier kernel posterior a 2005 o al menos, y se basan en las herramientas presentes en cualquier distribución de Linux que están predeterminadas en la ruta para cualquier usuario.


2
2018-05-02 16:22



Esto funcionará en cualquier computadora que tenga suficientes devfs recientes. - Eddie


Esto parece funcionar para mí:

sudo dumpe2fs /dev/sda1 | grep UUID

2
2017-09-18 21:08





También puede usar esto para imprimir todos los UUID:

for disk in /dev/disk/by-uuid/*; do 
    basename "$(readlink "$disk")"
    basename "$disk"
    echo
done

o este comando posiblemente más simple, reemplazando sda1 con el dispositivo que desea buscar:

disk=sda1
find /dev/disk/by-uuid -type l -exec sh -c "readlink {} | grep -o $disk && basename {}" \;

Una adaptación del segundo método para imprimir todos los UUIDs:

find /dev/disk/by-uuid -type l -exec sh -c 'basename $(readlink {}); basename {}; echo' \;

1
2017-11-30 23:09