UUID

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. ⚓︎ Ein Terminal öffnen

Inhaltsverzeichnis
  1. Übersicht
  2. UUID erzeugen
  3. UUIDs anzeigen
  4. UUIDs verändern
    1. UUIDs von Partitionen ändern
    2. UUID eines Dateisystems mit GParted ände...
    3. UUID eines Dateisystems im Terminal ände...
      1. Ext2/3/4
      2. Reiserfs
      3. Swap
      4. Verschlüsselte Partitionen
      5. RAID-Partitionen
      6. FAT, exFAT und NTFS
  5. Anwendungen
    1. Zuordnung Windows Partitionen
  6. Links

UUID steht für Universally Unique Identifier und bezeichnet nach dem IETF-Standard RFC4122 formatierte Identifikationsnummern. Diese sehen etwa so aus:

Es wird hierfür auch die Bezeichnung GUID (Globally Unique Identifier) verwendet.

Im Deutschen kann man für die fremdsprachige Abkürzung UUID jeden Genus anwenden; in diesem Artikel wird durchgängig das generische Maskulinum (ein/der UUID) benutzt.

UUIDs kann man zur Benennung jedes beliebigen Objektes einsetzen. Bei Ubuntu werden sie insbesondere zur eindeutigen Identifizierung von Blockgeräten wie Dateisystemen und Partitionen von Datenträgern verwendet, worauf sich dieser Artikel beschränkt:

UUIDs werden üblicherweise mit Verfahren erzeugt, die darauf ausgelegt sind, dass ein solcher Identifikator einmalig ist. Die Wahrscheinlichkeit, dass zwei generierte UUIDs gleich sind, ist verschwindend gering. Bei der Verwendung solcher eindeutigen Identifikationsnummern sind der Phantasie keine Grenzen gesetzt.

Übersicht

Die Windows-Dateisysteme FAT, exFAT und NTFS verwenden keine UUIDs, sondern VSNs ("Volume Serial Number"). Diese VSNs werden manchmal auch als Volume-ID bezeichnet. Unter Linux wird diese Kennung vom Dateisystemtreiber als Ersatz für die fehlende UUID verwendet. Eine VSN strebt zwar ebenfalls weltweite Einmaligkeit an, ist aber deutlich kürzer als ein UUID und erfüllt daher diesen Anspruch deutlich schlechter:

Vergleich verschiedener Identifikatoren
Typ UUID Serial Number (NTFS) Serial Number (FAT)
Format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx xxxxxxxxxxxxxxxx xxxx-xxxx
Länge 16 Bytes (32 Zeichen, mit 4 Bindestrichen in 5 Gruppen aufgeteilt) 8 Bytes 4 Bytes
Anzahl der möglichen Identifikatoren 28·16 ≈ 3.4 · 1038 28·8 ≈ 18 · 1018 28·4 ≈ 4.3 · 109

Experten-Info:

Ein UUID ist keine einfache Bytefolge, vielmehr stehen die ersten drei Felder für Ganzzahlen. Im Speicher einer Little-Endian-Maschine findet man diese Felder daher jeweils in der umgekehrten Reihenfolge der Bytes. Die hinteren Felder sind dagegen als Bytefolgen definiert und in der Reihenfolge der externen Darstellung auch im Speicher auffindbar. Details siehe RFC4122.

Eine VSN wird unter Windows wie unter Linux von verschiedenen Programmen unterschiedlich dargestellt, was für die Anzeige zu unterschiedlichen Reihenfolgen der 4 gelesenen Bytes führen kann:

  • Beispielsweise mit dd gelesene Bytefolge: "bf ed d1 65"

  • Darstellung unter Linux mit file als 32-Bit-Little-Endian-Ganzzahl: 0x65d1edbf

  • Darstellung unter Linux durch lsblk, blkid, ls etc.: 65D1-EDBF

  • Mögliche Interpretation als 32-Bit-Big-Endian-Ganzzahl: BFED-D165

  • Mögliche Interpretation als Folge zweier 16-Bit-Little-Endian-Ganzzahlen: EDBF-65D1

  • Mögliche Interpretation als Folge zweier 16-Bit-Big-Endian-Ganzzahlen: BFED-D165

UUID erzeugen

Ein UUID lässt sich bequem bereits fertig formatiert mit einem Kommandozeilenbefehl[1] erzeugen:

