■ OS Environment : Linux[RHEL, Centos]
■ Application: uuid
■ Implementation Steps :
This problem can be avoided through the use of UUIDs (universally unique identifiers) instead of traditional block device names (/dev/hda1, /dev/hda5, /dev/sdb) to uniquely identify harddisk or other storage media. This is because UUIDs are unique and never change even if you switch the harddisk ordering. Follow these steps to use existing UUIDs to identify storage devices.
1. List the UUIDs of block devices :
Use the blkid command-line utility to locate/print block device attributes:
/dev/sda3: LABEL="SWAP-sdb3" TYPE="swap"
/dev/sda2: LABEL="/" UUID="f52529cb-a959-4a11-8d43-0e4fd8fdecd2" TYPE="ext3"
/dev/sda1: LABEL="/boot" UUID="15721694-cc09-4b79-baf0-e56f128676c3" TYPE="ext3"
Another method which works universally on systems is:
$ ls -al /dev/disk/by-uuid
lrwxrwxrwx 1 root root 10 Sep 29 13:35 15721694-cc09-4b79-baf0-e56f128676c3 -> ../../sda1
lrwxrwxrwx 1 root root 10 Sep 29 13:35 f52529cb-a959-4a11-8d43-0e4fd8fdecd2 -> ../../sda2
2. Use UUID in the grub.conf file:
The system identifies the root partition on the kernel line in grub.conf. RHEL 5 uses disk labels or device names by default:
(This is an example)
title Red Hat Enterprise Linux Server (2.6.18-128.el5PAE)
kernel /vmlinuz-2.6.18-128.el5PAE ro root=LABEL=/
kernel /vmlinuz-2.6.18-128.el5PAE ro root=/dev/sda2
If the LABEL or block device name of the root drive changes, it will throw a kernel panic. We can use the UUID of root partition in grub.conf to avoid this problem:
kernel /vmlinuz-2.6.18-128.el5PAE ro root=UUID=f52529cb-a959-4a11-8d43-0e4fd8fdecd2
3. Use UUID in the /etc/fstab file:
A typical /etc/fstab entry would look something like this:
/dev/sda2 / ext3 defaults 1 1
LABEL=/ / ext3 defaults 1 1
Under the new system, the same entry would look something like this:
UUID=f52529cb-a959-4a11-8d43-0e4fd8fdecd2 / ext3 defaults 1 1
The only difference is the first entry in the table. Instead of /dev/sda1 or LABEL, the UUID f52529cb-a959-4a11-8d43-0e4fd8fdecd2 now designates the drive. Because of this, it wouldn't matter if the drive were moved and became /dev/sdb1; the root drive would still mount and function as expected.