Frage Wie finde ich die UUID eines Dateisystems?


Ich betreibe Ubuntu und möchte das herausfinden UUID eines bestimmten Dateisystems (nicht Partition). Ich weiß, dass ich es gebrauchen kann e2label /dev/sda1 um das Dateisystem Label zu finden, aber es scheint nicht zu einem ähnlichen Weg zu finden UUID.


114
2018-05-02 15:47


Ursprung


Danke für all die Antworten, ich bin mir sicher, dass ich sie alle unter verschiedenen Umständen verwenden werde. - Brad Gilbert
Beachten Sie, dass der Titel "Wie finde ich die UUID einer Partition" war. Diese Frage ist nur sinnvoll, wenn Sie eine GPT-Partitionstabelle verwenden. Hier ist eine Antwort auf diese Frage. - Alastair Irvine


Antworten:


Ein anderer Befehl, der verfügbar sein könnte und auch dafür gut funktioniert, ist 'blkid'. Es ist Teil des e2fsprogs-Pakets. Beispiele für die Verwendung:

Daten nach / dev / sda1 suchen:

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

UUID-Daten für alle Partitionen anzeigen:

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

Zeige UUID-Daten für alle Partitionen im leichter zu lesenden Format: (Hinweis: In neueren Versionen, blkid -L hat eine andere Bedeutung, und blkid -o list sollte stattdessen verwendet werden)

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

Zeige nur die UUID für / dev / sda1 und sonst nichts:

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

144
2018-05-04 19:11



Auf meinem Ubuntu-Computer brauche ich kein sudo. - Brad Gilbert
Einfach tippen blkid, hat mir genau das gebracht, was ich wollte, aber nicht ganz das, wonach ich gefragt habe. (Ich nehme es trotzdem an, weil ich sicher bin, dass ich es oft benutze) - Brad Gilbert
Bei neueren Versionen von Ubuntu der entsprechende Befehl für blkid -L ist jetzt blkid -o list; das -L Option wurde geändert in -L label ein Gerät suchen, das das angegebene Label verwendet. - aculich
@aculich Ich habe die Antwort aktualisiert, um die aktuelle Syntax für blkid. Danke, dass du es erwähnt hast. - Christopher Cashell
Ausgezeichnet, wusste ich nie blkid; Das habe ich immer gerade getan ls -l /dev/disk/by-uuid. Auf Gentoo, blkid ist in sys-apps/util-linux - AdmiralNemo


Nur für GPT-partitionierte Festplatten

Auf einer GPT-formatierten Platte wird jeder Partition eine GUID zugewiesen, die eine Form von UUID darstellt, obwohl dies wahrscheinlich nicht das ist, worauf sich das ursprüngliche Poster bezieht. Daher ist diese Antwort wahrscheinlich weniger hilfreich für den ursprünglichen Fragesteller. Trotzdem glaube ich, dass ein wichtiger Unterschied zu beachten ist.

Um die GUID von Partition 1 auf dem GPT-formatierten Laufwerk / dev / sda sowie seine Partitionsbezeichnung und so weiter zu erhalten:

sudo sgdisk -i 1 /dev/sda

oder alle mit:

ls -l /dev/disk/by-partuuid

Um mit dem root des Dateisystems, das sich auf einer bestimmten Partition befindet, zu booten, verwenden Sie die Linux-Kernel-Parametersyntax von:

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

In diesem Fall können Sie nur den Anfang der UUID angeben - genug, um eindeutig zu sein. Dieser Parameter ist primitiver und kann vom Kernel früher beim Startvorgang verstanden werden.


Es gibt einen Unterschied in der Semantik zwischen diesen:

Ein Datenträger enthält Partitionen, eine Partition enthält ein Dateisystem, ein Dateisystem enthält Verzeichnisse und Dateien. Für einige Setups und Betriebssysteme gibt es mehrere Ebenen.

