[[Vorlage(Getestet, general)]] {{{#!vorlage Wissen [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis()]] '''UUID''' steht für '''U'''niversally '''U'''nique '''Id'''entifier und bezeichnet nach dem IETF-Standard [#Links RFC4122] formatierte Identifikationsnummern. Diese sehen etwa so aus: * ``6a12a4d5-e9e6-4568-afcc-34c70b24a668`` Es wird hierfür auch die Bezeichnung '''GUID''' ('''G'''lobally '''U'''nique '''Id'''entifier) 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 [:Labels: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 [:fstab:'''/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: ||<-4 rowclass="titel"> 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 || 2^^(8·16)^^ ≈ 3.4 · 10^^(38)^^ || 2^^(8·8)^^ ≈ 18 · 10^^(18)^^ || 2^^(8·4)^^ ≈ 4.3 · 10^^(9)^^ || {{{#!vorlage Experten 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 [#Links 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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl man uuidgen }}} [[Anker(anzeigen)]] = UUIDs anzeigen = Auflistung aller im System bekannten und zur Identifizierung von Dateisystemen verwendbaren UUIDs: {{{#!vorlage Befehl ls -Al /dev/disk/by-uuid/ }}} Auflistung aller im System bekannten und zur Identifizierung von Partitionen verwendbaren UUIDs: {{{#!vorlage Befehl 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/sd'''a''' oder /dev/nvme'''0'''n'''1''', wobei in den Beispielen die fett gedruckten Teile individuell anzupassen sind: {{{#!vorlage Befehl lsblk -lf /dev/nvme0n1 lsblk -lf /dev/sda }}} Man kann hierfür statt [:lsblk:] auch [:blkid:] benutzen, was jedoch beim ersten Aufruf [:sudo: 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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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. [[Anker(aendern)]] = UUIDs verändern = [[Vorlage(Fortgeschritten)]] 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"'' ([[Vorlage( Tasten, x ) ]]) den Befehl ''"Randomize the disk's GUID and all partitions' unique GUIDs"'' ([[Vorlage( Tasten, 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 [:gdisk/#sgdisk: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 [:mount:aushängen]. {{{#!vorlage Hinweis Im folgenden muss ``/dev/sdaX`` jeweils durch die [:Datenträger/#Wie-heissen-die-Datentraeger:Bezeichnung der zu ändernden Partition] ersetzt werden. }}} === Ext2/3/4 === Details zu diesen Dateisystemen und den dazu gehörenden Dienstprogrammen lese im Artikel [:ext:]. {{{#!vorlage Befehl 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 === {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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: [:Skripte/UUID_anpassen_mit_uuid2swap:uuid2swap]. Details zu diesen Dateisystemen und den dazu gehörenden Dienstprogrammen lese im Artikel [:Swap:]. === Verschlüsselte Partitionen === {{{#!vorlage Befehl sudo cryptsetup luksUUID /dev/sdaX --uuid NEUER_UUID }}} === RAID-Partitionen === {{{#!vorlage Befehl 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. {{{#!vorlage Warnung Ä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 [:Labels:Label] des Dateisystems: * [[Vorlage(Befehl, "sudo mlabel -n X:LABEL" ) ]] VSN auf neuen zufälligem Wert ändern. * [[Vorlage(Befehl, "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: * [[Vorlage(Befehl, "sudo ntfslabel --new-serial /dev/sdaX" ) ]] 64-Bit-VSN auf neuen zufälligem Wert ändern. * [[Vorlage(Befehl, "sudo ntfslabel --new-serial=NEUER_VSN /dev/sdaX" ) ]] 64-Bit-VSN auf den angegebenen Wert NEUER_VSN ändern. * [[Vorlage(Befehl, "sudo ntfslabel --new-half-serial /dev/sdaX" ) ]] Eine Hälfte der 64-Bit-VSN auf neuen zufälligem Wert ändern. * [[Vorlage(Befehl, "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] {en} 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 [#anzeigen 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 [:Labels: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 * [:exFAT:] * [wikipedia:Universally_Unique_Identifier:UUID] * [https://www.rfc-editor.org/rfc/pdfrfc/rfc4122.txt.pdf RFC4122] {en} – IETF-Standard zu UUID, enthält auch Angaben zu Format und Darstellung * [http://technet.microsoft.com/en-us/library/cc938438 Technische Spezifikation FAT] {en} * [http://technet.microsoft.com/en-us/library/cc976808.aspx Technische Spezifikation NTFS] {en} * [http://wiki.osdev.org/FAT] {en} – Wiki mit technischen Details zu FAT # tag: Hardware, System