LINUX.ORG.RU
ФорумAdmin

udev и правила образование «add», «remove»


0

1

1. По каким, мать его так, правилам определяется правило образования события - «add», «remove», «change». По «change» на первый взгляд все ясно - возникает на любое изменение состояния связи внешнего и внутреннего. По «add» и «remove» совсем не ясно. Никто толком внятно не может объяснить какие условия ОТВЕЧАЮТ за возникновение этих СОБЫТИЙ. В чем отличие между change и add, если ВНИМАНИЕ = udev отрабатывает любое событие как «change» по дефолту.

Для примера возьмем обычный резак. Открываем его возникает события, которое ядро обрабатывает и перекидывает данные о этом udev. тот выдает на гора реакцию по дефолту - «change». И получаем вот такую петрушку.

KERNEL[180028.385124] change   /devices/pci0000:00/0000:00:09.0/0000:04:00.0/ata7/host6/target6:0:0/6:0:0:0/block/sr0 (block)
UDEV  [180031.447472] change   /devices/pci0000:00/0000:00:09.0/0000:04:00.0/ata7/host6/target6:0:0/6:0:0:0/block/sr0 (block)
KERNEL[180031.450127] change   /devices/pci0000:00/0000:00:09.0/0000:04:00.0/ata7/host6/target6:0:0/6:0:0:0/block/sr0 (block)
UDEV  [180031.468020] change   /devices/pci0000:00/0000:00:09.0/0000:04:00.0/ata7/host6/target6:0:0/6:0:0:0/block/sr0 (block)
KERNEL[180086.753244] change   /devices/pci0000:00/0000:00:09.0/0000:04:00.0/ata7/host6/target6:0:0/6:0:0:0/block/sr0 (block)
UDEV  [180087.762867] change  

Где тут вставка диска, где тут удаление диска с дисковода = все одно «change».

2. Правила для автомонтирования не отрабатывают. Косвенная а может и главная причина кроется в ответе на первый вопрос.

..10-automount.rules Код:

SUBSYSTEM=="block", KERNEL=="sr0", ACTION=="add", RUN+="/bin/mount /dev/sr0 /mnt/cdrom"

при таком подходе не отрабатывает ничего, т.к. событие не соответствует. если изменить событие на «change» то шаблон соответствует и команда отрабатывает. При этом ясно дело, что нет при таком раскладе нет возможности определить когда устройство пустое и нужно провести размонтирование.

Код:

KERNEL[181492.981699] change   /devices/pci0000:00/0000:00:09.0/0000:04:00.0/ata7/host6/target6:0:0/6:0:0:0/block/sr0 (block)
ACTION=change
DEVNAME=/dev/sr0
DEVPATH=/devices/pci0000:00/0000:00:09.0/0000:04:00.0/ata7/host6/target6:0:0/6:0:0:0/block/sr0
DEVTYPE=disk
DISK_MEDIA_CHANGE=1
MAJOR=11
MINOR=0
SEQNUM=3948
SUBSYSTEM=block
UDEV_LOG=7

UDEV  [181492.999714] change   /devices/pci0000:00/0000:00:09.0/0000:04:00.0/ata7/host6/target6:0:0/6:0:0:0/block/sr0 (block)
ACTION=change
DEVLINKS=/dev/cdr /dev/cdr0 /dev/cdrom /dev/cdrom0 /dev/cdrw /dev/cdrw0 /dev/cdwriter /dev/cdwriter0 /dev/disk/by-id/ata-HL-DT-STDVD-RAM_GH22NP20 /dev/dvd /dev/dvd0 /dev/dvdr /dev/dvdr0 /dev/dvdrw /dev/dvdrw0 /dev/dvdwriter /dev/dvdwriter0
DEVNAME=/dev/sr0
DEVPATH=/devices/pci0000:00/0000:00:09.0/0000:04:00.0/ata7/host6/target6:0:0/6:0:0:0/block/sr0
DEVTYPE=disk
DISK_MEDIA_CHANGE=1
ID_ATA=1
ID_BUS=ata
ID_CDROM=1
ID_CDROM_CD=1
ID_CDROM_CD_R=1
ID_CDROM_CD_RW=1
ID_CDROM_DVD=1
ID_CDROM_DVD_PLUS_R=1
ID_CDROM_DVD_PLUS_RW=1
ID_CDROM_DVD_PLUS_R_DL=1
ID_CDROM_DVD_R=1
ID_CDROM_DVD_RAM=1
ID_CDROM_DVD_RW=1
ID_CDROM_MRW=1
ID_CDROM_MRW_W=1
ID_MODEL=HL-DT-STDVD-RAM_GH22NP20
ID_MODEL_ENC=HL-DT-STDVD-RAM\x20GH22NP20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
ID_REVISION=1.02
ID_SERIAL=HL-DT-STDVD-RAM_GH22NP20
ID_TYPE=cd
MAJOR=11
MINOR=0
SEQNUM=3948
SUBSYSTEM=block
UDEV_LOG=3
UDISKS_PRESENTATION_NOPOLICY=0
USEC_INITIALIZED=7190867

