A regra do Udev para montar o disco não funciona

5

Eu tenho o seguinte conteúdo em /etc/udev/rules.d/81-external-disk.rules:

ENV{ID_FS_UUID}=="6826692e-79f4-4423-8467-cef4d5e840c5", RUN{program}+="/bin/mount -o nofail,x-systemd.device-timeout=1 -t ext4 -U 6826692e-79f4-4423-8467-cef4d5e840c5 /backup/external"

Depois de executar:

udevadm control --reload ; udevadm trigger /dev/sdb1

Não faz nada. No entanto, se eu alterar o comando mount para algo como / bin / touch / tmp / xyz, ele funciona.

Versões:

[root@helsinki rules.d]# rpm -qa | grep udev
libgudev1-219-19.el7_2.12.x86_64
python-pyudev-0.15-7.el7_2.1.noarch
[root@helsinki rules.d]# rpm -qa | grep systemd
systemd-libs-219-19.el7_2.12.x86_64
systemd-219-19.el7_2.12.x86_64
systemd-sysv-219-19.el7_2.12.x86_64
[root@helsinki rules.d]# cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core) 
    
por sebelk 13.12.2016 / 15:43

3 respostas

11

Este é um recurso do systemd. O comando udev original foi substituído por systemd-udevd (consulte a man page). Uma das diferenças é que ele cria seu próprio namespace de sistema de arquivos, então sua montagem é feita, mas não é visível no namespace principal. (Você pode verificar isso fazendo systemctl status systemd-udevd para obter o PID Principal do serviço e, em seguida, examinando o conteúdo de /proc/<pid>/mountinfo para o seu sistema de arquivos).

Se você quiser voltar a ter um namespace de sistema de arquivos compartilhado em vez de privado, crie um arquivo /etc/systemd/system/systemd-udevd.service com conteúdo

.include /usr/lib/systemd/system/systemd-udevd.service
[Service]
MountFlags=shared 

ou um novo diretório e arquivo /etc/systemd/system/systemd-udevd.service.d/myoverride.conf com as últimas duas linhas, ou seja,

[Service]
MountFlags=shared

e reinicie o serviço systemd-udevd. Eu não encontrei as implicações de fazer isso.

    
por 13.12.2016 / 20:48
4

Este mesmo problema ocorre no Ubuntu 18.04 com a mesma causa subjacente. Para corrigir isso, criamos um arquivo de substituição para systemd-udevd :

sudo systemctl edit systemd-udevd

E insira-o:

[Service]
MountFlags=shared

Salve o arquivo e execute:

sudo systemctl daemon-reload
sudo service systemd-udevd --full-restart
    
por 03.05.2018 / 17:58
0

O ENV {ID_FS_UUID} não é conhecido antes da montagem.

Você deve usar um atributo mais próximo do hardware, como ATTR {SerialNumber} ou ATTR {Vendor} e ATTR {ProdID}.

usb-devices pode ajudar você a encontrar a melhor maneira de identificar seu dispositivo.

    
por 13.12.2016 / 17:28

Tags