Systemd: 중단 시 네트워크 마운트를 자동으로 마운트 해제하는 방법

Systemd: 중단 시 네트워크 마운트를 자동으로 마운트 해제하는 방법

systemd를 실행하는 Ubuntu 19.04(곧 19.10 예정) 시스템이 여러 대 있는데, 모두 NAS 서비스에 systemd 장치 마운트를 사용합니다. 또한 자동 장착 장치를 사용하여 마운트가 필요할 때만 설치되도록 합니다.

그러나 Gnome Shell에는 흥미로운 딜레마가 있습니다. 중단에서 재개된 후 Gnome Shell은 빠른 잠금 해제를 거부하고 설치를 사용할 수 없는 경우 몇 분 동안 중단됩니다. 결국 그렇게 되겠지만, 가급적 빨리 지연을 풀고 싶습니다.

현재 마운트 장치와 자동 마운트는 모두 BindsTo=networking-online.target으로 설정되어 있으며 중단이 시작될 때 네트워크가 다운된 것으로 가정합니다. 이 가정에는 결함이 있는 것 같습니다.

내가 원하는 것은 마운트 및 자동 마운트 장치가 일시 중지 시 중지되고 재개 시 다시 시작되도록 하는 것입니다.

물론, 여기서 진짜 문제는 왜 Gnome이 네트워크 설치가 불가능해서 놀라는지 알아내는 것입니다. (저는 왜 이런 일이 일어나는지 전혀 알 수 없습니다! 실망스럽습니다!) 하지만 이것이 알아내기 어려울 수도 있기 때문에 먼저 해결책을 찾아보자고 생각했습니다.

그럼... 제안이 있으신가요?

다음은 장착 장치 중 하나의 예입니다.

[Unit]
Description=Network Stuff Directory
BindsTo=network-online.target
After=network-online.target

[Mount]
What=//<nas-host>/Public
Where=/nas/stuff
Options=username=<user>,password=<password>,rw,vers=3.0,soft,noperm,_netdev,echo_interval=5
Type=cifs
ForceUnmount=true
TimeoutSec=5
LazyUnmount=true

[Install]
WantedBy=multi-user.target

함께 제공되는 자동 설치 장치는 다음과 같습니다.

[Unit]
Description=Automount Network Stuff Directory
StartLimitIntervalSec=0
BindsTo=network-online.target
After=network-online.target

[Automount]
Where=/nas/stuff

[Install]
WantedBy=multi-user.target

위의 장치 중에서 설치 장치는 자동 설치 장치에 의해 시작되도록 되어 있으므로 자동 설치 장치만 활성화됩니다(예: 부팅 시 자동으로 시작되도록 설정).

감사해요!

답변1

나는 여기에 매우 늦었지만 거의 비슷한 요구 사항이 있습니다. systemd를 사용하여 여러 드라이브를 마운트했는데 Fedora가 일시 중지 상태에서 깨어날 때 종종 중단됩니다.

Fedora 노트북에서 /usr/lib/systemd/system-sleep/drive-mount-problem.sh다음 내용으로 스크립트를 만들었습니다.

#!/bin/bash
# Script to unmount and mount Windows drives on Linux system
if [ "${1}" == "pre" ]; then
    sudo systemctl stop windows-application.mount
    sudo systemctl stop windows-os.mount
    sudo systemctl stop windows-personal.mount
elif [ "${1}" == "post" ]; then
    sudo systemctl start windows-application.mount
    sudo systemctl start windows-os.mount
    sudo systemctl start windows-personal.mount
fi

문제가 해결되었음을 확인했습니다(이 마운트 지점에서 systemctl start 및 stop 명령을 실행하려면 사용자 계정 권한을 부여해야 했지만).

관련 정보