Estamos atualizando nossos servidores de uma distro muito desatualizada para um sistema moderno baseado no Debian Jessie, incluindo lightdm / xfce e, claro, systemd (e udisks2). Um ponto crítico é a montagem automática de drives USB. Costumávamos fazer isso com algumas regras do udev. As regras antigas quase ainda funcionam - o ponto de montagem é criado e a unidade é montada corretamente, mas depois de alguns segundos o systemd está fazendo algo que interrompe a montagem, portanto, as tentativas de acesso subsequentes resultam em erros "O terminal de transporte não está conectado".
A montagem manual da unidade por meio da linha de comando funciona bem. O mesmo acontece com um gerenciador de arquivos (thunar e thunar-volman, que por sua vez usa udisks2). Mas essas não são opções viáveis - esses sistemas geralmente são executados sem cabeça, portanto, o thunar normalmente não é executado. Precisamos ser capazes de conectar unidades de disco para backups autônomos baseados em cron.
Eu pensei que modificar o script udev para gerar um trabalho desanexado que espera alguns segundos antes de executar a montagem pode resolver o problema, mas o systemd parece fazer de tudo para evitar isso - de alguma forma, ele ainda espera que o trabalho desanexado termine antes continuando.
Talvez fazer com que o script udev agrade udisks2 de alguma forma seja a abordagem certa? Estou perdido, então qualquer conselho é muito apreciado.
Depois de várias partidas falsas, descobri isso. A chave é adicionar um serviço de unidade systemd entre o udev e um script de montagem.
(Para registro, não consegui fazer isso funcionar usando udisks2 (por meio de algo como
udisksctl mount -b /dev/sdb1
) chamado diretamente de uma regra udev ou de um arquivo de unidade systemd. Parece haver uma condição de corrida e o nó do dispositivo não está totalmente pronto , resultando emError looking up object for device /dev/sdb1
. Infelizmente, já que udisks2 poderia cuidar de toda a bagunça do ponto de montagem...)O trabalho pesado é feito por um script de shell, que cuida da criação e remoção de pontos de montagem e da montagem e desmontagem das unidades.
/usr/local/bin/usb-mount.sh
O script, por sua vez, é chamado por um arquivo de unidade systemd. Usamos a sintaxe de nome de arquivo "@" para que possamos passar o nome do dispositivo como um argumento.
/etc/systemd/system/[email protected]
Por fim, algumas regras do udev iniciam e param o serviço da unidade systemd em hotplug/unplug:
/etc/udev/rules.d/99-local.rules
Isso parece fazer o truque! Alguns comandos úteis para depurar coisas como esta:
udevadm control -l debug
ativa o log detalhado para/var/log/syslog
que você possa ver o que está acontecendo.udevadm control --reload-rules
depois de modificar os arquivos no diretório rules.d (pode não ser necessário, mas não pode prejudicar...).systemctl daemon-reload
depois de modificar os arquivos de unidade systemd.há uma nova e sucinta
systemd
opção de montagem automática que pode ser usada com afstab
qual permite que você use todas as opções de permissão de montagem padronizadas, e tem a seguinte aparência:um exemplo disso em uma
fstab
linha:a
noauto
opção significa que ele não tentará ser montado na inicialização, como acontece com softwares mais antigosautofs
.depois de adicionar uma nova
x-systemd.automount
linhafstab
, você precisa executar:e então ambos, ou um, dos seguintes:
para mais informações sobre isso:
https://wiki.archlinux.org/index.php/Fstab#Automount_with_systemd
Usando pmount , systemd e a abordagem de Mike Blackwell, você pode simplificar tudo:
/etc/systemd/system/[email protected]
/etc/udev/rules.d/99-usb-mount.rules
HTH e obrigado Mike.
Eu iria com a resposta de Warren Young. Tenho algumas mudanças que fiz
Eu adicionei alguma proteção de espaço, pois estava dando erros de avaliação do ambiente para a unidade.
Eu adicionei uma seção para chmod um disco usb para que todos os usuários tenham acesso total a discos não NTFS ou vfat.
/usr/local/bin/usb-mount.sh
Modifiquei o script de @MikeBlackwell para:
/dev/sd[a-z]
mas/dev/sd[a-z]*
; frequentemente o caso com servidores que possuem maior número de fusos./var/log/usb-mount.track
/var/log/messages
com a tag usb-mount.sh/media/sdd2_usbtest
,/media/sdd2_
Como @MikeBlackwell já fez a maior parte do trabalho pesado, optei por não reescrever; apenas fez as alterações necessárias. Eu reconheci seu trabalho avistando seu nome e URI da resposta original.
Encontre-o em https://github.com/raamsri/automount-usb