Differences between revisions 10 and 11
Revision 10 as of 2010-10-22 18:14:30
Size: 13699
Comment: How attrib an UUID to the swap partition
Revision 11 as of 2010-10-22 18:21:13
Size: 14447
Comment: update-grub with /dev/disk/by-id
Deletions are marked like this. Additions are marked like this.
Line 227: Line 227:




Make a backup:
{{{
corp-bsa-exp-nuvem02:~# cp /boot/grub/menu.lst /boot/grub/menu.lst.old1
}}}


Use the /dev/disk/by-id and edit /boot/grub/menu.lst
{{{
## AFM 22oct2010
## kopt=root=/dev/sda3 ro
# kopt=root=/dev/disk/by-id/scsi-360026b9038e754001270c9de079bca7c-part3 ro rootdelay=15 nodmraid
}}}

Update menu.lst using the same script of kernel packages:
{{{
:~# update-grub
Searching for GRUB installation directory ... found: /boot/grub
Searching for default file ... found: /boot/grub/default
Testing for an existing GRUB menu.lst file ... found: /boot/grub/menu.lst
Searching for splash image ... none found, skipping ...
Found kernel: /vmlinuz-2.6.26-1-amd64
Updating /boot/grub/menu.lst ... done

:~#
}}}

Translation(s): English - Русский

(!) ?Discussion

Re Building fstab


To show a newly created partition (say sda6 or sdb7), that does not appear in fstab or want to be mounted, in a konsole as user ($), type the following command:

 ls -l /dev/disk/by-uuid

It will output like this (bold is for example purposes only):

lrwxrwxrwx 1 root root 10 2007-05-27 23:42 348ea9e6-7879-4332-8d7a-915507574a80 -> ../../sda4
lrwxrwxrwx 1 root root 10 2007-05-27 23:42 610aaaeb-a65e-4269-9714-b26a1388a106 -> ../../sda2
lrwxrwxrwx 1 root root 10 2007-05-27 23:42 857c5e63-c9be-4080-b4c2-72d606435051 -> ../../sda5
lrwxrwxrwx 1 root root 10 2007-05-27 23:42 a83b8ede-a9df-4df6-bfc7-02b8b7a5f1f2 -> ../../sda1
lrwxrwxrwx 1 root root 10 2007-05-27 23:42 ad662d33-6934-459c-a128-bdf0393e0f44 -> ../../sda6

In this example ad662d33-6934-459c-a128-bdf0393e0f44 is the missing entry. The next step is to enter the UUID partition to your etc/fstab. To add it to your fstab file use a text editor (like kate or kwrite) with root privileges:

# <device file system> <mount point>   <type>  <options>       <dump> <pass>
UUID=ad662d33-6934-459c-a128-bdf0393e0f44 /media/sda6 ext3      auto,users,exec 0 2

(!) Note: mountpoint names (in fstab) must be existing directories.

Overview: UUID, Partition Labelling and fstab


Persistent block device naming has been made possible by the introduction of udev and has some advantages over bus-based naming.

While Linux distributions and udev are evolving and hardware detection is becoming more reliable, there are also a number of new problems and changes:

  1. If you have more than one sata/scsi or ide disk controller and the order in which they are added is random, then this may result in device names like hdX and hdY switching around randomly on each boot. The same goes for sdX and sdY. Persistent naming allows you not to worry about this at all.
  2. With the introduction of the new libata pata support, all your ide hdX devices will become sdX devices at some point in the future. Again, with persistent naming, you won't even notice.
  3. Machines with both sata and ide controllers are quite common these days. With the libata changes mentioned above, the first problem will become even more common, as sata and ide hard drives will both have sdX names.
  4. Big machines, with many fast CPUs, and many Fiber Channel Host Bus Adapters, variable load / latency FC switches and Data Storages, SCSI controllers, high-performance network cards, may have asynchronous timing issues when dealing with udev and multipath, with almost unpredictable device detection order and automatically assignement names during boot.

There are more reasons, but these are the most critical ones now and in the near future. That's why Debian encourages you to change your setup to persistent naming schemes.

The four different schemes for persistent naming


