iX 5/2017
S. 142
Praxis
Tools und Tipps
Aufmacherbild

Linux-Geräte per UUID identifizieren

Genau bezeichnet

Unter Linux werden Partitionen nicht nur durch Gerätenamen wie /dev/sda1 referenziert, sondern auch über universelle IDs. Die sind zwar unhandlich, haben jedoch Vorteile.

Oft besteht in der IT die Notwendigkeit, Dinge mit eindeutigen Namen zu versehen, um sie identifizieren und wiedererkennen zu können. Die Anwendungsmöglichkeiten sind weit gestreut und reichen von ganzen Geräten (Smartphones) über Datenträger und Dateisysteme bis zu Datensätzen in Datenbanken oder Transaktionen. Eine betagte Form der Identifikation ist beispielsweise der Partitionstyp auf MBR-Datenträgern (Partition ID), der in Form eines Byte-Wertes dargestellt wird: 0x83 oder 83h (mit hexadezimaler Präfix- beziehungsweise Suffix-Schreibweise) etwa kennzeichnet eine Linux-Datenpartition, 82h hingegen eine Linux-Auslagerungspartition. 256 unterschiedliche Werte schränken die Einsatzmöglichkeiten stark ein.

Als universeller Identifikationsstandard wurde der Universally Unique Identifier (UUID) entwickelt und von der Open Software Foundation (OSF) als Teil des Distributed Computing Environment (DCE) standardisiert. Ziel war es, ein Kennzeichnungssystem für verteilte Systeme zu schaffen, das ohne zentrale Koordinierung (wie MAC- oder IP-Adressen) funktioniert. Ein mehr oder weniger zufälliger 128-Bit-Wert (16 Byte) reicht laut Standard aus, um Kollisionen auszuschließen.

Der Aufbau eines UUID – auch die „UUID(-Nummer)“ – ist einfach und in RFC4122 (Requests for Comments) ausführlich definiert: Die 16-Byte-Zahl wird hexadezimal notiert und in fünf Gruppen unterteilt:

01234567-89ab-cdef-0123-456789abcdef

Laut RFC4122 gibt es fünf verschiedene UUID-Versionen. Version 1 beinhaltet einen Zeitstempel als 60-Bit-Wert seit dem Start des gregorianischen Kalenders (15. Oktober 1582) und zählt die vergangenen 100-ns-Intervalle hoch, hinzu kommt die MAC-Adresse des erzeugenden Systems. Ein UUIDv1 ist damit nicht anonym. UUIDv2 ist der „DCE Security UUID“, der das Zeitintervall auf 7 Minuten erhöht. Die Versionen 3 und 5 sind namensbasierte UUIDs auf der Grundlage von MD5- (UUIDv3) und SHA1-Hashes (UUIDv5), mit denen beispielsweise DNS-Namen in den Erzeugungsprozess des UUID einfließen können. Schließlich werden UUIDs der Version 4, abgesehen von durch den Standard vorgegebenen Bits, komplett zufällig generiert.

UUIDs werden als 8-4-4-4-12-Bytegruppen dargestellt. Die beiden rechten 4er-Gruppen enthalten Informationen zum UUID-Typ. Bei

xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx

wird die UUID-Variante in M und die UUID-Version in N codiert.

UUIDs umgehen etwa bei Linux das Durcheinander, das nach dem Entfernen eines Laufwerks bei den Gerätebezeichnungen nach dem sdX-Schema entsteht.

Linux-Systemverwalter kommen beim Dateisystemmanagement mit UUIDs in Kontakt. Mit Ubuntu 6.10 beispielsweise wechselte Canonical von der klassischen Bezeichnung von Datenträgern (etwa /dev/sda) zu UUIDs. Die im System vorhandenen Dateisysteme inklusive Swap werden seitdem als UUID angegeben, was Dateien wie /etc/fstab oder die (alte) /boot/grub/menu.lst zwar für Menschen unverständlich macht, aber den Vorteil hat, dass das Betriebssystem bei einem Ausfall oder Wechsel eines Datenträgers alle vorhandenen Dateisysteme immer noch korrekt zuordnen kann.

Bezeichner für Dateisysteme

Auf einem aktuellen Linux-System können bei einem gemischten Betrieb von MBR- (Master Boot Record) und GPT-Laufwerken (Global Partitioning Table) zwei Arten von UUIDs auftreten. Im Verzeichnis /dev/disk/by-uuid findet man die UUIDs der MBR-Partitionen, unter /dev/disk/by-partuuid die der GPT-Partitionen.

Die Zuordnung lässt sich auch mit root-Rechten per blkid anzeigen. Auf einem mit MBR partitionierten Datenträger wird der UUID einer Partition bei der Formatierung festgelegt und ändert sich dementsprechend bei jeder Neuformatierung. Wird ein zweites Linux installiert und soll es sich die Swap-Partition mit anderen Systemen teilen, darf diese daher auf MBR-Platten nicht neu formatiert werden. Bei GPT-Laufwerken ist der UUID einer Partition in den GPT-Daten abgelegt, sodass sich dieser auch bei einer Neuformatierung von Partitionen nicht ändert.

Ein valider UUID lässt sich unter Linux durch den Befehl uuidgen oder

cat /proc/sys/kernel/random/uuid

erzeugen. Dem zweiten Dateisystem auf /dev/sdX kann dieser neue UUID zugeordnet werden:

tune2fs -U <UUID> /dev/sdX2

Das ist notwendig, wenn Datenträger per dd kopiert wurden und deshalb identische UUIDs aufweisen. Statt einen UUID von Hand anzugeben (Copy-and-Paste) lässt er sich durch tune2fs U random auf einen zufälligen und durch das Schlüsselwort time direkt auf einen Timestamp-basierten Wert setzen. tune2fs U clear löscht den UUID eines Datenträgers. (tiw)