Früher war alles ganz einfach. Man baute eine Festplatte ein, startete den Rechner, sie war da und hatte ihren festen Devicepfad (/dev/sda1 oder /dev/hde3) und Einbindepunkt (/cdrom). Daran, das man sie im laufenden Betrieb einbinden oder entfernen wollte war nicht zu denken. Seitdem immer mehr Leute USB-Festplatten oder -Sticks benutzen und die Distributionen mehr und mehr auf udev setzn, umso überkommener ist es mit Device-Pfaden zu arbeiten, denn sie können sich sehr schnell ändern. Einige behelfen sich, indem sie ihre Festplatten oder USB-Sticks über udev feste Devices zuordnen, aber wirklich toll und einfach ist diese Lösung nicht. Hier bieten sich UUIDs an, da sie eine feste Zuordnung bieten auch wenn sie Device-Namen verschieben sollten, weil man USB-Stick und Festplatte gleichzeitig nutzt oder eine zweite Platte einsetzen möchte.
UUIDs sind schon da
Wer schonmal in seine /etc/fstab bei Ubuntu Edgy geschaut hat, wird feststellen das sie sich etwas verändert hat:
# /dev/sda4 -- converted during upgrade to edgy UUID=7b848512-94bc-4e1e-ba2c-a74e664713bf / ext3 defaults 0 1
Der Device-Pfad wurde durch die UUID ersetzt und auch der Boot-Loader grub wurde entsprechend angepasst:
# kopt=root=UUID=7b848512-94bc-4e1e-ba2c-a74e664713bf ro
Dabei sind UUIDs keine Neuheit, sie gibt es mindestens seit 1999, daher verfügt quasi jedes in den letzten Jahren erzeugtes Linux-Filesystem über diese eindeutige Kennung und an sie rauzukommen ist sehr einfach:
tempel$ ls -lF /dev/disk/by-uuid total 0 lrwxrwxrwx 1 root root 10 Jan 18 19:01 0EDCF622DCF6042D -> sda2 lrwxrwxrwx 1 root root 10 Jan 18 18:01 2e2480a4-a8fe-420a-835a-7f7e238cd717 -> sda6 lrwxrwxrwx 1 root root 10 Jan 18 19:01 563041da-94c3-4b27-bfcc-4aab83b4b7c3 -> sda5 lrwxrwxrwx 1 root root 10 Jan 18 19:01 7490B9EC90B9B548 -> sda1 lrwxrwxrwx 1 root root 10 Jan 18 19:01 7b848512-94bc-4e1e-ba2c-a74e664713bf -> sda4
Alle Linux-Dateisysteme unterstützen UUIDs, wobei die für Wanderer zwischen den Welten wichtigen VFAT und NTFS Dateisysteme sie eigentlich nicht unterstützen. Kein Grund zur Panik, denn die obigen sda1 und sda2 sind NTFS-Partitionen, Linux ist da also nicht so engstirnig. Bei VFAT kann es schon passieren, das keine ID angezeigt wird, dann hilft manchmal der Befehl blkid oder das neuformatieren unter Linux mit mkfs.msdos -F 32 /dev/foo. Ein fertiger Eintrag in die FSTAB sieht dann so aus:
UUID=45D8-AFA7 /media/seagate vfat utf8,umask=007,gid=550 0 1
Weitere Einsatzgebiete
Wie oben schon angesprochen gilt diese Vorgehensweise für alle Wechselmedien die ein Filesystem haben können, also USB-Sticks, CF- oder SD-Karten. Auch sind UUIDs eine gute Lösung wenn mehrere Zugriffs-Pfade zu einen Dateisystem bestehen, wie z.B. bei Software-Raid oder in einen Server mit redundanten SAN-Anschluss.
Referenzen: Sidux Manuals und Stable root device (AKA UUID)










18 Februar 2007 at 22:23
Kleiner Fipptehler: es ist blkid (und nicht blckid).
Sehr nett ist auch vol_id aus der udev-Suite, JFYI.
mfg,
-mika-
19 Februar 2007 at 09:48
$ ls -l /dev/disk/by-uuid
ls: /dev/disk/by-uuid: No such file or directory
Und nu?
19 Februar 2007 at 13:37
/dev/disk/by-uuid
-> den ordner gibt es bei mir auch nicht (debian sarge).
wenn ich laufwerke mit der uuid in der fstab eintrage, dann bekomme ich folgende fehler:
1. ich klicke auf mein laufwerkssysmbol, mounten klappt, aber der konqueror öffnet sich nicht mehr automatisch.
2. wenn ich das laufwerk unmounten will, bekomme ich ein “segmentation fault”
mfg,
kremin
19 Februar 2007 at 19:26
@mika: Danke, fixed.
@martin: Das geht auf Mac nicht ;)
@martin und kremen: Wenn ihr kein /dev/disk/by-uuid habt, ist wahrscheinlich kein udev im Einsatz, dann kann man mit blkid die UUIDs abfragen, bei ext2/3 notfalls mit
dumpe2fs /dev/foo | grep UUID
abzufrage. ALternativ kann man auch 2.6.18 aus den Sarge-Backports nehmen, der tut wunderbar.
20 Februar 2007 at 17:20
Ha, erwischt! Daß der SSH-Client unter MacOS läuft, wird aber wohl noch erlaubt sein! ;-)
20 Februar 2007 at 17:21
Unter CentOS 4.4 funktioniert es übrigens trotz udev nicht. Die einzige Kiste in Reichweite, bei der das klappt, ist ein SLES10.
20 Februar 2007 at 20:44
@martin: was genau klappt den nicht? Wenn ich bei CentOS 4.4 blkid eingebe, dann sehe ich die UUIDs.
23 Februar 2007 at 22:13
Der Logik von Kommentar Nr. 4 nach ist blkid das Mittel der Wahl auf Systemen ohne udev. :-)