uuidgen 

Bei jedem Aufruf wird ein anderer UUID angezeigt. Beim Aufruf kann man über Optionen steuern, nach welcher von drei möglichen Methoden das Ergebnis berechnet werden soll. Darunter gibt es auch Möglichkeiten zur Vorgabe des Anfangswertes für den Pseudo-Zufall-Generator. Die Manpage des Programms erklärt die Einzelheiten:

man uuidgen 

⚓︎

UUIDs anzeigen

Auflistung aller im System bekannten und zur Identifizierung von Dateisystemen verwendbaren UUIDs:

ls -Al /dev/disk/by-uuid/ 

Auflistung aller im System bekannten und zur Identifizierung von Partitionen verwendbaren UUIDs:

ls -Al /dev/disk/by-partuuid/ 

Zur Auflistung aller UUIDs von Dateisystemen auf einem Datenträger muss man eine Gerätedatei des Datenträgers kennen; diese kann beispielsweise lauten /dev/sda oder /dev/nvme0n1, wobei in den Beispielen die fett gedruckten Teile individuell anzupassen sind:

lsblk -lf /dev/nvme0n1
lsblk -lf /dev/sda 

Man kann hierfür statt lsblk auch blkid benutzen, was jedoch beim ersten Aufruf root-Rechte benötigt und für weitere Aufrufe die Ergebnisse in der Datei /etc/blkid.tab speichert. Nach dem ersten Aufruf wird dann nur noch diese Datei ausgelesen, anstatt alle Datenträger erneut abzufragen.

Der Befehl lsblk kann auch zusätzlich die UUIDs der Partitionen anzeigen:

lsblk -lf -o+PARTUUID /dev/nvme0n1
lsblk -lf -o+PARTUUID /dev/sda 

Diese Variante erzeugt eine übersichtliche Tabelle mit den UUIDs aller Dateisysteme und aller Partitionen aller Datenträger:

