it-swarm-es.com

¿Cómo encuentro el UUID de un sistema de archivos?

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

135
Brad Gilbert

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:

[email protected]:~$ Sudo blkid /dev/sda1
/dev/sda1: UUID="727cac18-044b-4504-87f1-a5aefa774bda" TYPE="ext3"

Mostrar datos UUID para todas las particiones:

[email protected]:~$ Sudo blkid
/dev/sda1: UUID="727cac18-044b-4504-87f1-a5aefa774bda" TYPE="ext3"
/dev/sdb: UUID="467c4aa9-963d-4467-8cd0-d58caaacaff4" TYPE="ext3"

Muestra datos de UUID para todas las particiones en un formato más fácil de leer: (Nota: en versiones más recientes, blkid -L tiene un significado diferente y blkid -o list debería usarse en su lugar)

[email protected]:~$ 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

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

[email protected]:~$ Sudo blkid -s UUID -o value /dev/sda1
727cac18-044b-4504-87f1-a5aefa774bda
169

Solo 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 a lo que se refería el póster original. Por lo tanto, esta respuesta probablemente sea menos útil para el interrogador original. Sin embargo, creo que hay una distinción importante a destacar.

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

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 determinada partición, usaría la sintaxis del parámetro del kernel de Linux de:

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 entendido 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 se refieren a una partición, pero no al contenido de la partición. Una nueva partición en el mismo disco, o una partición en un nuevo disco tendrá un nuevo GUID UUID. 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 formateados GPT, pero no para discos particionados heredados. Por lo general, aquí no hay más utilidad que especificar root=/dev/sda1 o root=8:1.

Las otras respuestas actuales se refieren al UUID de a ¡sistema de archivos en algunas particiones que contienen. Si el sistema de archivos se copia, en su conjunto, a otra partición o disco duro, ese valor permanece igual. 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 del kernel de Linux root=UUID=87654321-4321-4321-a567-123456789012 se refiere a esto.

Yo creo root=LABEL= y root=UUID= son implementados por el espacio de usuario temprano, 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 (creo que los enlaces son creados por udev en el espacio de usuarios en mi sistema).

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

11
John S Gruber

La forma limpia de script para hacer esto que funciona en cualquier tipo de sistema de archivos es:

lsblk -no UUID <device-containing-FS>

O, dado el punto de montaje (o cualquier archivo dentro de él):

lsblk -no UUID $(df -P <file> | awk 'END{print $1}')

La salida es el UUID, el UUID completo y nada más que el UUID.

8
Tom Hale

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

/sbin/tune2fs -l /dev/sda1
5
Eddie

La forma recomendada de hacer esto es hacer

Sudo vol_id -u /dev/sda2

Para obtener 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 que use 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 lo anterior funcionará. 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
Hamish Downer

Esto parece funcionar para mí:

Sudo dumpe2fs /dev/sda1 | grep UUID
3

Suponiendo que desea el UUID para sda1, puede 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, suelte los greps 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:

[[email protected] ~]$ 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

Editar: tenga en cuenta que esta solución, aunque es más ingeniosa que la udev-> vol_id, requiere no requiere privilegios de root, funcionará en cualquier núcleo posterior a 2005 o más, y se basa en las herramientas presentes en cualquier Distribución de Linux que están por defecto en la ruta para cualquier usuario.

2
Mihai Limbăşan

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 deseas 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 UUID:

find /dev/disk/by-uuid -type l -exec sh -c 'basename $(readlink {}); basename {}; echo' \;
1
kiri
ls -l /dev/disk/by-uuid | grep `lsblk | grep "/" | awk '{print $1}'` | awk '{print $9}'

Lo anterior parece funcionar en la mayoría de los sistemas Linux (todo lo que he encontrado) durante muchos años. Puede tener fallas, no lo sé. Preferiría obtener el número de serie pero ... este es el UUID del sistema de archivos raíz.

Si alguien tiene una manera de obtener el número de serie sin necesidad de ser root (como el mío) y no instalar paquetes "inusuales" que son diferentes en diferentes versiones de Unix, lo agradecería, siempre puede aprender algo. Y sé que estoy mezclando cosas: es el UUID del sistema de archivos raíz, no un disco.

El propósito, por cierto, es generar un número único por máquina que no pueda modificarse (como un número de serie del disco y como las direcciones MAC que fueron hace mucho tiempo).

Se utiliza para codificar software en una sola máquina. La dirección MAC estuvo bien hasta que les permitieron ser virtuales ... algunos clientes de mala calidad simplemente establecieron su dirección MAC en una constante (en diferentes redes, por supuesto) y evitaron pagarme.

En AIX hay una sola llamada para obtener un número que identifica la máquina. No importa si los cambios de hardware o las actualizaciones de software ocurren, así que no tengo idea de cómo lo hacen ... Si la placa base cambia, entonces el número cambia, así que creo que lo ocultan allí. Y eso es más que raro.

1
Eric Eberhard

Puede usar lo siguiente para obtener el UUID para una unidad en particular,

Sudo vol_id -u /dev/sda1

o puede usar esto para enumerar todos los UUID para los medios adjuntos,

ls /dev/disk/by-uuid
0
Rich Adams