[arch] Help with udev rules creation for IDE disks

Rafal Szczepaniak infopolia at adres.pl
Sat Sep 30 06:10:59 EDT 2006


bardo <ilbardo at gmail.com>:
>2006/9/28, Mister Dobalina <reebydobalina at yahoo.ca>:
>> http://www.reactivated.net/writing_udev_rules.html
>
>Thanks, very interesting. I solved the fstab problem with the LABEL
>trick. but this reading was illuminating.
>
>> for tips on writing your own udev rules. You can use
>> the info returned by
>>
>> udevinfo -a -p /sys/block/XXX
>>
>> to write rules to force udev to call your root disk
>> /dev/hdc (or whatever you want...)
>
>Tried, I can't make it work. These two are the ones I use:
>SUBSYSTEM=="block", ATTR{size}=="160086528", NAME="hda"
>SUBSYSTEM=="block", ATTR{size}=="361882080", NAME="hdb"
>
>They are of no use, and the cdrom gets recognized as hda...

I think using "size" isn't a good idea. It would be more readable at least 
if you use parent device attributes.
For example for my cdrom udevinfo gives this:

  looking at device '/block/sr0':
    KERNEL=="sr0"
    SUBSYSTEM=="block"
    DRIVER==""
    ATTR{stat}=="       0        0        0        0        0        0        0        0        0        0        0"
    ATTR{size}=="2097151"
    ATTR{removable}=="1"
    ATTR{range}=="1"
    ATTR{dev}=="11:0"

  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=="sr"
    ATTRS{ioerr_cnt}=="0x0"
    ATTRS{iodone_cnt}=="0x7"
    ATTRS{iorequest_cnt}=="0x26"
    ATTRS{iocounterbits}=="32"
    ATTRS{timeout}=="0"
    ATTRS{state}=="running"
    ATTRS{rev}=="TO38"
    ATTRS{model}=="CDW/DVD TS-L462A"
    ATTRS{vendor}=="TSSTcorp"
    ATTRS{scsi_level}=="6"
    ATTRS{type}=="5"
    ATTRS{queue_type}=="none"
    ATTRS{queue_depth}=="1"
    ATTRS{device_blocked}=="0"

and for my laptop disk:

  looking at device '/block/sda':
    KERNEL=="sda"
    SUBSYSTEM=="block"
    DRIVER==""
    ATTR{stat}=="    8892      464   246167   334260     6295     9111   123192  1504228        0   232452  1838488"
    ATTR{size}=="78140160"
    ATTR{removable}=="0"
    ATTR{range}=="16"
    ATTR{dev}=="8:0"

  looking at parent device '/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0':
    KERNELS=="0:0:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS=="sd"
    ATTRS{ioerr_cnt}=="0x0"
    ATTRS{iodone_cnt}=="0x3b60"
    ATTRS{iorequest_cnt}=="0x3b60"
    ATTRS{iocounterbits}=="32"
    ATTRS{timeout}=="30"
    ATTRS{state}=="running"
    ATTRS{rev}=="MA2O"
    ATTRS{model}=="HTS424040M9AT00 "
    ATTRS{vendor}=="ATA     "
    ATTRS{scsi_level}=="6"
    ATTRS{type}=="0"
    ATTRS{queue_type}=="none"
    ATTRS{queue_depth}=="1"
    ATTRS{device_blocked}=="0"



So for example I think I could use something like this:

SUBSYSTEMS=="scsi", ATTRS{model}=="CDW/DVD TS-L462A", ATTRS{vendor}=="TSSTcorp", NAME:="hdb", SYMLINK+="toshiba_cdrw"

SUBSYSTEMS=="scsi", ATTRS{rev}=="MA2O", ATTRS{model}=="HTS424040M9AT00 ", NAME:="hda", SYMLINK+="toshiba_hd"


Also it's important where you put your rules. If yu use "=" to change dev name 
you should create a file for your custom rules which will be processed as the last 
one - for example x10.special.udev.rules. 

If you use ":=" it should work from any file (because standard udev rules
use only "=" but it's safer to create a file named like 00.special.udev rules which
will be processed by udev as the first one. 

":=" means that no other rule processed after your custom rule can overwrite your 
values (becasue udev first aggregates all rules for a given device and some values 
- in your case NAME - can be changed). Using ":=" prevents changing the value only 
for this field and udev will still process other rules for this device generating for 
example some standard symlinks. 

If you want to stop processing rules after your custom rule (which forces the use 
of 00....udev.rules naming) you can add OPTIONS="last_rule" to your custom rule.
This means only your custom rules will be processed (no standard symlinks etc.)

For the begining I would recommend creating 00.special.udev.rules file and 
use ":=" syntax.

I hope it'll work for you. 

-- 
Rafal Szczepaniak (lanrat)



More information about the arch mailing list