Estamos atualizando nossos servidores de uma distribuição muito desatualizada para um sistema moderno baseado no Debian Jessie, incluindo lightdm / xfce e, claro, systemd (e udisks2). Um ponto de discórdia é a montagem automática de unidades 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 após alguns segundos o systemd está fazendo algo que interrompe a montagem, portanto, tentativas de acesso subsequentes resultam em erros "O terminal de transporte não está conectado".
A montagem manual da unidade via linha de comando funciona bem. O mesmo acontece com deixar um gerenciador de arquivos (thunar e thunar-volman, que por sua vez usa o udisks2). Mas essas não são opções viáveis - esses sistemas geralmente funcionam sem cabeça, portanto, thunar normalmente não está funcionando. Precisamos ser capazes de conectar unidades de disco para backups autônomos baseados em cron.
Eu pensei que modificar o script do udev para gerar um trabalho desanexado que aguarde alguns segundos antes de executar a montagem pode resolver o problema, mas o systemd parece se esforçar para evitar isso - de alguma forma ainda espera que o trabalho desanexado termine antes continuando.
Talvez fazer com que o script do udev faça cócegas no udisks2 de alguma forma é a abordagem correta? Estou perdida, então qualquer conselho muito apreciado.
fonte
Respostas:
Depois de várias partidas falsas, eu descobri isso. A chave é adicionar um serviço de unidade systemd entre o udev e um script de montagem.
(Para o registro, eu não consegui fazer isso funcionar usando o udisks2 (via algo como
udisksctl mount -b /dev/sdb1
) chamado diretamente de uma regra do udev ou de um arquivo de unidade do systemd. Parece haver uma condição de corrida e o nó do dispositivo não está pronto , resultando emError looking up object for device /dev/sdb1
. Infelizmente, uma vez que o udisks2 pode 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 dos 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 do nome de arquivo "@" para que possamos passar o nome do dispositivo como argumento.
/etc/systemd/system/[email protected]
Finalmente, algumas regras do udev iniciam e param o serviço da unidade systemd no 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 da unidade systemd.fonte
blkid
não parece extrair umID_FS_LABEL
, então apenas usei o emDEVBASE
vez deLABEL
construí-loMOUNT_POINT
.udevadm
vez deblkid
. Dá muito mais detalhes, além de informações adicionais. (eg,udevadm info --query=property --name=sda1
)/usr/bin/find: '/media/*': No such file or directory
. A limpeza pode usar uma verificação adicional comoif [ "$f" != "/media/*" ]; then
antes da execuçãofind
.existe uma nova e sucinta
systemd
opção de montagem automática, que pode ser usada com afstab
qual você pode usar todas as opções de permissão de montagem padronizadas, e fica assim:um exemplo disso em uma
fstab
linha:a
noauto
opção significará que não tentará ser montado na inicialização, como acontece com o software mais antigoautofs
.Depois de adicionar uma nova
x-systemd.automount
linha,fstab
você precisará executar:e então ambos, ou um, do seguinte:
para mais informações sobre isso:
https://wiki.archlinux.org/index.php/Fstab#Automount_with_systemd
fonte
sudo systemctl restart local-fs.target
fez o truque para mimModifiquei o script de @MikeBlackwell para:
/dev/sd[a-z]
, mas/dev/sd[a-z]*
; geralmente é o caso de servidores com maior número de eixos./var/log/usb-mount.track
/var/log/messages
com a tag usb-mount.sh/media/sdd2_usbtest
,/media/sdd2_
Como o @MikeBlackwell já fez a maior parte do trabalho pesado, escolhi não reescrevê-lo; acabou de fazer as alterações necessárias. Eu reconheci seu trabalho vendo seu nome e URI da resposta original.
Encontre-o em https://github.com/raamsri/automount-usb
fonte
Usando a abordagem pmount , systemd e Mike Blackwell, você pode simplificar tudo:
/etc/systemd/system/[email protected]
/etc/udev/rules.d/99-usb-mount.rules
HTH e obrigado Mike.
fonte
Eu iria com a resposta de Warren Young. Tenho algumas mudanças que fiz para
Adicionei alguma proteção de espaço, pois estava dando erros na avaliação do ambiente para a unidade.
Adicionei uma seção ao chmod de 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
fonte