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

linux – 在struct inode中存储一些数据,第1张

概述您好,我是内核编程的新手.我正在编写一个小内核模块 这是基于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

总结

以上是内存溢出为你收集整理的linux – 在struct inode中存储一些数据全部内容,希望文章能够帮你解决linux – 在struct inode中存储一些数据所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1029168.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存