Montando o exfat com regras do udev automaticamente

3

Estou tentando montar vários cartões SD automaticamente com as regras do udev. Eu comecei com estas regras , resolvi um problema com a ajuda de esta pergunta , e agora tenho a seguinte situação:

Dispositivos formatados para ext4 e vfat funcionam perfeitamente, mas quando eu conecto um disco formatado com exfat ou NTFS eu recebo a seguinte linha em mount :

/dev/sda1 on /media/GoPro type fuseblk (rw,nosuid,nodev,noatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096)

E a listagem do diretório é assim:

$ ls -l /media/
ls: cannot access '/media/GoPro': Transport endpoint is not connected
total 0
d????????? ? ? ? ?            ? GoPro

Eu não posso fazer nada sob esse ponto de montagem, nem mesmo como root:

$ sudo ls -l /media/GoPro
ls: cannot access '/media/GoPro': Transport endpoint is not connected

Os únicos problemas que posso encontrar de outras pessoas com a mensagem de erro Transport endpoint is not connected parecem acontecer depois que um disco não foi desmontado corretamente. Mas eu tenho o problema enquanto o disco está montado.

Minhas regras atuais do udev são assim:

KERNEL!="sd[a-z][0-9]", GOTO="media_by_label_auto_mount_end"
ACTION=="add", PROGRAM!="/sbin/blkid %N", GOTO="media_by_label_auto_mount_end"

# Do not mount devices already mounted somewhere else to avoid entries for all your local partitions in /media
ACTION=="add", PROGRAM=="/bin/grep -q ' /dev/%k ' /proc/self/mountinfo", GOTO="media_by_label_auto_mount_end"

# Global mount options
ACTION=="add", ENV{mount_options}="noatime"
# Filesystem-specific mount options
ACTION=="add", PROGRAM=="/sbin/blkid -o value -s TYPE %E{device}", RESULT=="vfat|ntfs", ENV{mount_options}="%E{mount_options},utf8,uid=1000,gid=100,umask=002"
ACTION=="add", PROGRAM=="/sbin/blkid -o value -s TYPE %E{device}", RESULT=="exfat", ENV{mount_options}="%E{mount_options},utf8,allow_other,umask=002,uid=1000,gid=1000"

# Get label if present, otherwise assign one
ENV{ID_FS_LABEL}!="", ENV{dir_name}="%E{ID_FS_LABEL}"
ENV{ID_FS_LABEL}=="", ENV{dir_name}="usbhd-%k"

# Mount the device
ACTION=="add", ENV{dir_name}!="", RUN+="/bin/mkdir -p '/media/%E{dir_name}'", RUN+="/bin/mount -o %E{mount_options} /dev/%k '/media/%E{dir_name}'"

# Clean up after removal
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l '/media/%E{dir_name}'"
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/rmdir '/media/%E{dir_name}'"

# Exit
LABEL="media_by_label_auto_mount_end"

Eu tentei usar user_id e group_id em vez de uid e gid , mas sem sucesso.

Montar o dispositivo manualmente funciona bem:

$ sudo mount -o noatime,utf8,allow_other,umask=002,uid=1000,gid=1000 /dev/sdb1 /media/GoPro/
FUSE exfat 1.2.5
$ ls -l /media/
total 132
drwxrwxr-x 1 pi   pi   131072 Jan  1  1970 GoPro
    
por Gerald Schneider 20.05.2018 / 14:04

1 resposta

1

TL; DR: udev e fusível não são realmente compatíveis

Após perceber que esse problema não ocorre apenas com o exfat, mas também com dispositivos formatados com NTFS, comecei a procurar especificamente por problemas com o udev e com o fusível.

Alguns comentários sobre a combinação que encontrei:

I think that the fuse process is being killed. You cannot start long-lived processes from a udev rule, this should be handled by systemd.

( source )

Warning: To mount removable drives, do not call mount from udev rules. In case of FUSE filesystems, you will get Transport endpoint not connected errors. Instead, you could use udisks that handles automount correctly or to make mount work inside udev rules, copy /usr/lib/systemd/system/systemd-udevd.service to /etc/systemd/system/systemd-udevd.service and replace MountFlags=slave to MountFlags=shared.[3] Keep in mind though that udev is not intended to invoke long-running processes.

( fonte )

E há mais.

Acabei usando os scripts e os arquivos de configuração desta resposta . Funciona perfeitamente com todos os tipos de sistema de arquivos. Eu gostaria de ter encontrado isso antes, teria me poupado alguns dias de depuração, tentativa e erro.

    
por 20.05.2018 / 16:29

Tags