Vaidas Jablonskis bio photo

Vaidas Jablonskis

Twitter Google+ Github

Persistent iSCSI LUN Device Name

I spent a bit of time figuring out how to get this achieved, so thought it is worth noting for the future reference. I will try to make this quick assuming you have knowledge about iSCSI software initiators in Linux.

Tested on CentOS 6.0 it may work on CentOS 5.0 and alternatives. Software used:

  • udev-147-2.29.el6.x86_64
  • iscsi-initiator-utils-6.2.0.872-10.el6.x86_64

Steps to make this work:

  • First add/create a file /etc/scsi_id.config (you may need to create a new file): options=--whitelisted --replace-whitespace
  • Connect your iSCSI target to the system (I assume you know how to do that)
  • Then you need to get an ID of the LUN (let's say it is /dev/sdc for now):
/sbin/scsi_id --whitelisted --replace-whitespace /dev/sdc
UNIQUE_UUID_OF_A_BLOCK_DEVICE
  • Next, create udev rules file /etc/udev/rules.d/20-persistent-iscsi.rules:
KERNEL=="sd[a-z]", SUBSYSTEM=="block", PROGRAM="/sbin/scsi_id --whitelisted --replace-whitespace /dev/$name", RESULT=="UNIQUE_UUID_OF_A_BLOCK_DEVICE", NAME="iscsi/persistent-lun"
KERNEL=="sd[a-z][0-9]*", SUBSYSTEM=="block", PROGRAM="/sbin/scsi_id --whitelisted --replace-whitespace /dev/$name", RESULT=="UNIQUE_UUID_OF_A_BLOCK_DEVICE", NAME="iscsi/persistent-lun%n"

You can replace NAME="to_whatever_you_want", I just like to use /dev/iscsi/ location for iSCSI LUNs attached to the system.

  • Reload udev rules: udevadm control --reload-rules
  • Log the iSCSI LUN out and back in again, udev will assign the new device name for the LUN you specified.

I will not go through the basics of writing udev rules, but basically NAME=desired_device_name sets the name of the device and %n is a kernel number i.e. /dev/sda1 would be %n==1.