A regra do Udev é correspondida duas vezes com um smartphone no modo de armazenamento

3

Eu tenho um problema com uma regra do udev, que é sempre correspondida duas vezes quando conecto meu dispositivo. Eu não perguntaria aqui se não estava muito certo de que eu inventei uma regra absolutamente correta. Eu acho que o problema não está na regra em si, mas enfim, aqui está minha regra:

ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4e21", ENV{ID_FS_TYPE}=="vfat", OWNER="...me...", SYMLINK+=".../nexus", RUN+="/home/.../myscript"

É um nexus s do google, que deve ser copiado pelo rsync assim que eu conectá-lo. Isso é feito assim: o telefone é conectado e pergunta se ele deve voltar para o modo de armazenamento, o que eu aceito. Agora o primeiro problema foi que eu não posso usar algo como ACTION="add", uma vez que o dispositivo é adicionado pelo udev, enquanto ele ainda não fornece o sistema de arquivos. Eu tenho que transformá-lo no modo de armazenamento, o udev aciona novos eventos reconhecendo mais informações sobre o sistema de arquivos (por exemplo, beef vfat). Portanto, para não corresponder à minha regra muito cedo, usei a variável de ambiente do tipo fs. O nó de dispositivo final para o sistema de arquivos do telefone é (neste caso) "/ dev / sdg" (sem um número!)

Agora, a regra é correspondida sempre duas vezes e, quando eu monitoro a atividade do udev, ela diz:

