我有几个文件夹包含压缩数据。我有一个应用程序需要访问相同数据的未压缩版本。
对我来说,解决这个问题的一个简单方法是在登录时运行一个如下所示的脚本:
#!/bin/bash
rar2fs -o allow_other /home/user/source1 /home/user/target1
rar2fs -o allow_other /home/user/source2 /home/user/target2
rar2fs -o allow_other /home/user/source3 /home/user/target3
rar2fs -o allow_other /home/user/source4 /home/user/target4
为了让脚本在我登录时运行很简单,我只需使用“启动应用程序”添加它。
然而,我现在才意识到,当我注销然后重新登录时,我的方法就失败了。
我猜是因为 rar2fs/fuse 挂载发生在我加密的主文件夹中,所以它运行得不好。当我注销时,我认为 ubuntu 锁定了加密,但即使源和目标都无法访问,我的挂载可能仍会保留下来。
然后,当我再次登录时,雪上加霜的是,我尝试再次进行挂载。当我尝试访问挂载点时,挂载点会弹出错误,如下所示:
Error: Error when getting information for file '/home/user/target1':Transport endpoint is not connected
我的猜测是,如果我能让系统在注销时正确卸载,就可以避免这种情况,但我不知道如何让脚本在注销时运行。
如何在退出前正确关闭保险丝座?
编辑:我正在使用 unity。
编辑:
跑步fusermount -u使用会话清理脚本我收到以下错误:
fusermount: bad mount point /home/user/target1: No such file or directory
我还尝试将 umount 循环添加到我的挂载脚本中,以便如果文件夹已挂载,它应该在挂载它们之前卸载它们,但这些卸载也会失败:
fusermount: failed to unmount /home/user/target1: Invalid argument
我猜第一个解决方案失败是因为加密的主文件夹在运行清理脚本之前锁定。也许有某种方法可以挂接到加密例程中并在主文件夹锁定之前运行脚本?
如果我在注销之前手动运行 umount 脚本,则当我再次登录时,挂载点将按预期工作。
答案1
我遇到了和你类似的问题,只不过我使用的是 SSHFS。我认为我的解决方案可以轻松适应你的场景。
在/etc/lightdm/lightdm.conf
的部分下[SeatDefaults]
,以下选项指向退出用户会话时运行的文件(以 root 身份运行):
session-cleanup-script=/path/to/file
fuse 挂载可以在运行中卸载fusermount -u /path/to/mount/point
,但只有挂载它的用户才能卸载它。所以我不得不使用 来su
更改用户fusermount -u
。这是我的注销脚本:
#!/bin/bash
# Change user
if [ "$EUID" = "0" -a "$USER" != "root" ]; then
su -c $0 $USER &
exit 0
fi
# Unmount sshfs sharings at the end of the session
for MNTPOINT in `mount -t fuse.sshfs | grep -i "user=$USER" | cut -d" " -f 3`; do
fusermount -u $MNTPOINT
done
exit 0
您所要做的就是用正确的文件系统类型替换,您可以在输出fuse.sshfs
中找到它。mount