Umount unidades de rede com o systemd antes do desligamento

5

Meu desligamento leva muito tempo (estou no Debian 8.1) e descobri que ele pode ser corrigido desmontando a unidade de rede antes de desligar o sistema. Aparentemente, a rede é desconectada antes que todas as unidades sejam desmontadas.

Para fazer isso automaticamente, tentei criar um serviço systemd, mas ele não funciona, ou seja, ele não parece desmontar a tempo e o processo de desligamento ainda demora bastante. Minha abordagem é inspirada por as respostas para essas perguntas , bem como algumas pesquisas nas páginas do manual systemd.service ...

[unit]
description=Unmount network drives on shutdown
Before=shutdown.target reboot.target halt.target network.target

[Service]
type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/bin/sh umount /media/networkdrive1 /media/networkdrive2

[Install]
WantedBy=multi-user.target

Editar

As unidades de rede são montadas em / etc / fstab com as seguintes linhas:

//192.168.1.5/networkdrive1 /media/nw1 cifs _netdev,uid=myuser,credentials=/home/myuser/.credfile
//192.168.1.5/networkdrive2 /media/nw2 cifs _netdev,uid=myuser,credentials=/home/myuser/.credfile
    
por pandita 29.08.2015 / 16:04

2 respostas

2

Adicione a opção _netdev mount aos sistemas de arquivos remotos em /etc/fstab . Depois de um systemctl daemon-reload isso deve fazer a sua rede montar dependências do remote-fs.target ; verifique com systemctl list-dependencies remote-fs.target . Tais sistemas de arquivos são desmontados antes que a rede seja derrubada.

    
por 30.08.2015 / 21:21
2

Após 3 dias de pesquisa e testes, desenvolvi uma solução de trabalho - isto é para uma instalação Debian-Jessie, Linux Mint, i386 (32-bit). Eu tenho compartilhamentos cifs de rede, que interrompem o desligamento ou reinicializam por 120 segundos se eles não forem primeiro montados. Com esse script, não preciso desmontar manualmente os compartilhamentos antes de reinicializá-lo ou desligá-lo.

O script auto cifs umount, executado no desligamento e reinicialização

  • crie o seguinte script como /etc/init.d/aaaumount (os scripts são executados em número e em ordem alfabética, é por isso que o aaa , portanto, é executado primeiro):

    #!/bin/sh
    
    #
    # aaaumount initscript
    #
    ### BEGIN INIT INFO
    # Provides:          aaaumount
    # Required-Start:    $local_fs $remote_fs
    # Required-Stop:     $remote_fs
    # Default-Start:     S
    # Default-Stop:      0 1 6
    # Short-Description: umounts cifs shares
    # Description:       This script unmounts cifs shares
    ### END INIT INFO
    
    case "$1" in
     stop)
                umount -t cifs -af
    esac
    
  • torne-o executável:

    sudo chmod 755 /etc/init.d/aaaumount
    
  • faça um link simbólico para o serviço em / lib / systemd / system /:

    cd /lib/systemd/system/
    sudo ln -s /dev/null aaaumount.service
    
  • faça links simbólicos em /etc/rc0.d e /etc/rc6.d ( 0 e 6 são níveis de execução de desligamento / reinicialização):

    sudo ln -s /etc/init.d/aaaumount /etc/rc0.d/K01aaaumount 
    sudo ln -s /etc/init.d/aaaumount /etc/rc6.d/K01aaaumount 
    
  • ative-o:

    sudo systemctl enable aaaumount.service
    
por 07.04.2018 / 21:30