What is so special about UUIDs in Linux? I donât know! But a single, simple short tip about looking up UUIDs in Linux from 2007 is one of the most successful posts I ever wrote! And is still looked up by hundreds each day! So I decided: Feed the masses.
Here is everything you ever need to know about UUIDs on Linux. The list is feature complete. Of course. *cough*
Background
UUIDs are 16 byte wide identifiers described in RFC 4122 which are used in software development to uniquely identify information with no further context. An example UUID is:
13152fae-d25a-4d78-b318-74397eb08184
UUIDs are probably best known in Linux as identifier for block devices. The Windows world knows UUIDs in the form of Microsoftâs globally unique identifiers, GUID, which are used in Microsoftâs Component Object Model.
The UUIDs are generated in various variants: originally most of them were derived from the Computerâs MAC, later hash sums of names were used. And about the question, how many UUIDs there are and how big the chance is that you will generate a a number you already own, here are some numbers from Wikipediaâs UUID article:
After generating 1 billion UUIDs every second for the next 100 years, the probability of creating just one duplicate would be about 50%. The probability of one duplicate would be about 50% if every person on earth owns 600 million UUIDs.
Usage in fstab
As mentioned UUIDs are most often used in Linux to identify block devices. Imagine, you have a couple of hard disks attached via USBs, than there is no persistent, reliable naming of the devices: sometimes the first USB hard disk is named âsdaâ, sometimes it is named âsdbâ. So to uniquely address the right disk for example in your /etc/fstab, you have to add an entry like:
UUID=9043278a-1817-4ff5-8145-c79d8e24ea79 /boot ext3 defaults 0 2
Linux implementation and generation
In Linux UUIDs are generated in /drivers/char/random.c?id=refs/tags/v3.8, and you can generate new ones via proc:
$ cat /proc/sys/kernel/random/uuid
eaf3a162-d770-4ec9-a819-ec96d429ea9f
There is also the library libuuid which is used by uuidgen and especially by the ext2/3/4 tools E2fsprogs to generate UUIDs:
$ uuidgen
f81cc383-aa75-4714-aa8a-3ce39e8ad33c
How to get them, bash style
The most interesting part in UUIDs is most likely how to get the current UUIDs of the hard disks. As already mentioned years ago, there are two major ways to retrieve them: a simple ls call in a special directory, and the tool blkid.
So, first the ls call which has to be made in the directory /dev/disk/by-uuid. The directory contains links named after the UUIDs and pointing to the ârealâ block device files. Pretty handy if you are on a system where hardly anything is installed.
$ ls -l /dev/disk/by-uuid
lrwxrwxrwx 1 root root 10 11. Okt 18:02 53cdad3b-4b01-4a6c-a099-be1cdf1acf6d -> ../../sda2
The second call uses the tool blkid which is part of the util-linux package. It provides a real interface to actually query for certain devices and also supports searching for labels.
$ blkid /dev/sda1
/dev/sda1: LABEL="/" UUID="ee7cf0a0-1922-401b-a1ae-6ec9261484c0" SEC_TYPE="ext2" TYPE="ext3"
And there …read more
Source: FULL ARTICLE at Planet KDE