ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

使用块特殊文件/设备来实现文件系统

2019-06-06 21:38:28  阅读:229  来源: 互联网

标签:filesystems c-3 linux fuse block-device


我使用FUSE实现了basic filesystem,实现了所有可预见的POSIX功能[自然我甚至还没有进行过分析;)].目前我能够在常规文件(st_mode & S_IFREG)上运行文件系统,但开发的下一步是将其托管在实际的块设备上.按原样运行我的代码,在设备上调用fstat后立即读取st_size失败.当然我不希望问题停在那里:

>与常规文件相比,在块设备上运行需要进行哪些更改?
>在性能,限制,特殊功能等方面,我需要做些哪些特殊考虑?
>有没有处理块特殊文件的教程和参考?谷歌搜索已经变得非常有用;我只有背景知识(具有讽刺意味的是,在我黑暗的过去,来自MSDN)以及联机帮助页中的一些信息.

Update0

>我已经通过“常规文件”指出了我的意思.
>我不想专注于获取设备大小,我想要了解常规文件和设备文件之间在性能和使用方面的差异的一般指导原则.

解决方法:

Currently I’m able to run the
filesystem on a regularly file, but
the next step in development is to
host it on an actual block device

我不完全理解你的意思 – 我假设你说“你目前将文件系统数据保存到正常安装的文件系统上的普通文件中 – 但现在希望使用原始块设备进行数据存储”.

如果是这样 – 做了几次 – 我会建议如下:

>永远不要为文件系统使用“实际”块设备.始终使用分区.您可以使用几种很少使用的分区类型来表示这样的文件系统可能是您的文件系统类型,并且文件系统可以检查并安装它(如果是这样).因此,您将永远不会在“/ dev / sdb”之类的东西上运行,而是将数据存储在/ dev / sdb1之类的数据上,并为其分配一些分区类型.这具有明显的优势,例如允许您的文件系统作为另一个文件系统共存于单个物理磁盘上,等等.
>如果要在文件系统中实现任何缓存(例如Linux使用页面缓存),请使用O_DIRECT对块设备执行所有I / O操作.这要求您传递页面全部内存以执行所有I / O,并要求请求扇区/块对齐 – 但将删除数据副本,否则当数据从块设备移动到页面缓存时需要该数据副本,然后从页面缓存到用户空间[filesystem]阅读器.

fstat“失败”是什么意思?这是一个尝试确定块设备长度的fstat?你收到错误了吗?它是什么?

标签:filesystems,c-3,linux,fuse,block-device
来源: https://codeday.me/bug/20190606/1189944.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有