Friday 5 December 2008

написание правил udev

Чтобы нормально монтировать различные съёмные устройства очень полезна такая штука как udev,
она позволяет динамически формировать ноды в /dev/, опираясь на различные характеристики устройства.
Для создания нод необходимо написать правила, для моего съёмного винчестера я создал такое правило

KERNEL=="sd*", ATTRS{serial}=="2GE12YDI", ATTRS{manufacturer}=="Seagate", SYMLINK+="seagate"


В правило входят различные ключи:

KERNEL - имя ноды, автоматически назначаемое ядром,

ATTRS - различные атрибуты которые можно узнать командой

SYMLINK - имя ноды, которая будет создана.

udevinfo -a -p /sys/block/sdb

у меня вывод был примерно такой
# udevinfo -a -p /sys/block/sdc

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/sdc':
KERNEL=="sdc"
SUBSYSTEM=="block"
DRIVER==""
ATTR{capability}=="12"
ATTR{stat}==" 1002 29254 63332 21760 127604 3476920 28836216 62613612 0 599412 62635368"
ATTR{size}=="625142448"
ATTR{removable}=="0"
ATTR{range}=="16"

looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb6/6-2/6-2:1.0/host15/target15:0:0/15:0:0:0':
KERNELS=="15:0:0:0"
SUBSYSTEMS=="scsi"
DRIVERS=="sd"
ATTRS{modalias}=="scsi:t-0x00"
ATTRS{ioerr_cnt}=="0x0"
ATTRS{iodone_cnt}=="0x1f665"
ATTRS{iorequest_cnt}=="0x1f665"
ATTRS{iocounterbits}=="32"
ATTRS{timeout}=="30"
ATTRS{state}=="running"
ATTRS{rev}=="102C"
ATTRS{model}=="FreeAgent Go "
ATTRS{vendor}=="Seagate "
ATTRS{scsi_level}=="3"
ATTRS{type}=="0"
ATTRS{queue_type}=="none"
ATTRS{queue_depth}=="1"
ATTRS{device_blocked}=="0"
ATTRS{max_sectors}=="240"
...

из него можно получить атрибуты точно характеризующие устройство.
Правило нужно записать в файл с расширением rules(обязательно!) в /etc/udev/rules.d/
Если несколько правил создают ноды для одного устройства то будут созданы все ноды.
Более подробно про udev можно узнать здесь