我曾经在几个变体中看到过与此问题类似的问题,但是我还没有找到满意的答案。
这是我所拥有的:
- 高移动性的Debian笔记本电脑,可经常切换网络。
- 家里有一台CIFS共享的FreeNAS服务器。
这就是我想要的:
- 如果我在家时访问CIFS共享目录,请自动挂载CIFS共享。
- 如果我在其他地方访问CIFS共享时,请立即返回错误(即,在确定NAS不存在之前,请不要考虑网络五分钟)。
- 当我挂起或休眠计算机时,请干净地卸载共享,以使当计算机再次唤醒时,挂载不会指向稀薄的空气。如果无法完全卸载共享(进程正在使用目录),请执行以下任一操作:
- 中止暂停/休眠状态,并告诉我谁在山上露营;要么
- 无论如何都要强制卸载,然后继续挂起/休眠。
- 额外信用:当网络连接断开(拔下插头或失去与WAP的关联)时,请尝试完全卸载共享。
- 额外信用:此魔术应该独立于所使用的网络管理器。
我读过的各种选项似乎都不适合:
autofs
似乎是可靠的,但似乎对暂停/休眠没有任何了解。- 该
_netdev
选件mount
和/etc/fstab
看起来很有趣,但似乎只适用于NFS共享。 - 我还没能
gvfs
上班,但是那时我还没有很努力。
有关如何处理此问题的任何建议?
附录:
这是到目前为止我做的简短的版本。我安装了autofs
,并编写了一个小的Shell脚本来强制使所有自动安装的卷过期,每当网络接口出现故障时,该卷就会被调用。
我为CIFS服务器创建了一个自动安装程序映射,其凭据存储在一个外部文件中(yuck)。然后,我编写了以下shell脚本:
#!/bin/sh -e
# Expire everything in the automounter.
if [ -f /var/run/autofs.pid ]; then
kill -USR1 "$(cat /var/run/autofs.pid)"
fi
将USR1信号发送到自动挂载守护程序会使它强制使所有未使用的挂载失效。然后/etc/network/if-down.d/autofs
,我将这个脚本放入其中,并在其中添加一个软链接/etc/network/if-post-down.d/autofs
。连接断开时,NetworkManager会调用后一个目录中的所有脚本,因此应卸载所有自动挂载的文件系统。
但是,我对此安排并不满意。首先,autofs
不区分自动装入的卷,并且在接收到USR1时将卸载所有不活动的卷,包括非网络卷,这是很费力的。
此外,CIFS服务器的登录密码必须存储在文件中。我非常希望得到提示。
无论如何,到目前为止,这就是我一直坚持的目标。它可以工作,但是我很乐意使用更好的东西...
sudo mount -t cifs ...
产生更好的结果。我会再摆弄一些,但我认为Gigolo并不是我想要的。