Persistent Naming by UUID

UUID stands for Universally Unique Identifier and is a mechanism to give each filesystem (not partitions) a unique identifier. It is designed so that collisions are unlikely. All Linux filesystems (including swap, despite not assigned by default using debian-installer) support UUID. FAT and NTFS filesystems don't support UUID, but are still listed in by-uuid with a unique identifier:

$ /bin/ls -lF /dev/disk/by-uuid/

total 0
lrwxrwxrwx 1 root root 10 Oct 16 10:27 2d781b26-0285-421a-b9d0-d4a0d3b55680 -> ../../sda1
lrwxrwxrwx 1 root root 10 Oct 16 10:27 31f8eb0d-612b-4805-835e-0e6d8b8c5591 -> ../../sda7
lrwxrwxrwx 1 root root 10 Oct 16 10:27 3FC2-3DDB -> ../../sda6
lrwxrwxrwx 1 root root 10 Oct 16 10:27 5090093f-e023-4a93-b2b6-8a9568dd23dc -> ../../sda2
lrwxrwxrwx 1 root root 10 Oct 16 10:27 912c7844-5430-4eea-b55c-e23f8959a8ee -> ../../sda5
lrwxrwxrwx 1 root root 10 Oct 16 10:27 B0DC1977DC193954 -> ../../sdb1
lrwxrwxrwx 1 root root 10 Oct 16 10:27 bae98338-ec29-4beb-aacf-107e44599b2e -> ../../sdb2

As you can see, the fat and ntfs partitions have shorter names (sda6 and sdb1), but are still listed by uuid.

Unfortunately, at big machines, race conditions could happen and filesystem UUID could be assigned multiple times to different mapped devices. Then linux could pick one (ramdomly) it finds at the udev detection time. For example, it could detect the same UUID to /dev/sda1 and /dev/dm-1. So grub could pick /dev/dm-1 while /etc/fstab use /dev/sda1: will not finish boot by "device busy".

How discover the devices UUID

corp-bsa-exp-nuvem01:~# blkid
/dev/sda1: UUID="87f2b245-6ab3-4021-bf07-d069b4d387a1" TYPE="ext3" 
/dev/sda2: TYPE="swap" 
/dev/sda3: UUID="a6f7a63f-71ac-4361-b49a-39d62b06f18a" TYPE="ext3" 
corp-bsa-exp-nuvem01:~# 

As you can see, the swap partition does not have an UUID.

The Debian Lenny installer uses a partman version that does not attribut an UUID for swap partitions. Mkswap does it.

How attrib an UUID to the swap partition

Securely deactivate the current swap

corp-bsa-exp-nuvem01:~# swapoff /dev/sda2

Recreate the swap, get its UUID, reactivate swap, verify results:

corp-bsa-exp-nuvem01:~# mkswap /dev/sda2
Setting up swapspace version 1, size = 1998737 kB
no label, UUID=7cdfeb21-613b-4588-abb5-9d4049854e9a
corp-bsa-exp-nuvem01:~# blkid
/dev/sda1: UUID="87f2b245-6ab3-4021-bf07-d069b4d387a1" TYPE="ext3" 
/dev/sda2: TYPE="swap" UUID="7cdfeb21-613b-4588-abb5-9d4049854e9a" 
/dev/sda3: UUID="a6f7a63f-71ac-4361-b49a-39d62b06f18a" TYPE="ext3" 
corp-bsa-exp-nuvem01:~#  swapon /dev/sda2
corp-bsa-exp-nuvem01:~# free
             total       used       free     shared    buffers     cached
Mem:      33017956     298700   32719256          0      17060     148668
-/+ buffers/cache:     132972   32884984
Swap:      1951888          0    1951888
corp-bsa-exp-nuvem01:~# 

Persistent Naming by LABEL

Almost every filesystem type can have a label. All your partitions that have one are listed in the /dev/disk/by-label directory:

$ ls -lF /dev/disk/by-label

