Já vi perguntas semelhantes a esta feitas antes em várias variações, mas ainda não encontrei uma resposta satisfatória.
Veja o que eu tenho:
- Um laptop Debian altamente móvel que alterna as redes com freqüência.
- Um servidor FreeNAS em casa com um monte de compartilhamentos CIFS.
Aqui está o que eu quero:
- Se eu acessar o diretório de compartilhamento CIFS quando estiver em casa, monte automaticamente o compartilhamento CIFS.
- Se eu acessar o compartilhamento CIFS quando estiver em outro lugar, retorne um erro imediatamente (ou seja, não pense na rede por cinco minutos antes de descobrir que o NAS não está lá).
- Quando eu suspender ou hibernar a máquina, desmonte de forma limpa o compartilhamento de modo que a montagem não esteja apontando para o ar quando a máquina acordar novamente. Se o compartilhamento não puder ser desmontado corretamente (um processo está usando um diretório):
- Aborte a suspensão / hibernação e me diga quem está acampando no monte; ou
- Forçar a desmontagem de qualquer maneira e continuar com o suspend / hibernate.
- Crédito extra: quando a conexão de rede cair (puxe o plugue ou perca a associação com o WAP), tente desmontar o compartilhamento.
- Crédito extra: essa mágica deve ser independente do gerenciador de rede em uso.
Nenhuma das várias opções sobre as quais li parece ser apropriada:
-
autofs
parece ser confiável, mas parece não ter nenhum conhecimento sobre suspensão / hibernação.
- A opção
_netdev
em mount
e /etc/fstab
parece interessante, mas parece se aplicar apenas a compartilhamentos NFS.
- Ainda não consegui fazer com que
gvfs
funcione, mas ainda não me esforcei muito.
Alguma sugestão sobre como abordar isso?
ADENDO:
Aqui está a versão curta do que acabei fazendo até agora. Instalei autofs
e escrevi um pequeno script shell para forçar a expiração de todos os volumes montados automaticamente, que são chamados sempre que uma interface de rede fica inativa.
Eu criei um mapa automounter para meu servidor CIFS, com as credenciais armazenadas em um arquivo externo (yuck). Eu então escrevi o seguinte script de shell:
#!/bin/sh -e
# Expire everything in the automounter.
if [ -f /var/run/autofs.pid ]; then
kill -USR1 "$(cat /var/run/autofs.pid)"
fi
Enviar o sinal USR1 para o daemon do automount faz com que ele expire todas as montagens não usadas. Em seguida, coloquei esse script em /etc/network/if-down.d/autofs
, com um link em /etc/network/if-post-down.d/autofs
. O NetworkManager invoca todos os scripts no último diretório quando uma conexão cai, portanto, qualquer sistema de arquivos montado automaticamente deve ser desmontado.
Eu não estou muito feliz com o acordo, no entanto. Para começar, autofs
não faz distinção entre volumes montados automaticamente e, ao receber USR1, desmontará todos volumes inativos, incluindo volumes que não sejam de rede, o que é bastante pesado.
Além disso, a senha de login do servidor CIFS deve ser armazenada em um arquivo. Eu preferiria muito mais ser solicitado.
De qualquer forma, foi o que eu juntei até agora. Funciona, mas ficarei feliz em usar algo melhor ...