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

134

J'utilise Ubuntu et je souhaite connaître le UUIDsystème de fichiers en question (pas la partition). Je sais que je peux utiliser e2label /dev/sda1pour trouver l’étiquette du système de fichiers, mais il ne semble pas y avoir de moyen similaire pour trouver le fichier UUID.

Brad Gilbert
la source
Merci pour toutes les réponses, je suis sûr de les utiliser dans des circonstances différentes.
Brad Gilbert
2
Notez que le titre était "Comment trouver l'UUID d'une partition". Cette question n'a de sens que si vous utilisez une table de partition GPT. Voici une réponse à cette question .
Alastair Irvine

Réponses:

165

Une autre commande qui pourrait être disponible et qui fonctionne aussi très bien pour cela est "blkid". Cela fait partie du paquet 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 de toutes les partitions dans un format plus facile à lire: (Remarque: dans les versions les plus récentes, blkid -La une signification différente et blkid -o listdoit ê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

Afficher uniquement l’UUID pour / dev / sda1 et rien d’autre:

topher@crucible:~$ sudo blkid -s UUID -o value /dev/sda1
727cac18-044b-4504-87f1-a5aefa774bda
Christopher Cashell
la source
1
Sur mon ordinateur Ubuntu, je n'ai pas besoin d'utiliser sudo.
Brad Gilbert
Taper juste blkid, m'a donné exactement ce que je voulais, mais pas tout à fait ce que je demandais. (Je l'accepte quand même, car je suis sûr de l'utiliser souvent)
Brad Gilbert
3
Sur les versions plus récentes d'Ubuntu, la commande équivalente blkid -Lest maintenant blkid -o list; l' -Loption a été modifiée pour -L labelrechercher un périphérique utilisant l'étiquette spécifiée.
Aculich
@aculich J'ai mis à jour la réponse en incluant la syntaxe récente pour blkid. Merci de le mentionner.
Christopher Cashell
2
Excellent, je n'ai jamais su à propos de blkid; J'ai toujours juste fait ls -l /dev/disk/by-uuid. Sur Gentoo, blkidest sys-apps/util-linux
dedans
10

Pour les disques partitionnés GPT uniquement

Sur un disque formaté en GPT, un GUID est attribué à chaque partition. Il s'agit d'une forme d'UUID, bien que ce ne soit probablement pas ce à quoi l'affiche originale faisait référence. Par conséquent, cette réponse est probablement moins utile pour le questionneur initial. Néanmoins, je crois qu’il faut faire une distinction importante.

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

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 se trouvant sur une certaine partition, utilisez la syntaxe de paramètre du noyau Linux suivante:

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

Dans ce cas, vous pouvez spécifier uniquement 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 installations et certains systèmes d'exploitation, il y a plus de 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 au format 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/sda1ou root=8:1.

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

Je crois que 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 (des liens, je crois, ont été créés par udev dans l'espace utilisateur sur mon système).

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

John S Gruber
la source
L'utilisation correcte semble être -i1ou -i 1, contrairement à -i:1, avec sgdisk 1.0.1.
Charles Duffy
@ Charles Duffy merci d'avoir trouvé cette erreur. J'ai édité la réponse pour la corriger.
John S Gruber
7

La méthode de nettoyage de script qui fonctionne 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 n'importe quel fichier qu'il contient):

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

La sortie est l'UUID, l'intégralité de l'UUID et rien que l'UUID.

Tom Hale
la source
1
C'est mieux que blkiddans la réponse de @ christopher-cashell, car vous n'avez pas besoin de devenir root. Pour un point de montage ou d' un fichier mieux faire: lsblk -no UUID $(findmnt -n -o SOURCE --target <file>).
Marc
@marcz Qui échoue sur les sous-volumes btrfs: findmnt -n -o SOURCE --target ~donne:/dev/mapper/vg_svelte-home[/@home]
Tom Hale
Right @ tom-hale, lsblk -no UUID $(findmnt -n -o SOURCE --target <file> | cut -d[ -f1)devrait se débarrasser du sous-volume lorsqu'il est présent.
Marc
5

La façon la plus simple de procéder pour ext2 / ext3 / ext4 est la suivante:

/sbin/tune2fs -l /dev/sda1
Eddie
la source
3
Cela fonctionnera à condition que votre système de fichiers soit au format ext2, ext3 ou ext4. La plupart des systèmes de fichiers en font partie, mais pas tous. Cela ne fonctionnera pas non plus pour les partitions d'échange. Voir ma réponse pour un moyen universel.
Hamish Downer
Cela se traduit dans mon cas dansCouldn't find valid filesystem superblock.
Michel
3

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 (à partir de l'aide d'ubuntu, mais devrait fonctionner pour toute distribution Linux utilisant des UUID).

Comme indiqué dans les commentaires sur cette question, vol_id peut ne pas être sur votre chemin. Sur Ubuntu, il se trouve dans / sbin, ce qui va fonctionner ci-dessus. Pour Fedora, il semble avoir besoin de

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

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

Hamish Downer
la source
Cela ne fonctionne pas sur mon ordinateur portable Fedora 10.
Eddie
C'est une bien meilleure solution que la mienne. Eddie, vol_id se trouve dans / lib / udev. mish, pourriez-vous éditer votre réponse pour préfixer le chemin complet devant vol_id? / lib / udev n'est pas dans le chemin de la racine par défaut pour les distributions à ma connaissance.
Mihai Limbăşan
"/ lib / udev / vol_id / dev / sda2" semble fonctionner. Peu de gens auront / lib / udev sur leur chemin.
Eddie
Sur mon ordinateur Ubuntu il y a un lien symbolique /sbin/vol_idà/lib/udev/vol_id
Brad Gilbert
4
vol_id a été supprimé d’Ubuntu à partir de Karmic (9.10), il n’est donc plus utile ni pertinent. Il y a eu beaucoup de contorsions pour y arriver car vol_id a été construit à un moment donné pour remplacer blkid .
Alain O'Dea
3

Cela semble fonctionner pour moi:

sudo dumpe2fs /dev/sda1 | grep UUID
Marcus Junius Brutus
la source
2

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 de toutes les partitions, supprimez les greps et les découpes, à la fois:

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 de udev-> vol_id, ne nécessite pas de privilèges root, fonctionne sur tous les noyaux post-2005 ou similaires, et s’appuie sur les outils présents dans toutes les distributions Linux le chemin pour n'importe quel utilisateur.

Mihai Limbăşan
la source
Cela fonctionnera sur tout ordinateur exécutant un nombre de devfs assez récent.
Eddie
1

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, à remplacer sda1par le périphérique 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' \;
kiri
la source
1
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 des systèmes Linux (tout ce que j'ai trouvé) 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 paquetages "inhabituels" qui sont différents dans différentes versions d'Unix, je l'apprécierais - je peux toujours apprendre quelque chose. Et je suis conscient que je mélange des choses - il s’agit de l’UUID du système de fichiers racine, pas d’un disque.

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

Il est utilisé pour l’encodage de logiciels sur une seule machine. L’adresse MAC était correcte jusqu’à ce qu’ils les autorisent à être virtuels… certains clients louche ont simplement défini leur adresse MAC sur une constante (sur différents réseaux) et ont évité de me payer.

Sous AIX, un seul appel permet d'obtenir un numéro identifiant la machine. Peu importe si les modifications matérielles ou les mises à jour logicielles se produisent, je ne sais pas comment elles le font ... Si la carte mère change, le numéro change, alors je pense qu'ils le cachent là. Et c'est au-delà des rares.

Eric Eberhard
la source
0

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

sudo vol_id -u /dev/sda1

ou vous pouvez l'utiliser pour répertorier tous les UUID du support attaché,

ls /dev/disk/by-uuid
Rich Adams
la source
Ne s'applique plus à partir d'Ubuntu 9.10 car vol_id a été supprimé.
Alain O'Dea