lrwxrwxrwx 1 root root 10 Oct 16 10:27 data -> ../../sdb2
lrwxrwxrwx 1 root root 10 Oct 16 10:27 data2 -> ../../sda2
lrwxrwxrwx 1 root root 10 Oct 16 10:27 fat -> ../../sda6
lrwxrwxrwx 1 root root 10 Oct 16 10:27 home -> ../../sda7
lrwxrwxrwx 1 root root 10 Oct 16 10:27 root -> ../../sda1
lrwxrwxrwx 1 root root 10 Oct 16 10:27 swap -> ../../sda5
lrwxrwxrwx 1 root root 10 Oct 16 10:27 windows -> ../../sdb1

While labels may have recognisable names, you need to exercise extreme caution to negate name collisions.

You can change the labels of your filesystems using these commands:

* swap: Create a new swapspace like this: mkswap -L <label> /dev/XXX
* ext2/ext3: e2label /dev/XXX <label>
* reiserfs: reiserfstune -l <label> /dev/XXX
* jfs: jfs_tune -L <label> /dev/XXX
* xfs: xfs_admin -L <label> /dev/XXX
* fat/vfat: There is no tool to change the label using Linux, 
but when you create the filesystem, use mkdosfs -n <label> <other options>. 
You may also change the label of an existing filesystem using Windows.
* ntfs: ntfslabel /dev/XXX <label> or change it using Windows.

Be careful: The labels have to be unique to make this work", it applies equally to USB/firewire sticks and to harddisks. The LABEL=/ UUID= syntax is preferred over /dev/disk/by-*/ for UN*X partitions

Persistent Naming by id

by-id creates a unique name depending on the hardware serial number. These are intended to be immutable to a given hardware configuration.

~#  ls -lh /dev/disk/by-id/
total 0
lrwxrwxrwx 1 root root 10 2010-10-20 13:52 dm-name-grupo1-lvstripe1 -> ../../dm-8
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 dm-name-mpath0 -> ../../dm-0
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 dm-name-mpath1 -> ../../dm-1
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 dm-name-mpath2 -> ../../dm-2
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 dm-name-mpath3 -> ../../dm-3
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 dm-name-mpath4 -> ../../dm-4
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 dm-name-mpath5 -> ../../dm-5
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 dm-name-mpath6 -> ../../dm-6
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 dm-name-mpath7 -> ../../dm-7
lrwxrwxrwx 1 root root 10 2010-10-20 13:52 dm-uuid-LVM-OaDwNcuwdzuuZYAcrbeKNdYsE237BKX2YIEdUN5CsSgeU7WNn5dhtiQPBP9uHU25 -> ../../dm-8
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 dm-uuid-mpath-36005076308ffc36c000000000000000c -> ../../dm-0
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 dm-uuid-mpath-36005076308ffc36c000000000000000d -> ../../dm-1
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 dm-uuid-mpath-36005076308ffc36c000000000000000e -> ../../dm-2
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 dm-uuid-mpath-36005076308ffc36c000000000000000f -> ../../dm-3
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 dm-uuid-mpath-36005076308ffc36c0000000000000112 -> ../../dm-4
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 dm-uuid-mpath-36005076308ffc36c0000000000000113 -> ../../dm-5
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 dm-uuid-mpath-36005076308ffc36c0000000000000114 -> ../../dm-6
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 dm-uuid-mpath-36005076308ffc36c0000000000000115 -> ../../dm-7
lrwxrwxrwx 1 root root  9 2010-10-20 13:51 scsi-360026b9038e49f001270c8b707980d5c -> ../../sda
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 scsi-360026b9038e49f001270c8b707980d5c-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 scsi-360026b9038e49f001270c8b707980d5c-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 scsi-360026b9038e49f001270c8b707980d5c-part3 -> ../../sda3
lrwxrwxrwx 1 root root  9 2010-10-20 13:51 scsi-36005076308ffc36c000000000000000c -> ../../sdr
lrwxrwxrwx 1 root root  9 2010-10-20 13:51 scsi-36005076308ffc36c000000000000000d -> ../../sdc
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 scsi-36005076308ffc36c000000000000000e -> ../../sdab
lrwxrwxrwx 1 root root  9 2010-10-20 13:51 scsi-36005076308ffc36c000000000000000f -> ../../sdu
lrwxrwxrwx 1 root root  9 2010-10-20 13:51 scsi-36005076308ffc36c0000000000000112 -> ../../sdn
lrwxrwxrwx 1 root root  9 2010-10-20 13:51 scsi-36005076308ffc36c0000000000000113 -> ../../sdo
lrwxrwxrwx 1 root root  9 2010-10-20 13:51 scsi-36005076308ffc36c0000000000000114 -> ../../sdp
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 scsi-36005076308ffc36c0000000000000115 -> ../../sdag
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 scsi-mpath0 -> ../../dm-0
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 scsi-mpath1 -> ../../dm-1
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 scsi-mpath2 -> ../../dm-2
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 scsi-mpath3 -> ../../dm-3
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 scsi-mpath4 -> ../../dm-4
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 scsi-mpath5 -> ../../dm-5
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 scsi-mpath6 -> ../../dm-6
lrwxrwxrwx 1 root root 10 2010-10-20 13:51 scsi-mpath7 -> ../../dm-7

