종료하기 전에 systemd를 사용하여 네트워크 드라이브 마운트 해제

종료하기 전에 systemd를 사용하여 네트워크 드라이브 마운트 해제

시스템 종료에 꽤 오랜 시간이 걸렸고(Debian 8.1을 사용하고 있습니다) 시스템을 종료하기 전에 네트워크 드라이브를 마운트 해제하면 문제를 해결할 수 있다는 것을 알았습니다. 모든 드라이브가 마운트 해제되기 전에 네트워크 연결이 끊어진 것 같습니다.

이를 자동화하기 위해 systemd 서비스를 생성하려고 시도했지만 작동하지 않았습니다. 즉, 제때에 제거되지 않은 것 같았고 종료 프로세스에 여전히 오랜 시간이 걸렸습니다. 내 접근 방식은 다음에서 영감을 받았습니다.이 질문에 대한 대답그리고 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

편집하다

네트워크 드라이브는 다음 줄을 사용하여 /etc/fstab에 마운트됩니다.

//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

답변1

3일간의 검색과 테스트 끝에 Debian-Jessie, Linux Mint, i386(32비트) 설치를 위한 작동하는 솔루션을 개발했습니다. 먼저 마운트 해제하지 않으면 종료 또는 재부팅 시 120초 동안 중단되는 네트워크 cifs 공유가 있습니다. 이 스크립트를 사용하면 재부팅하거나 종료하기 전에 공유를 수동으로 마운트 해제할 필요가 없습니다.

종료 및 재부팅 시 실행되는 자동 cifs umount 스크립트

  • 다음 스크립트를 만듭니다 /etc/init.d/aaaumount (스크립트는 숫자 및 알파벳 순서로 실행되므로 aaa먼저 실행됩니다).

    #!/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
    
  • 실행 가능하게 만드세요:

    sudo chmod 755 /etc/init.d/aaaumount
    
  • /lib/systemd/system/에서 서비스에 대한 심볼릭 링크를 만듭니다.

    cd /lib/systemd/system/
    sudo ln -s /dev/null aaaumount.service
    
  • /etc/rc0.d/etc/rc6.d 및 ( 06종료/다시 시작 런레벨) 에 심볼릭 링크를 만듭니다 .

    sudo ln -s /etc/init.d/aaaumount /etc/rc0.d/K01aaaumount 
    sudo ln -s /etc/init.d/aaaumount /etc/rc6.d/K01aaaumount 
    
  • 활성화하세요:

    sudo systemctl enable aaaumount.service
    

답변2

_netdev에서 원격 파일 시스템에 마운트 옵션을 추가합니다 /etc/fstab. 그러면 systemctl daemon-reload네트워크 설치가 remote-fs.target종속성을 확인해야 합니다 systemctl list-dependencies remote-fs.target. 이러한 파일 시스템은 네트워크가 종료되기 전에 마운트 해제됩니다.

답변3

몇 번의 시행착오 끝에 저는 wpa_supplicant.serviceUbuntu 16.04에서 Wi-Fi를 사용하는 데 필요한 시스템이 실제로 systemd에 의해 관리되지 않는다는 사실을 알아냈습니다(그리고 systemd 장치는 "비활성화"되었습니다). DBus를 통해 시작되는 것으로 보입니다. 아직도 왜인지는 모르겠지만 꺼졌어앞으로 network-online.target그리고 network.target.

마지막으로 드라이브가 제대로 마운트 해제되었는지 확인하기 위해 드라이브를 After=graphical.target마운트 장치에 추가했습니다. 이렇게 하려면 다음과 같이 x-systemd.requires=graphical.target파일에 옵션을 추가하면 됩니다./etc/fstab

6.5 이전 버전에서는 그렇지 않았던 mount.cifs으로 시작하는 옵션을 무시하려면 유틸리티(제 경우에는 )를 설치해야 합니다 .x-mount.cifs

관련 정보