Die GUID-UUID und das zugehörige Label beziehen sich auf eine Partition, nicht jedoch auf den Inhalt der Partition. Eine neue Partition auf demselben Datenträger oder eine Partition auf einem neuen Datenträger wird eine neue GUID-UUID haben. Die gleiche Partition könnte ein Dateisystem eines Tages und eines anderen an einem anderen Tag enthalten. Es existiert nur für GPT-formatierte Festplatten, jedoch nicht für veraltete partitionierte Festplatten. In der Regel gibt es hier kein Dienstprogramm mehr als das Spezifizieren root=/dev/sda1 oder root=8:1.

Die anderen aktuellen Antworten beziehen sich auf die UUID von a Dateisystem in einigen enthaltenden Partition. Wenn das Dateisystem als Ganzes auf eine andere Partition oder Festplatte kopiert wird, bleibt dieser Wert gleich. Diese UUID ist nützlich, um ein verschobenes Dateisystem zu finden. Daher ist dies wahrscheinlich für die meisten Menschen zutreffender. Linux-Kernel-Parameter root=UUID=87654321-4321-4321-a567-123456789012 bezieht sich darauf.

Ich glaube root=LABEL= und root=UUID= sind durch frühen Benutzerbereich implementiert, der Init-Code, den ich neulich auf meinem System gesehen habe, übersetzte diese Parameter in / dev / disk / by-uuid und / dev / disk / by-label (Links, die ich glaube, werden von udev in userspace auf meinem System).

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


9
2018-06-23 21:55



Korrekter Gebrauch scheint zu sein -i1 oder -i 1, im Gegensatz zu -i:1, mit sgdisk 1.0.1. - Charles Duffy
@CharlesDuffy danke, dass du diesen Fehler gefunden hast. Ich habe die Antwort bearbeitet, um sie zu korrigieren. - John S Gruber


Der einfachste Weg dies für ext2 / ext3 / ext4 zu tun ist:

/sbin/tune2fs -l /dev/sda1

5
2018-05-02 15:57



Dies funktioniert, vorausgesetzt Ihr Dateisystem ist als ext2, ext3 oder ext4 formatiert. Die meisten Dateisysteme gehören dazu, aber nicht alle. Es wird auch nicht für Swap-Partitionen funktionieren. Siehe meine Antwort für einen universellen Weg. - Hamish Downer
Dies führt in meinem Fall zu Couldn't find valid filesystem superblock. - Michel


Der empfohlene Weg, dies zu tun, ist zu tun

sudo vol_id -u /dev/sda2

Weitere Informationen zur Verwendung von UUIDs finden Sie unter Dieser Beitrag (von ubuntu help, sollte aber für jede Linux Distribution mit UUIDs funktionieren).

Wie in den Kommentaren zu dieser Frage erwähnt, ist vol_id möglicherweise nicht in Ihrem Pfad. Auf Ubuntu ist es in / sbin, so dass das obige funktioniert. Für Fedora scheint es nötig zu sein

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

Wenn andere Distributionen vol_id an anderen Stellen haben, dann poste einen Kommentar und ich füge ihn zu dieser Antwort hinzu.


3
2018-05-02 16:53



Dies funktioniert nicht auf meinem Fedora 10 Laptop. - Eddie
Dies ist eine viel bessere Lösung als meine. Eddie, vol_id befindet sich in / lib / udev. mish, könntest du deine Antwort so bearbeiten, dass sie den vollständigen Pfad vor vol_id voranstellt? / lib / udev befindet sich standardmäßig nicht in dem Pfad von root, der mir bekannt ist. - Mihai Limbăşan
"/ lib / udev / vol_id / dev / sda2" scheint zu funktionieren. Wenige Leute werden / lib / udev auf ihrem Weg haben. - Eddie
Auf meinem Ubuntu Computer gibt es einen symbolischen Link von /sbin/vol_id zu /lib/udev/vol_id - Brad Gilbert
vol_id wurde von Ubuntu ab Karmic gelöscht (9.10), ist also nicht mehr nützlich oder relevant. Es hat viele Verrenkungen durchgemacht, um dorthin zu gelangen vol_id wurde irgendwann ersetzt Blkid. - Alain O'Dea


