![]() |
Hotswap and udev persisten naming
Hi!
I just my first hotswapmachine (HP DL-320 G5p) with Debian Etch r03, and i have som problems with the kernelnames. I have two SATA-Hotswap disks, and their names are sda and sdb in the system. Now the problem. When i use the command "scsiadd -r 1 0 0 0" the system successfully disables the sdb disk. I can remove and reinsert de disk without any problems. But when i use the "sciadd -s" and "scsiadd -a 1 0 0 0" the kernelname is sdc. If i reboot the server everything is back to normal, but then the whole idea of a hotswapdisc is gone :-). So iīve started reading about the udev rules, and i have done so for the past 6 hours, but i canīt find anyway to write a rule that identifies the diskbay. Does anyone have a tip, or maybe solultion for me? Thanks in advance. /Rikard Here is what udevmonitor says during the process. udevmonitor prints the received event from the kernel [UEVENT] and the event which udev sends out after rule processing [UDEV] Comment: After scsiadd -r 1 0 0 0 UEVENT[1214101065.731485] remove@/class/scsi_generic/sg1 UEVENT[1214101065.731510] remove@/class/scsi_device/1:0:0:0 UEVENT[1214101065.732296] remove@/class/scsi_disk/1:0:0:0 UEVENT[1214101065.732307] remove@/block/sdb/sdb7 UEVENT[1214101065.732314] remove@/block/sdb/sdb6 UEVENT[1214101065.732320] remove@/block/sdb/sdb5 UEVENT[1214101065.732326] remove@/block/sdb/sdb2 UEVENT[1214101065.732333] remove@/block/sdb/sdb1 UEVENT[1214101065.732339] remove@/block/sdb UEVENT[1214101065.732345] remove@/devices/pci0000:00/0000:00:1f.2/host1/target1:0:0/1:0:0:0 UDEV [1214101065.732933] remove@/class/scsi_generic/sg1 UDEV [1214101065.733232] remove@/class/scsi_device/1:0:0:0 UDEV [1214101065.733654] remove@/class/scsi_disk/1:0:0:0 UDEV [1214101065.735209] remove@/block/sdb/sdb7 UDEV [1214101065.735714] remove@/block/sdb/sdb6 UDEV [1214101065.736224] remove@/block/sdb/sdb5 UDEV [1214101065.736701] remove@/block/sdb/sdb2 UDEV [1214101065.737193] remove@/block/sdb/sdb1 UDEV [1214101065.737642] remove@/devices/pci0000:00/0000:00:1f.2/host1/target1:0:0/1:0:0:0 UDEV [1214101065.738035] remove@/block/sdb Comment: After scsiadd -a 1 0 0 0 UEVENT[1214101203.673402] add@/devices/pci0000:00/0000:00:1f.2/host1/target1:0:0/1:0:0:0 UEVENT[1214101203.673430] add@/class/scsi_disk/1:0:0:0 UEVENT[1214101203.733862] add@/block/sdc UEVENT[1214101203.733873] add@/block/sdc/sdc1 UEVENT[1214101203.733881] add@/block/sdc/sdc2 UEVENT[1214101203.733888] add@/block/sdc/sdc5 UEVENT[1214101203.733895] add@/block/sdc/sdc6 UEVENT[1214101203.733903] add@/block/sdc/sdc7 UEVENT[1214101203.733994] add@/class/scsi_device/1:0:0:0 UEVENT[1214101203.734034] add@/class/scsi_generic/sg1 UDEV [1214101203.757793] add@/devices/pci0000:00/0000:00:1f.2/host1/target1:0:0/1:0:0:0 UDEV [1214101203.758932] add@/class/scsi_disk/1:0:0:0 UDEV [1214101203.761765] add@/class/scsi_device/1:0:0:0 UDEV [1214101203.762538] add@/class/scsi_generic/sg1 UDEV [1214101203.829821] add@/block/sdc UDEV [1214101203.844369] add@/block/sdc/sdc1 UDEV [1214101203.845374] add@/block/sdc/sdc2 UDEV [1214101203.868438] add@/block/sdc/sdc5 UDEV [1214101203.886044] add@/block/sdc/sdc7 UDEV [1214101203.899746] add@/block/sdc/sdc6 |
You can use "udevinfo" to select what would be the best way identify the devices.
I think it would be better to use uuid #'s for rules on removable devices. Look at the /etc/rules.d/70-kpartx as an example. You definitely want to use LABEL= or UUID= in your /etc/fstab entries. You can also use lshal to discover how hal identifies your devices. |
Hi, thanks for the quick reply.
As i understood your advices above, they adds the drive-id to the kernelname "sdb". Itīs not the specific drive i wanīt to add as "sda" or "sdb", but any drive that is putted in to the specific drivebay. Below is a printout from my udevinfo on sdb. (udevinfo -q all -a -p /sys/block/sdb). But the only value that i can se being connected to the drivebay is the KERNELS=="1:0:0:0" value. Is it possible to write a rule with it? And if so, can you give me a tip on how to write it? Thanks in advance /Rikard Udevinfo starts with the device specified by the devpath and then walks up the chain of parent devices. It prints for every device found, all possible attributes in the udev rules key format. A rule to match, can be composed by the attributes of the device and the attributes from one single parent device. looking at device '/block/sdb': KERNEL=="sdb" SUBSYSTEM=="block" DRIVER=="" ATTR{stat}==" 1443 1281 54660 7984 665 1564 18280 160124 0 17960 168108" ATTR{size}=="488397168" ATTR{removable}=="0" ATTR{range}=="16" ATTR{dev}=="8:16" looking at parent device '/devices/pci0000:00/0000:00:1f.2/host1/target1:0:0/1 :0:0:0': KERNELS=="1:0:0:0" SUBSYSTEMS=="scsi" DRIVERS=="sd" ATTRS{ioerr_cnt}=="0x0" ATTRS{iodone_cnt}=="0x84a" ATTRS{iorequest_cnt}=="0x84a" ATTRS{iocounterbits}=="32" ATTRS{timeout}=="30" ATTRS{state}=="running" ATTRS{rev}=="HPG2" ATTRS{model}=="GB0250C8045 " ATTRS{vendor}=="ATA " ATTRS{scsi_level}=="6" ATTRS{type}=="0" ATTRS{queue_type}=="none" ATTRS{queue_depth}=="1" ATTRS{device_blocked}=="0" looking at parent device '/devices/pci0000:00/0000:00:1f.2/host1/target1:0:0': KERNELS=="target1:0:0" SUBSYSTEMS=="" DRIVERS=="" looking at parent device '/devices/pci0000:00/0000:00:1f.2/host1': KERNELS=="host1" SUBSYSTEMS=="" DRIVERS=="" looking at parent device '/devices/pci0000:00/0000:00:1f.2': KERNELS=="0000:00:1f.2" SUBSYSTEMS=="pci" DRIVERS=="ata_piix" ATTRS{broken_parity_status}=="0" ATTRS{enable}=="1" ATTRS{modalias}=="pci:v00008086d00002920sv0000103Csd000031FEbc01sc01i8f" ATTRS{local_cpus}=="ff" ATTRS{irq}=="90" ATTRS{class}=="0x01018f" ATTRS{subsystem_device}=="0x31fe" ATTRS{subsystem_vendor}=="0x103c" ATTRS{device}=="0x2920" ATTRS{vendor}=="0x8086" looking at parent device '/devices/pci0000:00': KERNELS=="pci0000:00" SUBSYSTEMS=="" DRIVERS=="" |
If you follow up the chain, some of the messages should have attributes that match the drive bay.
Perhaps if you insert a drive, and use udevinfo to identify the UUID of the filesystems on the partitions, you could create entries in /etc/fstab which reference the UUID or the LABELs instead of the device in the first field. This is what is done for external drives which may be assigned different device nodes depending on the order they are plugged in. Here is an example of such an fstab entry. This one is for the root partition on a fixed drive: Code:
UUID=45bd38f1-5b46-41fe-ad97-daef6e9ceab0 /boot ext3 defaults 1 2In your case you don't want a partition being /dev/sdb1 one time and /dev/sdc1 sometime else. In my example, you don't want /dev/sdb4 changing to /dev/sdb5 if another partition was resized and a new partition created. |
| All times are GMT -5. The time now is 08:22 AM. |