Systemd:如何在挂起时自动卸载网络挂载

Systemd:如何在挂起时自动卸载网络挂载

我有几个运行 systemd 的 Ubuntu 19.04(即将成为 19.10)系统,它们都使用 systemd 单元挂载 NAS 服务的挂载。我还使用自动安装单元来确保仅根据需要安装安装座。

然而,我对 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 命令的权限)。

相关内容