udev + udisks2: udisksctl fornece 'Erro ao procurar objeto para o dispositivo'

2

No Debian Wheezy eu tinha uma regra especial para o meu hdd usb ntfs. Quando é inserido, é montado em / media sob uma subpasta específica.

ACTION=="add", SUBSYSTEMS=="usb", ATTRS{serial}=="<serial_number>", SYMLINK+="mx%n"
ACTION=="add", SUBSYSTEMS=="usb", ATTRS{serial}=="<serial_number>", RUN+="/bin/mount <options>", OPTIONS="last_rule"
ACTION=="remove", SUBSYSTEMS=="usb", ATTRS{serial}=="<serial_number>", RUN+="/bin/umount <options>"

Depois de atualizar para Jessie, parou de funcionar. Descobri que, após as alterações no udev, você não pode usar o mount e é recomendado usar o udisks2 ou alguma unidade de auto-gravação do sistema. Eu escolhi o udisks2 e reescrevi a regra da seguinte forma

ACTION=="add", SUBSYSTEMS=="usb", ATTRS{serial}=="<serial_number>", SYMLINK+="mx%n"
ACTION=="add", SUBSYSTEMS=="usb", ATTRS{serial}=="<serial_number>", RUN+="/bin/su storage_user -c '/usr/bin/udisksctl mount --block-device /dev/mx1 --filesystem-type ntfs --options locale=en_IE.UTF-8,fmask=0113,dmask=0002 --no-user-interaction'", OPTIONS="last_rule"
ACTION=="remove", SUBSYSTEMS=="usb", ATTRS{serial}=="<serial_number>", RUN+="/usr/bin/udisksctl unmount --block-device /dev/mx1 --no-user-interaction"

Não funciona. No syslog eu vejo:

Error looking up object for device /dev/mx1

Mas se eu executar este comando do cli, tudo funciona bem. Eu acredito que por causa da natureza assíncrona dos serviços systemd / dev / mx1 não está pronto quando o udisk2 está tentando montar o hdd usb.

  1. Em que regra devo escrever?
  2. Existe algum bom guia na Internet sobre como escrever regras de automontagem personalizadas especialmente para sistemas de arquivos ntfs?
por Druid 20.07.2015 / 23:59

1 resposta

0

Infelizmente, não consegui encontrar o motivo pelo qual o udev e o udisks2 não funcionaram juntos. Mas eu encontrei uma solução para o meu problema aqui . Abaixo está um exemplo simples de como implementar o automount de um hdd usb ntfs. Primeiro é um script mount.sh para montar uma unidade

#!/bin/bash
mkdir -p /media/usbhdd
mount -t ntfs-3g -o locale=en_IE.UTF-8,fmask=0113,dmask=0002,uid=storage-user,gid=storage-group /dev/mx1 /media/usbhdd

Em seguida, criamos uma unidade systemd em /etc/systemd/system/mount-hdd.service

[Unit]
Description=mount usb hdd
[Service]
Type=forking
ExecStart=/usr/local/scripts/storage/mount.sh
[Install]
WantedBy=multi-user.target

E finalmente a regra do udev

ACTION=="add", SUBSYSTEMS=="usb", KERNEL=="sd*", ATTRS{serial}=="<serial_number>", SYMLINK+="mx%n"
ACTION=="add", SUBSYSTEMS=="usb", KERNEL=="sd*1", ATTRS{serial}=="<serial_number>", RUN+="/bin/systemctl start mount-hdd"
ACTION=="remove", SUBSYSTEMS=="usb", ATTRS{serial}=="<serial_number>", RUN+="/bin/umount /media/usbhdd", RUN+="/bin/rmdir /media/usbhdd"
    
por 22.07.2015 / 21:05