加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 在struct inode中存储一些数据

发布时间:2020-12-14 01:39:35 所属栏目:Linux 来源:网络整理
导读:您好,我是内核编程的新手.我正在编写一个小内核模块 这是基于wrapfs模板来实现备份机制.这是 纯粹是为了学习的基础. 我正在扩展wrapfs,以便在写入调用时透明地包裹wrapfs 在单独的目录中创建该文件的副本,然后执行写入 在文件上.但我不希望我为每次写入调用
您好,我是内核编程的新手.我正在编写一个小内核模块
这是基于wrapfs模板来实现备份机制.这是
纯粹是为了学习的基础.

我正在扩展wrapfs,以便在写入调用时透明地包裹wrapfs
在单独的目录中创建该文件的副本,然后执行写入
在文件上.但我不希望我为每次写入调用创建一个副本.

一个天真的方法可能是我检查该目录中是否存在文件.但
我认为对于每次通话检查,这可能是一个严重的惩罚.

我还可以检查第一次写入调用,然后存储一个值
使用private_data属性的特定文件.但那不会存储
磁盘.所以我需要再次检查一下.

我也在考虑利用修改时间.我可以救一个
修改时间.如果较旧的修改时间在那之前,那么只有
创建副本,否则我不会做任何事情.我试着使用inode.i_mtime
为此,即使在调用write之前,它也是修改过的时间
应用程序可以修改该时间.

所以我想在磁盘上的inode中存储一些值来指示它
备份是否已创建.那可能吗?任何其他建议或
方法是受欢迎的.

解决方法

您实际上是在说要进行写时复制虚拟文件系统层.

IMO,其中一些已经完成,并且在用户空间中实现这些将更容易(例如,使用libfuse和熔丝模块).这样,您就可以成为城堡的王者,并以您认为合适的方式添加元数据:

>只需将(隐藏的)元数据文件添加到每个目录
>使用扩展的POSIX属性(setfattr和朋友)
>哎呀,你甚至可以使用sqlite数据库

如果你真的坚持在内核中做这些事情,你将会有更多的工作,因为从内核模式访问元数据需要花费更多的精力(你很可能想要使用内存映射来模拟你自己的数据库)文件,以便最大限度地减少“用户空间(样式)”工作量,并使相对容易获得原子性和可靠性1.

1
在How Everybody Gets File IO Wrong: see also here

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读