Copy/move FUSE 语义

Copy/move semantics on FUSE

我有一个带标签的哈希值数据库,我想为它实现一个 FUSE 接口。因为值是由它们的哈希值索引的,所以它们必须是只读的。

此数据库的本机界面非常简单:

FUSE 接口语义很简单:

这个 FUSE 接口非常有用,允许您轻松地将标签文件系统嵌入到分层系统中,而无需像 TagSpaces or Evernote.

这样的外部工具。

我的问题是从使用 FUSE 接口的任何其他禁止操作中识别文件 copymove:具有等效语义的操作有无限可能的组合。

使用 FUSE 接口识别文件 copymove 的最可靠方法是什么?

通过实施 rename() fuse call. In this call, you will get path of both old and new location, so that you can check if the file comes from outside or not. That said, this would work only if user space tool renames a file by invoking rename(2) 内核调用挂钩文件重命名应该很简单。

另一方面,挂钩文件复制操作会更难:它不能直接完成,因为没有这样的保险丝调用 - 复制完全发生在用户 space 中,因此无法直接检测到内核 space.

您可以尝试做一些试探法并处理传入的融合操作来检测已存储文件的重命名(例如,通过散列新文件的内容并将其与现有文件进行比较),但我不确定多少它对你的情况有意义,或者它是否实际可行。