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:
UUID steht für Universally Unique Identifier und bezeichnet nach dem IETF-Standard RFC4122 formatierte Identifikationsnummern. Diese sehen etwa so aus:
6a12a4d5-e9e6-4568-afcc-34c70b24a668
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:
Jedes Linux-Dateisystem besitzt einen UUID, über den es (weltweit, s.u.!) identifiziert werden kann. Diese Kennung hat im Gegensatz zu temporären Bezeichnern wie beispielsweise die Geräte-Dateien /dev/sdaX den Vorteil, dass UUIDs auch beim Vertauschen von Kabeln oder Ein-/Ausbau von Hardware sich nicht ändern. Andere Eigenschaften wie Label oder Größe des Dateisystems garantieren keine Eindeutigkeit. Vergleichen kann man den UUID also mit einer Personalausweisnummer: Zwei Personen können den gleichen Namen tragen, sie haben aber trotzdem unterschiedliche Ausweisnummern.
Bei Verwendung einer (mit gdisk bearbeitbaren) GPT zur Partitionierung eines Datenträgers gibt es zusätzlich einen individuellen GUID zur Identifizierung des gesamten Datenträgers sowie für jede Partition auch einen individuellen UUID (Partitions-UUID – in den Befehlen als PARTUUID abgekürzt). Außerdem werden UUIDs auch zur Kennzeichnung der Partitionstypen verwendet.
In der Datei /etc/fstab werden Dateisysteme standardmäßig über ihre UUIDs angesprochen, wenn Ubuntu installiert wird.
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:
Die vereinheitlichte Bedienoberfläche GParted zur Partitionierung und Formatierung zeigt den UUID der zur Bearbeitung ausgewählten Partition gar nicht an, sondern nur den UUID des ggf. bereits dort durch Formatierung errichten Dateisystems: Partition auswählen, dann Menüpunkt Partition → Information
In der Gnome Laufwerksverwaltung wird ein UUID ausgegeben, wenn man in der grafischen Darstellung der Partitionen eine Partition anklickt. Dies ist leider weder der individuelle UUID der Partition noch der UUID des ggf. in dieser errichteten Dateisystems, sondern der UUID für den Typ der Partition; dieser ist ungeeignet zur Identifizierung des Dateisystems.
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 UUIDtime
- setzt einen aus der aktuellen Uhrzeit generierten UUIDclear
- Abkürzung für00000000-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.
Links¶
blkid – UUID und andere Kennungen eines Blockgeräts im Terminal abfragen
lsblk – dito., aber ohne sudo und mit weiteren Formatierungsmöglichkeiten
ext – das Standard-Dateisystem bei Ubuntu
RFC4122 🇬🇧 – IETF-Standard zu UUID, enthält auch Angaben zu Format und Darstellung
http://wiki.osdev.org/FAT 🇬🇧 – Wiki mit technischen Details zu FAT