How do I find the UUID of a filesystem

I'm running Ubuntu, and want to find out the UUID of a particular filesystem (not partition). I know I can use e2label /dev/sda1 to find out the filesystem label, but there doesn't seem to be a similar way to find the UUID.


Another command that might be available and also works quite well for this is 'blkid'. It's part of the e2fsprogs package. Examples of it's usage:

Look up data on /dev/sda1:

topher@crucible:~$ sudo blkid /dev/sda1
/dev/sda1: UUID="727cac18-044b-4504-87f1-a5aefa774bda" TYPE="ext3"

Show UUID data for all partitions:

topher@crucible:~$ sudo blkid
/dev/sda1: UUID="727cac18-044b-4504-87f1-a5aefa774bda" TYPE="ext3"
/dev/sdb: UUID="467c4aa9-963d-4467-8cd0-d58caaacaff4" TYPE="ext3"

Show UUID data for all partitions in easier to read format: (Note: in newer releases, blkid -L has a different meaning, and blkid -o list should be used instead)

topher@crucible:~$ sudo blkid -L
device     fs_type label    mount point    UUID
-------------------------------------------------------------------------------
/dev/sda1 ext3             /              727cac18-044b-4504-87f1-a5aefa774bda
/dev/sdc  ext3             /home          467c4aa9-963d-4467-8cd0-d58caaacaff4

Show just the UUID for /dev/sda1 and nothing else:

topher@crucible:~$ sudo blkid -s UUID -o value /dev/sda1
727cac18-044b-4504-87f1-a5aefa774bda

For GPT Partitioned Disks Only

On a GPT formatted disk each partition is assigned a GUID, which is a form of UUID, though probably not what the original poster was referring to. Therefore this answer is probably less helpful to the original questioner. Nevertheless I believe there's an important distinction to be noticed.

To get the GUID of partition 1 on GPT formatted disk /dev/sda, as well as its partition label and so on:

sudo sgdisk -i 1 /dev/sda

or all with:

ls -l /dev/disk/by-partuuid

To boot with the root of the file system being on a certain partition you would use the linux kernel parameter syntax of:

root=PARTUUID=87654321-4321-4321-abcd-123456789012

In this case you can specify just the beginning of the UUID--enough to be unique. This parameter is more primitive and can be understood by the kernel earlier in its boot process.


There's a difference in semantics between these:

A disk holds partitions, a partition holds a file system, a file system holds directories and files. For some set-ups and operating systems there are more layers.

The GUID UUID and associated label refer to a partition, but not the partition's contents. A new partition on the same disk, or a partition on a new disk will have a new GUID UUID. The same partition could hold one file system one day and another on a different day. It only exists for GPT formatted disks, but not for legacy partitioned disks. There's usually no more utility here than specifying root=/dev/sda1 or root=8:1.

The other current answers refer to the UUID of a file system in some containing partition. If the file system is copied, as a whole, to another partition or hard disk that value remains the same. This UUID is useful in finding a moved file system. Therefore this is probably more pertinent to most people. Linux kernel parameter root=UUID=87654321-4321-4321-a567-123456789012 refers to this.

I believe root=LABEL= and root=UUID= are implemented by early userspace, the init code I saw the other day on my system translated these parameters to /dev/disk/by-uuid and /dev/disk/by-label (links I believe are created by udev in userspace on my system).

[1] http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/init/do_mounts.c#n183


The script-clean way to do this which works on any type of filesystem is:

lsblk -no UUID <device-containing-FS>

Or, given the mountpoint (or any file within it):

lsblk -no UUID $(df -P <file> | awk 'END{print $1}')

The output is the UUID, the whole UUID, and nothing but the UUID.