Esta abordagem pode ser sub-ótima. Por exemplo, se você suportar a montagem de NTFS gravável usando ntfs-3g
, o processo ntfs-3g
será eliminado sempre que você reiniciar o udev.
Observe que a moderna doutrina de segurança sugere que os desktops devem começar a usar o FUSE para montar todos sistemas de arquivos removíveis. link
Seria preferível se você pudesse descobrir como iniciar (e parar?) uma unidade separada do sistema ... e escrevê-la como a abordagem preferencial, em qualquer documento peculiar que continue sugerindo que os usuários do Arch usem esse padrão: ). O uso de uma unidade systemd separada evitará as restrições aplicadas ao serviço do udev.
Por exemplo, inicie um comando em uma unidade de escopo do systemd usando systemd-run --no-block --scope -- my mount command here
.
Infelizmente, se você quiser que a unidade que contém ntfs-3g
tenha um nome identificável , não é imediatamente óbvio qual é a maneira 100% correta. Se uma unidade antiga com esse nome ainda for rastreada como "ativa", mas o processo tiver acabado de sair, simplesmente solicitar que o serviço seja iniciado não fará nada. Você poderia ignorar o problema, gerar um sufixo aleatório para o nome ou tentar excluir essa sequência de eventos ... mas talvez haja uma maneira melhor.
Eu não testei isso com o FUSE, mas acho que a maneira de fazer isso seria o comando systemd-mount
.
Uma resposta de superusuário sugere que usar systemd-mount
em um dispositivo enquanto a regra do udev ainda está em execução, pode não funcionar corretamente. Isso exigiria soluções alternativas bastante barrocas. ( RUN+="/path/to/my/script %k"
que executa systemd-run --no-block --scope --unit=mount-$1 sh -c "systemctl start /dev/$1; systemd-mount ..."
).
Acho que a maneira de fazer isso seria algo como
ENV{SYSTEMD_WANTS}=my-mounter@%k.service
# /etc/systemd/system/[email protected]
[Service]
Type=oneshot
ExecStart=systemd-mount %I
#!/bin/sh
# /usr/local/lib/my-mounter
# You can make this as complicated as you want.
# (Although curiously systemd-mount also reads SYSTEMD_MOUNT_WHERE and
# SYSTEMD_MOUNT_OPTIONS properties if you set them on the udev device.)
# You could also read udev properties yourself using
# eval "$(udevadm info --query=property --export)"
DEVNAME="$1"
systemd-mount "/dev/$DEVNAME"
Os padrões para systemd-mount
fazem com que o sistema de arquivos seja desmontado automaticamente na remoção, mas eles não limpam o diretório do ponto de montagem criado automaticamente (!).
Havia duas alterações separadas na v239 - duas diretivas separadas que você deve reverter para obter o comportamento antigo.
-
%código%. Substitua isto por
PrivateMounts=yes
. -
PrivateMounts=no
O uso desta diretiva é novo na v239. Portanto, a maneira mais simples de recuperar o comportamento anterior é removê-lo completamente.