[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