
Ich folge einem Rezept, das ich vor ein paar Jahren erstellt habe und bei dem ich an einer Stelle blkid
eine Dateisystem-UUID abrufen muss.
Ich habe mir diesen Befehl zusammen mit einem erwarteten Beispielrückgabewert notiert:
blkid -o export -s UUID /dev/mapper/thathost_crypt_md3
UUID=JNbF5T-vhSD-3aVv-intG-1Tk2-IEOZ-ABWXYZ
Die Zeiten haben sich jedoch geändert und ich verwende nicht mehr Debian „wheezy“, sondern „jessie“. Ich sehe, dass ich bei dieser neueren Version von Debian jetzt einen anderen Rückgabewert für denselben Befehl habe:
blkid -o export -s UUID /dev/mapper/thishost_crypt_sdb
DEVNAME=/dev/mapper/thishost_crypt_sdb
UUID=bddac63e-3510-4d24-a6fb-4d0a89abcdef
Auf der Manpage für blkid steht anscheinend, dass -s UUID
nur Werte eingeschlossen werden sollten, die diesem Schlüssel entsprechen, aber da steht DEVNAME
auch dieser überflüssige Zusatz drin.
Ich habe einen Workaround, da ich dies in beiden Fällen schreiben kann, aber es scheint seltsam, dass sich die Ausgabestruktur geändert haben sollte:
echo "UUID=$(blkid -o value -s UUID /path/to/device)"
UUID=bddac63e-3510-4d24-a6fb-4d0a89abcdef
Die Paketversionen util-linux
sind 2.20.1-5.3 bzw. 2.25.2-6.
Fragen
- Warum ändert sich die UUID-Form und ist das wichtig?
- Warum die Änderung des Ausgabeformats?
Antwort1
DEVNAME ist der Alias des Gerätes siehePersistenter Gerätename mittels Alias
Darüber hinaus scheint es gemäß internationalen Standards jetzt erforderlich zu sein, UUIDs in Kleinbuchstaben zu schreiben.
AusVon UUID generierter Zeichentyp
Zur Klarstellung: Eine UUID ist eigentlich ein 128-Bit-Wert, kein Text oder Ziffern. Man kann sie sich als vorzeichenlose 128-Bit-Ganzzahlen vorstellen.
In der neuesten internationalen Spezifikation von 2008-08 heißt es (Hervorhebung von mir):
6.5.4 Software, die die hexadezimale Darstellung einer UUID generiert, darf keine Großbuchstaben verwenden. HINWEIS – Es wird empfohlen, die in allen menschenlesbaren Formaten verwendete hexadezimale Darstellung auf Kleinbuchstaben zu beschränken. Software, die diese Darstellung verarbeitet, muss jedoch sowohl Groß- als auch Kleinbuchstaben akzeptieren, wie in 6.5.2 angegeben.
Zum Drucken der UUID und des Alias/DEVNAME
Aus util-linux/blkid.c ist ersichtlich, dass DEVNAME ausgegeben wird, da Sie den-o export
} else if (ctl->output & OUTPUT_EXPORT_LIST) {
if (num == 1 && devname)
printf("DEVNAME=%s\n", devname);
Daher vermutete ich, dass ohne -o export
diese Option nur die UUID gedruckt würde, und zwar:
$blkid -s UUID /dev/sda2
/dev/sda2: UUID="67169dd7-f319-4402-a9b2-cebcf2f3657a"
$ blkid -o export -s UUID /dev/sda2
DEVNAME=/dev/sda2
UUID=67169dd7-f319-4402-a9b2-cebcf2f3657a