Linux 在结构索引节点中存储一些数据
你好,我是内核编程的新手。我正在写一个小的内核模块 即基于wrapfs模板实现一种备份机制。这是 纯粹是为了学习基础 我正在扩展wrapfs,以便在写入调用时wrapfs是透明的 在单独的目录中创建该文件的副本,然后执行写操作 在档案上。但我不想为每次写呼叫创建一个副本 一种简单的方法是检查该目录中是否存在文件。但是 我认为每次打电话检查都会受到严厉的惩罚 我还可以检查第一次写调用,然后为其存储一个值 使用私有数据属性的特定文件。但这不会存储在计算机上 磁盘。所以我需要再检查一遍 我也在考虑利用修改时间。我可以省下一笔钱 修改时间。如果较旧的修改时间早于该时间,则仅 创建一个副本,否则我什么都不做。我试图使用inode.I\u mtime 对于这一点,但即使在调用write之前,也是经过修改的时间 应用程序可以修改该时间 所以我想在磁盘上的inode中存储一些值,以指示其 备份是否已创建。可能吗?还有其他建议或建议吗Linux 在结构索引节点中存储一些数据,linux,filesystems,linux-kernel,kernel,inode,Linux,Filesystems,Linux Kernel,Kernel,Inode,你好,我是内核编程的新手。我正在写一个小的内核模块 即基于wrapfs模板实现一种备份机制。这是 纯粹是为了学习基础 我正在扩展wrapfs,以便在写入调用时wrapfs是透明的 在单独的目录中创建该文件的副本,然后执行写操作 在档案上。但我不想为每次写呼叫创建一个副本 一种简单的方法是检查该目录中是否存在文件。但是 我认为每次打电话检查都会受到严厉的惩罚 我还可以检查第一次写调用,然后为其存储一个值 使用私有数据属性的特定文件。但这不会存储在计算机上 磁盘。所以我需要再检查一遍 我也在考虑利用
这种方法是受欢迎的。您实际上是说您希望在写虚拟文件系统层上进行复制 在我看来,其中一些已经完成了,在userland中实现这些会更容易(例如,使用libfuse和fuse模块)。这样,您就可以成为城堡之王,并以任何您认为合适的方式添加元数据:
- 只需将(隐藏的)元数据文件添加到每个目录
- 使用扩展POSIX属性(setfattr和friends)
- 见鬼,你甚至可以使用sqlite数据库
一,
在上,您可以使用
atime
而不是mtime
。在这种情况下,在inode上设置S_NOATIME
标志可防止其更新(请参见inode.c
上的touch_atime()
函数)。您唯一需要的是使用noatime
选项挂载文件系统。格式化您的blob有助于让您的问题被阅读。谢谢您的回答。我会看看使用fuse。但实际上我是从使用wrapfs开始的。我已将取消链接的代码更改为调用rename而不是unlink,因此如果有什么我可以像操纵任何struct inode属性一样来满足我的需求needs@liya:为什么我不能使用mtime?但使用atime的问题是,如果读取文件,它将被修改,因此这将是这种方法的一个问题。@gaurav:我明白了,但我不明白为什么atime有效而mtime无效。低FS的atime也不会改变吗?