Angenommen, Sie möchten die UUID für sda1, können Sie Folgendes versuchen:

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

Passen Sie sda1 entsprechend an. Um die UUIDs für alle Partitionen zu erhalten, lege die Greps und Schnitte ab, a la:

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

Beispielausgabe für sda1 auf meinem Desktop:

[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

Bearbeiten: Bitte beachten Sie, dass diese Lösung, obwohl mehr erfunden als die udev-> vol_id, tut nicht Sie benötigen root-Rechte, funktionieren auf jedem Kernel nach 2005 oder sind auf Tools angewiesen, die in jeder Linux-Distribution vorhanden sind, die standardmäßig im Pfad für jeden Benutzer enthalten sind.


2
2018-05-02 16:22



Dies funktioniert auf jedem Computer, auf dem eine ausreichende Anzahl von devfs läuft. - Eddie


Dies scheint für mich zu funktionieren:

sudo dumpe2fs /dev/sda1 | grep UUID

2
2017-09-18 21:08





Sie können dies auch verwenden, um alle UUIDs zu drucken:

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

oder dieser wohl einfachere Befehl ersetzt sda1 mit dem Gerät, nach dem Sie suchen möchten:

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

eine Anpassung der zweiten Methode zum Drucken aller UUIDs:

find /dev/disk/by-uuid -type l -exec sh -c 'basename $(readlink {}); basename {}; echo' \;

1
2017-11-30 23:09





Die script-clean Methode, die für jede Art von Dateisystem funktioniert, ist:

lsblk -no UUID <device-containing-FS>

Oder, mit dem Mountpoint (oder einer Datei darin):

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

Die Ausgabe ist die UUID, die gesamte UUID und nichts als die UUID.


1
2017-12-30 13:29





Sie können Folgendes verwenden, um die UUID für ein bestimmtes Laufwerk abzurufen:

sudo vol_id -u /dev/sda1

oder Sie können dies verwenden, um alle UUIDs für die angeschlossenen Medien aufzulisten,

ls /dev/disk/by-uuid

0
2018-05-02 17:24



Nicht mehr gültig ab Ubuntu 9.10 als vol_id wurde entfernt. - Alain O'Dea


ls -l /dev/disk/by-uuid | grep `lsblk | grep "/" | awk '{print $1}'` | awk '{print $9}'

Das oben genannte scheint bei den meisten (allen, die ich gefunden habe) Linux-Systemen über viele Jahre hinweg zu funktionieren. Es kann Fehler haben, ich weiß es nicht. Ich würde es vorziehen, die Seriennummer zu bekommen, aber ... das ist die UUID des Root-Dateisystems.

Wenn jemand eine Möglichkeit hat, die Seriennummer zu bekommen, ohne root zu sein (wie meins ist) und nicht "ungewöhnliche" Pakete zu installieren, die in verschiedenen Versionen von Unix unterschiedlich sind, würde ich es begrüßen - kann immer etwas lernen. Und ich bin mir bewusst, dass ich Dinge mische - das ist das Root-Dateisystem UUID, keine Festplatte.

Der Zweck, BTW, besteht darin, eine eindeutige Nummer pro Maschine zu generieren, die nicht geändert werden kann (wie eine Seriennummer auf der Festplatte und wie einst MAC-Adressen).

Es wird zum Kodieren von Software auf einer einzigen Maschine verwendet. Die MAC-Adresse war in Ordnung, bis sie es erlaubten, virtuell zu sein ... einige schäbige Kunden haben einfach ihre MAC-Adresse auf eine Konstante (in verschiedenen Netzwerken natürlich) gesetzt und vermieden, mich zu bezahlen.

In AIX gibt es einen einzelnen Aufruf, um eine Nummer zu erhalten, die die Maschine identifiziert. Es ist egal, ob sich die Hardware ändert oder Software-Updates auftreten, also habe ich keine Ahnung, wie sie es machen ... Wenn sich das Motherboard ändert, dann ändert sich die Nummer, also denke ich, dass sie es dort verstecken. Und das ist selten.


0
2018-03-24 01:11