19.5. Persistent Names for Mass Storage Devices

SUSE LINUX comes with scripts that allow you always to assign the same designations to hard disks and other storage devices, no matter in which order they are initialized. /sbin/udev.get_persistent_device_name.sh is a wrapper script. First it calls /sbin/udev.get_unique_hardware_path.sh, which finds the hardware path for a specified device. /sbin/udev.get_unique_drive_id.sh retrieves the serial number. Both outputs are then passed to udev, which creates the symbolic link to the device node under /dev. The wrapper can be used directly in the udev rules. Here is an example for SCSI, which can also be generalized to USB or IDE (write it as one line):

NAME="%k", SYMLINK="%c{1+}"

As soon as a driver for a mass storage device has been loaded, it registers all the available hard disks with the kernel. Each of them triggers a hotplug block event that calls udev. Then udev reads the rules to determine whether a symlink needs to be created.

If the driver is loaded via initrd, the hotplug events are lost. However, all the information is stored in sysfs. The udevstart utility finds all the device files under /sys/block and /sys/class and starts udev.

There is also a start script boot.udev, which recreates all the device nodes during the boot process. However, the start script must be activated through the YaST runlevel editor or with the command insserv boot.udev.


There are a number of tools and programs that rely on the fact that /dev/sda is a SCSI hard disk and /dev/hda is an IDE disk. If this is not the case, these programs do not work. YaST relies on these tools and therefore only works with the kernel device designations.

SUSE LINUX Administration Guide 9.3