KERNEL[181507.552915] change   /devices/pci0000:00/0000:00:09.0/0000:04:00.0/ata7/host6/target6:0:0/6:0:0:0/block/sr0 (block)
ACTION=change
DEVNAME=/dev/sr0
DEVPATH=/devices/pci0000:00/0000:00:09.0/0000:04:00.0/ata7/host6/target6:0:0/6:0:0:0/block/sr0
DEVTYPE=disk
DISK_MEDIA_CHANGE=1
MAJOR=11
MINOR=0
SEQNUM=3949
SUBSYSTEM=block
UDEV_LOG=7

UDEV  [181508.740199] change   /devices/pci0000:00/0000:00:09.0/0000:04:00.0/ata7/host6/target6:0:0/6:0:0:0/block/sr0 (block)
ACTION=change
DEVLINKS=/dev/cdr /dev/cdr0 /dev/cdrom /dev/cdrom0 /dev/cdrw /dev/cdrw0 /dev/cdwriter /dev/cdwriter0 /dev/disk/by-id/ata-HL-DT-STDVD-RAM_GH22NP20 /dev/disk/by-label/SlackDVD /dev/dvd /dev/dvd0 /dev/dvdr /dev/dvdr0 /dev/dvdrw /dev/dvdrw0 /dev/dvdwriter /dev/dvdwriter0
DEVNAME=/dev/sr0
DEVPATH=/devices/pci0000:00/0000:00:09.0/0000:04:00.0/ata7/host6/target6:0:0/6:0:0:0/block/sr0
DEVTYPE=disk
DISK_MEDIA_CHANGE=1
ID_ATA=1
ID_BUS=ata
ID_CDROM=1
ID_CDROM_CD=1
ID_CDROM_CD_R=1
ID_CDROM_CD_RW=1
ID_CDROM_DVD=1
ID_CDROM_DVD_PLUS_R=1
ID_CDROM_DVD_PLUS_RW=1
ID_CDROM_DVD_PLUS_R_DL=1
ID_CDROM_DVD_R=1
ID_CDROM_DVD_RAM=1
ID_CDROM_DVD_RW=1
ID_CDROM_MEDIA=1
ID_CDROM_MEDIA_DVD_RW=1
ID_CDROM_MEDIA_SESSION_COUNT=1
ID_CDROM_MEDIA_STATE=complete
ID_CDROM_MEDIA_TRACK_COUNT=1
ID_CDROM_MEDIA_TRACK_COUNT_DATA=1
ID_CDROM_MRW=1
ID_CDROM_MRW_W=1
ID_FS_LABEL=SlackDVD
ID_FS_LABEL_ENC=SlackDVD
ID_FS_TYPE=iso9660
ID_FS_USAGE=filesystem
ID_MODEL=HL-DT-STDVD-RAM_GH22NP20
ID_MODEL_ENC=HL-DT-STDVD-RAM\x20GH22NP20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
ID_PART_TABLE_TYPE=dos
ID_REVISION=1.02
ID_SERIAL=HL-DT-STDVD-RAM_GH22NP20
ID_TYPE=cd
MAJOR=11
MINOR=0
SEQNUM=3949
SUBSYSTEM=block
UDEV_LOG=3
UDISKS_PRESENTATION_NOPOLICY=0
USEC_INITIALIZED=7190867

выше три события - открытие резака, закрытие, успешное чтение диска на нем резаком. Однако гребаная модель событий одна и та же.

3. Как использовать в правилах вот ключи для учета проверки условия вхождения устройства

Код:

ID_CDROM_MEDIA=1
D_ATA=1
ID_BUS=ata
ID_CDROM=1
ID_CDROM_CD=1
ID_CDROM_CD_R=1
ID_CDROM_CD_RW=1
ID_CDROM_DVD=1
ID_CDROM_DVD_PLUS_R=1
ID_CDROM_DVD_PLUS_RW=1
ID_CDROM_DVD_PLUS_R_DL=1
ID_CDROM_DVD_R=1
ID_CDROM_DVD_RAM=1
ID_CDROM_DVD_RW=1
ID_CDROM_MEDIA=1
ID_CDROM_MEDIA_DVD_RW=1
ID_CDROM_MEDIA_SESSION_COUNT=1
ID_CDROM_MEDIA_STATE=complete

Спасибо.



Последнее исправление: annuunax (всего исправлений: 2)

ИМХО логично, вставил/вынул диск это change, add/remove - это если ты привод выдернул. По udev не подскажу, но есть обходной путь:

mount | grep ^/dev/sr0 && umount /dev/sr0 || mount /dev/sr0

И ещё, по-моему, при пропадании носителя оно само отмонтируется.

selivan ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.