我使用FUSE实现了basic filesystem,实现了所有可预见的POSIX功能[自然我甚至还没有进行过分析;)]。目前我能够在常规文件(st_mode & S_IFREG)
上运行文件系统,但开发的下一步是将其托管在实际的块设备上。按原样运行我的代码,在设备上调用fstat
后立即无法读取st_size
。当然,我不认为问题会在那里停止:
答案 0 :(得分:4)
目前我可以运行了 文件系统在常规文件上,但是 开发的下一步是 将其托管在实际的块设备上
我不完全理解你的意思 - 我假设你说“你目前将文件系统数据保存到正常安装的文件系统上的普通文件中 - 但现在希望使用原始块设备进行数据存储”
如果是这样 - 做了几次 - 我会建议如下:
fstat“失败”是什么意思?这是一个尝试确定块设备长度的fstat?你收到错误了吗?它是什么?
答案 1 :(得分:2)
块设备的行为与文件非常相似 - 像dd这样的工具可以对它们进行操作而无需任何特殊处理。但是,fstat返回有关特殊文件节点的信息,而不是它引用的blockdev。你可能想用BLKGETSIZE64 ioctl读取大小。
没有特别的理由在原始设备上使用分区,但是blockdev是一个blockdev。假设您的工作负载不会产生重复访问,O_DIRECT也很好。不要将它与确保文件系统的持久性和原子性的真实协议混淆(fsync,barrier等)。