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


Je suis sous 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 un moyen similaire pour trouver le UUID.


114
2018-05-02 15:47


origine


Merci pour toutes les réponses, je suis sûr de les utiliser dans des circonstances différentes. - Brad Gilbert
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 partitions GPT. Voici une réponse à cette question. - Alastair Irvine


Réponses:


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 pour toutes les partitions dans un format plus facile à lire: (Remarque: dans les nouvelles versions, blkid -L a un sens différent, et blkid -o list devrait ê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 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

144
2018-05-04 19:11



Sur mon ordinateur Ubuntu, je n'ai pas besoin d'utiliser sudo. - Brad Gilbert
Il suffit de taper blkid, m'a obtenu 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
Sur les versions plus récentes d’Ubuntu, la commande équivalente pour blkid -L est maintenant blkid -o list; la -L l'option a été changée en -L label pour rechercher 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
Excellent, je n'ai jamais su blkid; J'ai toujours juste fait ls -l /dev/disk/by-uuid. Sur Gentoo, blkid est dans sys-apps/util-linux - AdmiralNemo


Pour les disques partitionnés GPT uniquement

Sur un disque formaté en GPT, un GUID est attribué à chaque partition, qui est 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 configurations 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 à son contenu. 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/sda1 ou root=8:1.

Les autres réponses actuelles font référence à 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 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. Paramètre du noyau Linux root=UUID=87654321-4321-4321-a567-123456789012 se réfère à 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 (des liens, je crois, sont créés par udev dans l’espace utilisateur de mon système).

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


9
2018-06-23 21:55



L'utilisation correcte semble être -i1 ou -i 1, par opposition à -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


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

/sbin/tune2fs -l /dev/sda1

5
2018-05-02 15:57



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 aboutit dans mon cas à Couldn't find valid filesystem superblock. - Michel


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, voir Cet article (de l'aide 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.


3
2018-05-02 16:53



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 de /sbin/vol_id à /lib/udev/vol_id - Brad Gilbert
vol_id a été supprimé d’Ubuntu à partir de Karmic (9.10), il n’est donc plus utile ni pertinent. Il a traversé beaucoup de contorsions pour y arriver comme vol_id était à un moment construit pour remplacer blkid. - Alain O'Dea


En supposant que vous souhaitiez 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 udev-> vol_id, ne ne pas requièrent des privilèges root, fonctionneront sur tous les noyaux postérieurs à 2005 et s'appuieront sur les outils présents dans toutes les distributions Linux qui sont par défaut dans le chemin d'accès de tout utilisateur.


2
2018-05-02 16:22



Cela fonctionnera sur tout ordinateur exécutant un nombre de devfs assez récent. - Eddie


Cela semble fonctionner pour moi:

sudo dumpe2fs /dev/sda1 | grep UUID

2
2017-09-18 21:08





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
2017-11-30 23:09





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.


1
2017-12-30 13:29





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

0
2018-05-02 17:24



N’est plus applicable à partir d’Ubuntu 9.10 vol_id a été retiré. - Alain O'Dea