The various IDs of disks, filesystems, software RAID, LVM, et al in Linux
Once upon a time, you put simple /dev/sdX
names in your /etc/fstab
.
These days that's boring and deprecated, and so there are a large
number of different identifiers that you can use here. Since I just
confused myself on this today, I want to write down what I know and
looked up about the various levels and sorts of identifiers, and
where they come from. What I care about here are identifiers that
are tied to a specific piece of hardware or data, instead of where
that hardware is plugged into the system
(or the order in which it's recognized during boot, which can totally
jump around even when no hardware changes).
Some filesystems have labels, or at least can have labels, and years
ago it was common for Linux installs to set labels on your filesystems
and use them in /etc/fstab
via LABEL=...
. This has fallen out
of favour since then, for reasons I can only theorize about. ExtN
is one such filesystem, and labels can be inspected (and perhaps
set) with e2label
. Modern Linux distributions seem to no longer
set a label on the extN filesystems that they create during
installation. Just to confuse you, extN filesystems also keep track
of where they were last mounted (or are mounted), which is different
from the extN label, and some tools will present this as the 'name'
of the filesystem.
(e2label
is effectively obsolete today; you should use blkid
.)
Many filesystems have UUIDs, as
do swap areas, software RAID arrays, LVM objects, and a number of
other things. UUIDs are what is commonly used in /etc/fstab
these
days, and can be displayed with eg 'lsblk -fs
'. The blkid
command
is generally the master source of information about any particular
thing. Like labels, UUIDs are embedded in the on-disk metadata of
various things; for extN filesystems the filesystem UUID is in the
superblock, for example. Where software RAID stores its metadata
varies and can matter for some
things. Note that software RAID has both a UUID for the overall
array and a device UUID for each physical device in the array.
(As blkid
will report, GPT partitions themselves
have a partition label and a theoretically unique partition UUID. These can also be used in
/etc/fstab
, per the fstab
manpage, but you probably don't want
to. The GPT UUID is stored as part of the GPT partition table, not
embedded in the partition itself.)
Physical disks have serial numbers (and World Wide Names) that theoretically
uniquely identify them. Where they're accessible, Linux reads these
via SCSI, SAS, iSCSI, SATA, and so on inquiry commands, and uses
this information to populate /dev/disk/by-id
. In addition to
actual disks, generally anything that appears as a disk-like device
with a UUID (or a name) will also show up in /dev/disk/by-id
.
Thus you can find things like software RAID arrays (by name and
UUID), LVM physical volumes, and LVM logical volumes (by name and
ID).
(I believe that some USB disk enclosures don't pass through the necessary stuff for Linux to get the disk's serial number.)
Sometimes this can get confusing because the same object winds up
with multiple IDs at different levels. A software RAID array or a
LVM logical volume that contains an extN filesystem has both a UUID
for the filesystem and a UUID for the array or volume, and it may
not be clear which UUID you're actually using unless you look in
detail. Using blkid
is generally fairly clear, fortunately;
lsblk
's default output is not so much from what I've seen.
(If you're looking at an /etc/fstab
generated by an installer
or the like, they generally use the filesystem UUID.)
|
|