¿Cómo puedo obtener el UUID de un volumen que contiene el /
sistema de archivos? Lo mejor para eso que he encontrado hasta la fecha es blkid -o list
. Pero esta salida es legible por el ser humano y difícil de analizar. Tal vez hay una mejor manera?
Necesito eso para parametrizar la gestión de la configuración con plantillas específicas del sistema.
NOTA sobre blkid
gotcha para aquellos que puedan reutilizar los resultados de mi pregunta en el futuro: blkid
almacena en caché los resultados de ejecuciones anteriores en /etc/blkid.tab
. Eso significa que la ejecución blkid
como usuario no root por primera vez no devolverá ningún dato. Además, la ejecución blkid
como usuario no root después de la ejecución root devolverá datos obsoletos (posiblemente incorrectos).
fuente
/dev/disk/by-label
... Esto también funciona para particiones que no están montadas. Tiene la ventaja de poder escribir scripts que hacen cosas como rsync de root a root-bak, que es mucho menos propenso a errores que usar 2 UUIDS que no "significan" nada.Respuestas:
Uso
findmnt
:También tiene varias opciones para controlar cómo busca la información y cómo la presenta (¡incluida la salida JSON!). Es parte del
mount
paquete, por lo que está disponible en cualquier instalación de Ubuntu.fuente
Otra solución:
-n
suprime el encabezado (no es realmente necesario, pero es más seguro para el análisis)-r
produce salida sin formato (hace que sea más seguro analizar)-o UUID,MOUNTPOINT
incluir solo la información necesariafuente
Puede usar el
lsblk
comando para generar el UUID, pero necesita el nombre del dispositivo de la partición (como / dev / sda2). Puede obtener esto utilizando eldf
comando y recortando la salida. Utilice la sustitución de comandos para dar el nombre del dispositivolsblk
. Parece que necesita sudo para acceder al UUID, aunque la salida normal de lsblk no lo requiere:fuente
sudo
el 16.04.lsblk
oblkid
ejecutado por root y funcionó perfectamente. ¿Sabes por qué habría un problema de almacenamiento en caché con este comando y no con la versión publicada por Rovo? ¿La salida sin procesar evita el almacenamiento en caché de alguna manera?blkid
como root, al crear el archivo de caché en/dev/.blkid.tab
, el uso de sudolsblk
no mostrará nada de la columna UUID. No creo que exista un riesgo de producción obsoleta.La mejor solución que pude encontrar es
Se siente como no óptimo, pero funciona.
Nota: [[: espacio:]] significaSpace
fuente
sudo
.Ajuste el valor de
mountpoint
al punto de montaje actual del sistema de archivos en cuestión:fuente
Esto es lo que uso:
tune2fs está en el paquete e2fsprogs, que no recuerdo si está instalado por defecto.
Si no está instalado.
fuente
awk: not an option: -e
que edité tu respuesta para que sea funcional. Si me he pasado de largo, no dudes en retroceder. ¡Salud! :-)gawk
. Obtengo el error especificado en 16.04 que parece usarmawk
en su lugar.Probado para trabajar en 14.04 y 16.04
Una línea simple que siempre debe producir el UUID de una raíz
/
esLo que estamos haciendo aquí es agrupar la salida de mount para que coincida con el símbolo raíz con espacios a cada lado
/
para evitar la coincidencia cuando/
se usa como un símbolo de extensión de ruta, canalizando eso mediante elawk
uso de "on" como separador de campo para generar solo la salida nombre del dispositivo y asignar ESO a la variable de entorno $ DRIVE, luego usar la salida deblkid $DRIVE
corte canalizado usando"
como separador de campo y seleccionar solo el segundo campo que elimina todo lo demás, dejando solo el UUID.Tenga en cuenta que lo que pertenece después de grep en el comando anterior es en realidad ' space/ space' y no '/' como aparece.
Esto tiene el beneficio de no requerir
sudo
y devolverá el resultado apropiado independientemente de cómo esté montada la unidad.Sería aconsejable asegurarse de que no está utilizando la variable de entorno $ DRIVE para otra cosa antes de intentar este enfoque
echo $DRIVE
, devolverá una línea en blanco si no está utilizando la variable.fuente