lsblk -lf -o+PARTUUID /dev/disk/*/* 

Statt einer Gerätedatei für den Datenträger kann man lsblk oder blkid auch eine Gerätedatei für eine Partition eines Datenträgers angeben und damit die Ausgabe auf eben diese Partition einschränken.

Die Programme lsblk und blkid geben auch die ersatzweise wie UUIDs verwendbaren VSNs als UUID aus. Bei Datenträgern mit DOS/MBR-Partitionsschema werden für die fehlenden UUIDs der Partitionen aus der VSN im MBR abgeleitete Ersatzbezeichner generiert; diese sind wie UUIDs für Partitionen verwendbar. Aus einer VSN 65D1-EDBF im MBR wird beispielsweise 65D1EDBF-01 als Ersatzbezeichnung für die erste Partition.

Bei FAT-Dateisystemen kann man die VSN des Dateisystems auch mit dem Programm file aus der Partition (hier beispielsweise: /dev/nvme0n1p1) lesen:

sudo file -L -s -k /dev/nvme0n1p1 | grep -o 'serial number [^,]*' 

Grafische Programmen unterstützen leider die Anzeige von UUIDs nur unvollkommen:

⚓︎

UUIDs verändern

Artikel für fortgeschrittene Anwender

Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.

Der GUID eines Datenträgers wird beim Anlegen der Partitionstabelle (GPT), ebenso der UUID einer Partition beim Anlagen der Partition erzeugt, und diese Angaben werden in der Partitionstabelle gespeichert. Beim DOS/MBR-Partitionsschema wird ggf. eine VSN zur Identifizierung des Datenträgers im ersten Sektor des Datenträgers gespeichert; aus dieser VSN leitet Linux Ersatzbezeichner für die Partitionen ab. Alle diese Angaben sind Pseudo-Zufallszahlen. Der UUID eines Dateisystems wird beim Formatieren seines Laufwerks automatisch generiert.

Alle diese Kennungen sind konzeptionell als nicht veränderbar gedacht und brauchen normalerweise nicht geändert werden. In gewissen Fällen kann dies aber sinnvoll sein, z.B. nach einer Festplattenspiegelung, denn dabei werden alle UUIDs und VSNs bitgenau kopiert. Wenn Original und Kopie beide zur gleichen Zeit vom System zugreifbar sind, können daher irrtümlich Zugriffe auf das falsche Gerät erfolgen. Es ist empfehlenswert, nach einer solchen Festplattenspiegelung auf der Kopie alle UUIDs und VSNs zu ändern. Wenn man wirklich Original und Kopie gleichzeitig am System anschließen möchte, ist diese Änderung sogar unbedingt erforderlich!

UUIDs von Partitionen ändern

Nach einer Festplattenspiegelung muss man sowieso als ersten Schritt bei der Kopie mit gdisk die Partitionstabelle (GPT) reparieren (ausgenommen, wenn Original- und Zieldatenträger exakt gleich groß sind), weil deren Backup-Teil auf dem Datenträger an der falschen Stelle liegt. Bei dieser Gelegenheit sollte man auch den GUID des Datenträgers und die UUIDs aller Partitionen auf neue zufällige Werte setzen. Das Programm gdisk hat dafür im "experts' menu" ( X ) den Befehl "Randomize the disk's GUID and all partitions' unique GUIDs" ( R ). Im selben Menü findet man auch Befehle, die nur den GUID des Datenträgers oder nur den UUID einer einzelnen Partition ändern.

Diese Änderungen kann man auch mit der Programmvariante sgdisk durchführen.

Bei einem mit dem DOS/MBR-Schema partitionierten Datenträger ist ggf. in einer Kopie sinnvoll, die VSN im MBR zu ändern. Hierfür ist unter Linux kein Programm bekannt. Versierte Experten können es mit dd oder einem Hex-Editor versuchen. Generell wird davon abgeraten. Bei Windows können nach solchen Änderungen Fehlfunktionen auftreten.

Zur Änderung des UUIDs eines Dateisystems in der Kopie kann man die GUI Gparted verwenden oder auf der Kommandozeile die nachfolgend genannten Befehle benutzen.

UUID eines Dateisystems mit GParted ändern

Mit Hilfe von GParted kann man den UUID des Dateisystems der ausgewählten Partition ändern. Dazu klickt man auf die gewünschte Partition und wählt dann den Menüpunkt "Partition → Neue UUID". Damit erzeugt man für das Dateisystem in der Partition einen neuen zufälligen UUID. Bei NTFS und FAT kommt noch eine Warnung, dass Windows nach Ändern der (hier als "UUID" benannten) VSN möglicherweise nicht weiter funktioniert. Einen vorgegebenen UUID kann man mit GParted nicht zuweisen.

UUID eines Dateisystems im Terminal ändern

Je nach verwendetem Dateisystem sind hierfür unterschiedliche Befehle erforderlich. Generell sollte man jedoch vorher unbedingt ein Backup anlegen und das Dateisystem aushängen.

Hinweis:

Im folgenden muss /dev/sdaX jeweils durch die Bezeichnung der zu ändernden Partition ersetzt werden.

Ext2/3/4

Details zu diesen Dateisystemen und den dazu gehörenden Dienstprogrammen lese im Artikel ext.

sudo tune2fs -U NEUER_UUID /dev/sdaX 

Hierbei kann NEUER_UUID entweder ein (z.B. mit uuidgen) selbst erstellter UUID sein oder eines dieser Schlüsselwörter:

  • random - setzt einen zufälligen UUID

  • time - setzt einen aus der aktuellen Uhrzeit generierten UUID

  • clear - Abkürzung für 00000000-0000-0000-0000-000000000000

Reiserfs

sudo reiserfstune -u NEUER_UUID /dev/sdaX 

NEUER_UUID muss ein gültiger UUID sein. Um automatisch mit uuidgen einen zufälligen UUID zu erzeugen, kann man diesen Befehl verwenden:

sudo reiserfstune -u $(uuidgen) /dev/sdaX 

Swap

Den UUID eines Dateisystems vom Typ Swap kann man nicht ändern. Es würde sich auch nicht lohnen, da üblicherweise in solchen Dateisystemen keine Dateien mit dauerhaftem Wert gespeichert werden. Statt den UUID zu ändern, erzeugt man einfach ein neues Dateisystem:

sudo swapoff -v /dev/sdaX
sudo mkswap --uuid NEUER_UUID /dev/sdaX
sudo swapon -v /dev/sdaX 

Man kann die Option --uuid mit -U abkürzen. Wenn man auf die Angabe dieser Option verzichtet, wird ein neuer UUID zufällig gewählt.

Es existiert ein Skript, das den UUID aus /etc/fstab automatisch übernimmt: uuid2swap.

Details zu diesen Dateisystemen und den dazu gehörenden Dienstprogrammen lese im Artikel Swap.

Verschlüsselte Partitionen

sudo cryptsetup luksUUID /dev/sdaX --uuid NEUER_UUID 

RAID-Partitionen

sudo mdadm --assemble /dev/mdX --update=uuid --uuid NEUER_UUID 

FAT, exFAT und NTFS

Wie bereits erwähnt, verwenden Windows-Dateisysteme nicht UUIDs, sondern anders formatierte Seriennummern. Die von blkid und lsblk für Windows-Dateisysteme ersatzweise als "UUID" angezeigten VSNs können unter Linux wie richtige UUID verwendet werden.

Achtung!

Änderungen an Windows-Dateisystemen, auf die man auch mit einem Windows-Betriebssystem zugreifen möchte, sollte man ausschließlich unter Windows vornehmen, damit Windows diese Veränderung erkennt und richtig verarbeitet – externe Eingriffe können zu weitreichenden Fehlern führen.

Um die VSN eines solchen Dateisystems auszulesen bzw. zu ändern kann man ein entsprechendes Windowsprogramm (z.B. HardDiskSerialNumberChanger.exe) benutzen.

Mit dem Befehl mlabel aus dem Paket mtools (welches man in der Regel selbst installieren muss) kann man auch die VSN eines FAT-Dateisystems ändern. In den Beispielen steht X für den Windows-typischen Laufwerksbuchstaben (aber unter Linux!) und LABEL für das Label des Dateisystems:

  • sudo mlabel -n X:LABEL 

    VSN auf neuen zufälligem Wert ändern.

  • sudo mlabel -N NEUER_VSN X:LABEL 

    VSN auf den angegebenen Wert NEUER_VSN ändern.

Für exFAT ist kein Kommandozeilenprogramm bekannt, die VSN kontrolliert ohne erneute Formatierung zu ändern.

Für die Änderung der 64-Bit-Kennung eines NTFS-Dateisystems kann man den Befehl ntfslabel aus dem Paket ntfs-3g verwenden; dieser erlaubt auch eine Änderung nur der halben Kennung, wodurch eine erneute Registrierung der Windows-Lizenz vermieden werden soll:

  • sudo ntfslabel --new-serial /dev/sdaX 

    64-Bit-VSN auf neuen zufälligem Wert ändern.

  • sudo ntfslabel --new-serial=NEUER_VSN /dev/sdaX 

    64-Bit-VSN auf den angegebenen Wert NEUER_VSN ändern.

  • sudo ntfslabel --new-half-serial /dev/sdaX 

    Eine Hälfte der 64-Bit-VSN auf neuen zufälligem Wert ändern.

  • sudo ntfslabel --new-half-serial=NEUER_VSN /dev/sdaX 

    Eine Hälfte der 64-Bit-VSN auf den angegebenen Wert NEUER_VSN ändern.

Die VSNs eines Windows-Dateisystems stehen an unterschiedlichen Stellen im ersten Block des Blockgerätes, welches das Dateisystem enthält. Die genaue Position ist abhängig von Typ und Version (und wahrscheinlich weiteren Größen) des formatierten Dateisystems; siehe z.B. http://wiki.osdev.org/FAT 🇬🇧 für Details. Bei Kenntnis der genauen Position lassen sich VSNs auch mit dd oder einem Hex-Editor ändern. Wegen der großen Gefahr, dabei etwas zu zerstören, ist das nur etwas für erfahrene Experten.

Anwendungen

Zuordnung Windows Partitionen

Um eine eindeutige Zuordnung einer von Windows verwendeten Partition für Arbeiten unter Ubuntu zu erhalten, kann man die VSN des Dateisystems verwenden und wie oben gezeigt unter Linux abfragen. Man sollte das wegen möglicher Uneinigkeit bzgl. der Reihenfolge nicht unter Windows machen, sondern konsequent unter Windows die unter Windows abgefragte und unter Linux die unter Linux abgefragte Bezeichnung verwenden.

Wenn man für Windows mehrere Dateisysteme verwendet, kann man diese auch über Label unterscheiden und zuordnen. Bei Beschränkung auf den ASCII-Zeichensatz sind Label von Dateisystemen unter Windows und Linux gleichlautend.