KERNEL[33252.434094] add      /devices/pci0000:00/0000:00:16.2/usb3/3-2 (usb)
KERNEL[33252.434722] add      /devices/pci0000:00/0000:00:16.2/usb3/3-2/3-2:1.0 (usb)
KERNEL[33252.435005] add      /devices/pci0000:00/0000:00:16.2/usb3/3-2/3-2:1.0/host18 (scsi)
KERNEL[33252.435139] add      /devices/pci0000:00/0000:00:16.2/usb3/3-2/3-2:1.0/host18/scsi_host/host18 (scsi_host)
UDEV  [33252.448355] add      /devices/pci0000:00/0000:00:16.2/usb3/3-2 (usb)
UDEV  [33252.450621] add      /devices/pci0000:00/0000:00:16.2/usb3/3-2/3-2:1.0 (usb)
UDEV  [33252.452331] add      /devices/pci0000:00/0000:00:16.2/usb3/3-2/3-2:1.0/host18 (scsi)
UDEV  [33252.453618] add      /devices/pci0000:00/0000:00:16.2/usb3/3-2/3-2:1.0/host18/scsi_host/host18 (scsi_host)
KERNEL[33253.434071] add      /devices/pci0000:00/0000:00:16.2/usb3/3-2/3-2:1.0/host18/target18:0:0 (scsi)
KERNEL[33253.434133] add      /devices/pci0000:00/0000:00:16.2/usb3/3-2/3-2:1.0/host18/target18:0:0/18:0:0:0 (scsi)
KERNEL[33253.434289] add      /devices/pci0000:00/0000:00:16.2/usb3/3-2/3-2:1.0/host18/target18:0:0/18:0:0:0/scsi_disk/18:0:0:0 (scsi_disk)
KERNEL[33253.434353] add      /devices/pci0000:00/0000:00:16.2/usb3/3-2/3-2:1.0/host18/target18:0:0/18:0:0:0/scsi_device/18:0:0:0 (scsi_device)
KERNEL[33253.434396] add      /devices/pci0000:00/0000:00:16.2/usb3/3-2/3-2:1.0/host18/target18:0:0/18:0:0:0/scsi_generic/sg7 (scsi_generic)
KERNEL[33253.434528] add      /devices/pci0000:00/0000:00:16.2/usb3/3-2/3-2:1.0/host18/target18:0:0/18:0:0:0/bsg/18:0:0:0 (bsg)
UDEV  [33253.435261] add      /devices/pci0000:00/0000:00:16.2/usb3/3-2/3-2:1.0/host18/target18:0:0 (scsi)
KERNEL[33253.436359] add      /devices/virtual/bdi/8:96 (bdi)
UDEV  [33253.436418] add      /devices/pci0000:00/0000:00:16.2/usb3/3-2/3-2:1.0/host18/target18:0:0/18:0:0:0 (scsi)
KERNEL[33253.437187] add      /devices/pci0000:00/0000:00:16.2/usb3/3-2/3-2:1.0/host18/target18:0:0/18:0:0:0/block/sdg (block)
UDEV  [33253.437724] add      /devices/virtual/bdi/8:96 (bdi)
UDEV  [33253.438335] add      /devices/pci0000:00/0000:00:16.2/usb3/3-2/3-2:1.0/host18/target18:0:0/18:0:0:0/scsi_disk/18:0:0:0 (scsi_disk)
KERNEL[33253.438867] change   /devices/pci0000:00/0000:00:16.2/usb3/3-2/3-2:1.0/host18/target18:0:0/18:0:0:0/block/sdg (block)
UDEV  [33253.439476] add      /devices/pci0000:00/0000:00:16.2/usb3/3-2/3-2:1.0/host18/target18:0:0/18:0:0:0/scsi_device/18:0:0:0 (scsi_device)
UDEV  [33253.440782] add      /devices/pci0000:00/0000:00:16.2/usb3/3-2/3-2:1.0/host18/target18:0:0/18:0:0:0/scsi_generic/sg7 (scsi_generic)
UDEV  [33253.441059] add      /devices/pci0000:00/0000:00:16.2/usb3/3-2/3-2:1.0/host18/target18:0:0/18:0:0:0/bsg/18:0:0:0 (bsg)
KERNEL[33253.446210] change   /devices/pci0000:00/0000:00:16.2/usb3/3-2/3-2:1.0/host18/target18:0:0/18:0:0:0/block/sdg (block)
UDEV  [33253.465723] add      /devices/pci0000:00/0000:00:16.2/usb3/3-2/3-2:1.0/host18/target18:0:0/18:0:0:0/block/sdg (block)
UDEV  [33253.489562] change   /devices/pci0000:00/0000:00:16.2/usb3/3-2/3-2:1.0/host18/target18:0:0/18:0:0:0/block/sdg (block)
UDEV  [33253.499913] change   /devices/pci0000:00/0000:00:16.2/usb3/3-2/3-2:1.0/host18/target18:0:0/18:0:0:0/block/sdg (block)

e depois de ativar o modo de armazenamento:

KERNEL[33311.201180] change   /devices/pci0000:00/0000:00:16.2/usb3/3-2/3-2:1.0/host18/target18:0:0/18:0:0:0/block/sdg (block)
KERNEL[33311.231579] change   /devices/pci0000:00/0000:00:16.2/usb3/3-2/3-2:1.0/host18/target18:0:0/18:0:0:0/block/sdg (block)
UDEV  [33315.817190] change   /devices/pci0000:00/0000:00:16.2/usb3/3-2/3-2:1.0/host18/target18:0:0/18:0:0:0/block/sdg (block)
UDEV  [33315.885089] change   /devices/pci0000:00/0000:00:16.2/usb3/3-2/3-2:1.0/host18/target18:0:0/18:0:0:0/block/sdg (block)

Sem realmente saber o que acontece nas duas últimas linhas, a semelhança deles me faz pensar que pode ser um problema no udev repetir alguns eventos ... aqui está a saída do udevadm info -q all -n / dev / ...:

