web-dev-qa-db-fra.com

Comment trouver l'UUID d'un système de fichiers

J'utilise Ubuntu et je veux découvrir le UUID d'un système de fichiers particulier (pas une partition). Je sais que je peux utiliser e2label /dev/sda1 pour trouver l'étiquette du système de fichiers, mais il ne semble pas y avoir de manière similaire pour trouver le UUID.

135
Brad Gilbert

Une autre commande qui pourrait être disponible et fonctionne très bien pour cela est 'blkid'. Cela fait partie du package e2fsprogs. Exemples d'utilisation:

Recherchez des données sur/dev/sda1:

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

Afficher les données UUID pour toutes les partitions:

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

Afficher les données UUID pour toutes les partitions dans un format plus facile à lire: (Remarque: dans les versions plus récentes, blkid -L a une signification différente, et blkid -o list doit être utilisé à la place)

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

Affichez juste l'UUID pour/dev/sda1 et rien d'autre:

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

Pour les disques partitionnés GPT uniquement

Sur un disque au format GPT, chaque partition se voit attribuer un GUID, qui est une forme d'UUID, mais probablement pas à quoi faisait référence l'affiche originale. Par conséquent, cette réponse est probablement moins utile à l'interrogateur d'origine. Néanmoins, je pense qu'il y a une distinction importante à noter.

Pour obtenir le GUID de la partition 1 sur le disque formaté GPT/dev/sda, ainsi que son étiquette de partition et ainsi de suite:

Sudo sgdisk -i 1 /dev/sda

ou tous avec:

ls -l /dev/disk/by-partuuid

Pour démarrer avec la racine du système de fichiers sur une certaine partition, vous utiliseriez la syntaxe des paramètres du noyau linux:

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

Dans ce cas, vous pouvez spécifier juste le début de l'UUID - suffisamment pour être unique. Ce paramètre est plus primitif et peut être compris par le noyau plus tôt dans son processus de démarrage.


Il y a une différence de sémantique entre ceux-ci:

Un disque contient des partitions, une partition contient un système de fichiers, un système de fichiers contient des répertoires et des fichiers. Pour certaines configurations et systèmes d'exploitation, il existe plusieurs couches.

L'UUID GUID et l'étiquette associée font référence à une partition, mais pas au contenu de la partition. Une nouvelle partition sur le même disque ou une partition sur un nouveau disque aura un nouveau GUID UUID. La même partition peut contenir un système de fichiers un jour et un autre un autre jour. Il n'existe que pour les disques formatés GPT, mais pas pour les disques partitionnés hérités. Il n'y a généralement pas plus d'utilité ici que de spécifier root=/dev/sda1 ou root=8:1.

Les autres réponses actuelles se réfèrent à l'UUID d'un système de fichiers dans certaines partitions contenant. Si le système de fichiers est copié, dans son ensemble, sur une autre partition ou disque dur, cette valeur reste la même. Cet UUID est utile pour trouver un système de fichiers déplacé. Par conséquent, cela est probablement plus pertinent pour la plupart des gens. Paramètre du noyau Linux root=UUID=87654321-4321-4321-a567-123456789012 fait référence à cela.

Je crois root=LABEL= et root=UUID= sont implémentés par les premiers utilisateurs, le code init que j'ai vu l'autre jour sur mon système a traduit ces paramètres en/dev/disk/by-uuid et/dev/disk/by-label (les liens sont créés par udev dans l'espace utilisateurs je crois) sur mon système).

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

11
John S Gruber

La manière propre à ce script de fonctionner sur tout type de système de fichiers est la suivante:

lsblk -no UUID <device-containing-FS>

Ou, étant donné le point de montage (ou tout fichier qu'il contient):

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

La sortie est l'UUID, l'UUID entier et rien que l'UUID.

8
Tom Hale

La façon la plus simple de le faire pour ext2/ext3/ext4 est:

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

La façon recommandée de le faire est de faire

Sudo vol_id -u /dev/sda2

Pour plus d'informations sur l'utilisation des UUID, consultez cet article (dans l'aide d'ubuntu, mais devrait fonctionner pour toute distribution Linux utilisant des UUID).

Comme indiqué dans les commentaires de cette question, vol_id n'est peut-être pas sur votre chemin. Sur ubuntu, il est dans/sbin, donc ce qui précède fonctionnera. Pour Fedora, il semble avoir besoin

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

Si d'autres distributions ont vol_id à d'autres endroits, postez un commentaire et je l'ajouterai à cette réponse.

3
Hamish Downer

Cela semble fonctionner pour moi:

Sudo dumpe2fs /dev/sda1 | grep UUID
3

En supposant que vous vouliez l'UUID pour sda1, vous pouvez essayer quelque chose comme ceci:

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

Ajustez sda1 en conséquence. Pour obtenir les UUID pour toutes les partitions, supprimez les greps et les coupes, à la:

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

Exemple de sortie pour sda1 sur mon bureau:

[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

Edit: Veuillez noter que cette solution, bien que plus artificielle que celle udev-> vol_id, ne pas nécessite des privilèges root, fonctionnera sur tout noyau post-2005 ou plus, et s'appuie sur des outils présents dans n'importe quel Distribution Linux qui est par défaut dans le chemin d'accès pour tout utilisateur.

2

Vous pouvez également l'utiliser pour imprimer tous les UUID:

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

ou cette commande sans doute plus simple, remplaçant sda1 avec l'appareil que vous souhaitez rechercher:

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

une adaptation de la deuxième méthode pour imprimer tous les 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}'

Ce qui précède semble fonctionner sur la plupart (tout ce que j'ai trouvé) des systèmes Linux depuis de nombreuses années. Cela peut avoir des défauts, je ne sais pas. Je préférerais obtenir le numéro de série mais ... c'est l'UUID du système de fichiers racine.

Si quelqu'un a un moyen d'obtenir le numéro de série sans avoir besoin d'être root (comme le mien) et de ne pas installer de paquets "inhabituels" qui sont différents dans différentes versions d'Unix, je l'apprécierais - je peux toujours apprendre quelque chose. Et je sais que je mélange des choses - c'est l'UUID du système de fichiers racine, pas un disque.

Le but, BTW, est de générer un numéro unique par machine qui ne peut pas être modifié (comme un numéro de série de disque et des adresses MAC comme il y a longtemps).

Il est utilisé pour l'encodage de logiciels sur une seule machine. L'adresse MAC allait bien jusqu'à ce qu'ils leur permettent d'être virtuels ... certains clients louches ont simplement réglé leur adresse MAC à une constante (sur différents réseaux bien sûr) et ont évité de me payer.

Sous AIX, il y a un seul appel pour obtenir un numéro qui identifie la machine. Peu importe si les changements matériels ou les mises à jour logicielles se produisent, je ne sais pas comment ils le font ... Si la carte mère change, alors le nombre change, donc je pense qu'ils la cachent là. Et c'est plus que rare.

1
Eric Eberhard

Vous pouvez utiliser ce qui suit pour obtenir l'UUID pour un lecteur particulier,

Sudo vol_id -u /dev/sda1

ou vous pouvez l'utiliser pour répertorier tous les UUID des médias connectés,

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