卸载时触发 fuse 操作

3 投票
2 回答
1957 浏览
提问于 2025-04-16 16:42

我用Python-fuse写了一些简单的文件系统,但现在我想做一些在pydoc和我找到的示例脚本中都找不到的事情:当用fusermount -u卸载文件系统时,我想捕捉这个动作,执行卸载操作,然后删除我程序初始化脚本创建的挂载目录。如果这可能的话,有什么特别的方法可以捕捉到卸载的动作呢?

我能想象这可能会变成一个无限循环,但我希望能找到方法,在第一次触发卸载时禁用这个捕捉。


更新:我在http://omake.metaprl.org/prerelease/omake-dll-fuse.html#htoc582找到了destroy,并添加了这个方法,但似乎没有被调用。

2 个回答

0

还有一种解决办法,虽然不太具体,也没有在Python下测试过,就是用 -f 这个选项来防止FUSE进入“后台运行”状态。

这样的话,fuse_main 方法会一直等待,直到文件系统被卸载,然后你就可以重新控制程序了。

如果你确实需要后台运行的功能,可以在挂载之前自己重新实现这个功能。

0

找到了!在Python-fuse里是fsdestroy()这个函数。我是通过以下方式找到的:

jcomeau@intrepid:/usr/src/google-desktop/api$ cat /usr/lib/python2.6/dist-packages/fuseparts/* | strings | grep destroy
fsdestroy

我用的是:

def fsdestroy(self, data = None):
  syslog.syslog(syslog.LOG_INFO, 'destroy %s: %s' % (self.mountpoint, data))
  os.rmdir(self.mountpoint)

不太确定数据参数是不是必须的,但加上也没坏处。而且,显然这个函数是在卸载(umount)之后调用的,所以我不用担心处理这个问题。

撰写回答