P: /devices/pci0000:00/0000:00:16.2/usb3/3-2/3-2:1.0/host18/target18:0:0/18:0:0:0/block/sdg
N: sdg
S: christian/nexus
S: disk/by-id/usb-Google_File-CD_Gadget_30309C8C04B300EC-0:0
S: disk/by-label/NEXUS_S
S: disk/by-path/pci-0000:00:16.2-usb-0:2:1.0-scsi-0:0:0:0
S: disk/by-uuid/829D-18DB
E: DEVLINKS=/dev/.../nexus /dev/disk/by-id/usb-Google_File-CD_Gadget_30309C8C04B300EC-0:0 /dev/disk/by-label/NEXUS_S /dev/disk/by-path/pci-0000:00:16.2-usb-0:2:1.0-scsi-0:0:0:0 /dev/disk/by-uuid/829D-18DB
E: DEVNAME=/dev/sdg
E: DEVPATH=/devices/pci0000:00/0000:00:16.2/usb3/3-2/3-2:1.0/host18/target18:0:0/18:0:0:0/block/sdg
E: DEVTYPE=disk
E: ID_BUS=usb
E: ID_FS_LABEL=NEXUS_S
E: ID_FS_LABEL_ENC=NEXUS_S
E: ID_FS_TYPE=vfat
E: ID_FS_USAGE=filesystem
E: ID_FS_UUID=829D-18DB
E: ID_FS_UUID_ENC=829D-18DB
E: ID_FS_VERSION=FAT32
E: ID_INSTANCE=0:0
E: ID_MEDIA_PLAYER=google_nexus-s
E: ID_MODEL=File-CD_Gadget
E: ID_MODEL_ENC=File-CD\x20Gadget\x20\x20
E: ID_MODEL_ID=4e21
E: ID_PATH=pci-0000:00:16.2-usb-0:2:1.0-scsi-0:0:0:0
E: ID_PATH_TAG=pci-0000_00_16_2-usb-0_2_1_0-scsi-0_0_0_0
E: ID_REVISION=0000
E: ID_SERIAL=Google_File-CD_Gadget_30309C8C04B300EC-0:0
E: ID_SERIAL_SHORT=30309C8C04B300EC
E: ID_TYPE=disk
E: ID_USB_DRIVER=usb-storage
E: ID_USB_INTERFACES=:080650:
E: ID_USB_INTERFACE_NUM=00
E: ID_VENDOR=Google
E: ID_VENDOR_ENC=Google\x20\x20
E: ID_VENDOR_ID=18d1
E: MAJOR=8
E: MINOR=96
E: SUBSYSTEM=block
E: UDEV_LOG=3
E: UDISKS_PRESENTATION_ICON_NAME=multimedia-player
E: UDISKS_PRESENTATION_NOPOLICY=0
E: USEC_INITIALIZED=33253437171

Eu tentei muitas outras combinações (com, por exemplo, KERNEL = ..). Agora eu preciso de ajuda. Cada sugestão é muito apreciada! Se você precisar de mais saída (como o syslog), terei prazer em fornecê-lo ...

#

Postscriptum:

Eu acho que o problema é provavelmente que o sistema de arquivos obtém o nó do dispositivo, por exemplo, "sdg", e não "sdg1". Outros smartphones Android parecem não mostrar este problema, com um ás galáxia por ex., Tudo estava bem ...

A saída do fdisk -l / dev / sdg (com os nexus s):

Disk /dev/sdg: 14.3 GB, 14314094080 bytes
64 Köpfe, 32 Sektoren/Spur, 13650 Zylinder, zusammen 27957215 Sektoren
Einheiten = Sektoren von 1 × 512 = 512 Bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Festplattenidentifikation: 0x00000000

Gerät  boot.     Anfang        Ende     Blöcke   Id  System

e depois nada.

Enfim, resolvi isso para mim criando um pidfile e deixei o script checar ...

    
por happy ubuntu user 30.12.2012 / 21:12

1 resposta

1

Acho que você está certo com a suposição de ter dois eventos acionados pelo primeiro sdg e depois sdg1 . Eu tive o mesmo problema com um stick de memória USB.

Adicione à sua regra

KERNEL=="sd?[0-9]"

Isso só será acionado para o segundo evento. Trabalhou bem para mim.

    
por chris LB 26.12.2013 / 18:41