Persistent Naming by path

by-path creates a unique name depending on the shortest physical path (according to sysfs). Both contain strings to indicate which subsystem they belong to and thus are not suitable for solving the problems mentioned in the beginning of this article. They won't be discussed any further here.

Enabling persistent naming


Having chosen which naming method you'd like to use, let's now enable persistent naming for your system:

In fstab

Enabling persistent naming in /etc/fstab is easy; just replace the device name in the first column by the new persistent name. In my example I would replace /dev/sda7 by one of the following:

/dev/disk/by-label/home or
/dev/disk/by-uuid/31f8eb0d-612b-4805-835e-0e6d8b8c5591

Do so for all the partitions in your fstab file.

Instead of giving the device explicitly, one may indicate the filesystem that is to be mounted by its UUID or volume label, writing LABEL=<label> or UUID=<uuid>, for example:

LABEL=Boot

or

UUID=3e6be9de-8139-11d1-9106-a43f08d823a6

Persistent Naming in the boot manager

To use persistent names in your boot manager, all of the following prerequisites have to be met:

  1. You are using a mkinitcpio initramfs image
  2. You have udev enabled in /etc/mkinitcpio.conf
  3. When your initramfs image was generated, version 101-3 or greater of klibc-udev was installed (persistent naming is broken in any earlier version). If you are updating klibc-udev from an earlier version and want to use persistent naming, regenerate your initramfs image before you reboot.

In the above example, /dev/sda1 is the root partition. In the grub menu.lst file, the kernel line looks like this:

kernel /boot/vmlinuz26 root=/dev/sda1 vga=0x318 ro

Depending on which naming scheme you prefer, change it to one of the following:

kernel /boot/vmlinuz26 root=/dev/disk/by-label/root vga=0x318 ro

or

kernel /boot/vmlinuz26 root=/dev/disk/by-uuid/2d781b26-0285-421a-b9d0-d4a0d3b55680 vga=0x318 ro

There is an alternative way to use the label embedded in the filesystem. For example if (as above) the filesystem in /dev/sda1 is labelled "root", you would give this line to grub:

kernel /boot/vmlinuz26 root=LABEL=root vga=0x318 ro

Make a backup:

corp-bsa-exp-nuvem02:~# cp /boot/grub/menu.lst /boot/grub/menu.lst.old1

Use the /dev/disk/by-id and edit /boot/grub/menu.lst

## AFM 22oct2010
## kopt=root=/dev/sda3 ro
# kopt=root=/dev/disk/by-id/scsi-360026b9038e754001270c9de079bca7c-part3 ro rootdelay=15 nodmraid

Update menu.lst using the same script of kernel packages:

:~# update-grub
Searching for GRUB installation directory ... found: /boot/grub
Searching for default file ... found: /boot/grub/default
Testing for an existing GRUB menu.lst file ... found: /boot/grub/menu.lst
Searching for splash image ... none found, skipping ...
Found kernel: /vmlinuz-2.6.26-1-amd64
Updating /boot/grub/menu.lst ... done

:~#