如何在连接sda时使用udev触发脚本,但不是sda1-x

时间:2012-06-19 15:07:50

标签: linux udev

在将USB驱动器连接到嵌入式系统时,我需要运行脚本。 我的想法是:

SUBSYSTEM=="block",ACTION=="add", KERNELS=="sd?",RUN+="/script param1 %k"

它需要与任何usb-stick一起运行,因此我无法使用特定于供应商的参数。现在脚本使用sd [a ..] [,1 ..]执行,但它只应在sd [a ..] 时执行  连接(_表示NULL)。 随着?它在断开连接时有效,但在连接时,它会为每个分区执行 有没有可能或者我是否应该在Shell-Script中解析它?

如果有人能在这里帮助我,那会很好。 (如果有人看到,我删除了问题:抱歉,我认为,?是最终的解决方案。但它也没有用。)

这是udevadm信息的输出--attribute-walk -name / dev / sda1

  looking at device '/devices/platform/fsl-ehci.1/usb1/1-1/1-1:1.0/host2/target2:0:0/2:0:0:0/block/sda/sda1':
    KERNEL=="sda1"
    SUBSYSTEM=="block"
    DRIVER==""
    ATTR{partition}=="1"
    ATTR{start}=="63"
    ATTR{size}=="1526112"
    ATTR{alignment_offset}=="0"
    ATTR{discard_alignment}=="4294935040"
    ATTR{stat}=="       0        0        0        0        0        0        0        0        0        0        0"
    ATTR{inflight}=="       0        0"

  looking at parent device '/devices/platform/fsl-ehci.1/usb1/1-1/1-1:1.0/host2/target2:0:0/2:0:0:0/block/sda':
    KERNELS=="sda"
    SUBSYSTEMS=="block"
    DRIVERS==""
    ATTRS{range}=="16"
    ATTRS{ext_range}=="256"
    ATTRS{removable}=="1"
    ATTRS{ro}=="0"
    ATTRS{size}=="15656960"
    ATTRS{alignment_offset}=="0"
    ATTRS{discard_alignment}=="0"
    ATTRS{capability}=="51"
    ATTRS{stat}=="       1        0        8        4        0        0        0        0        0        4        4"
    ATTRS{inflight}=="       0        0"

3 个答案:

答案 0 :(得分:0)

在使用/dev/sd??*调用脚本时退出该怎么办?

答案 1 :(得分:0)

SUBSYSTEM=="block", ACTION=="add", KERNELS=="sd*[!0-9]", RUN+="/script param1 %k"

sd*会匹配任何字符,但[!0-9]会排除分区号,因此您只能使用块设备。

至少在CentOS 6系统上/lib/udev/rules.d中有很多规则。规则文件60-persistent-storage.rules定义了如上所述的规则。

答案 2 :(得分:0)

简单地:

SUBSYSTEM=="block", ACTION=="add", KERNELS=="sd?",  DEVTYPE="disk", RUN+="/script param1 %k"