linux 如何在使用FUSE时更改文件元数据的存储位置?

thtygnil  于 2023-06-21  发布在  Linux
关注(0)|答案(1)|浏览(195)

例如,我使用FUSE来构建自己的用户空间文件系统,其中小文件存储在SSD上,大文件存储在HDD上。我希望元数据(inode和dirents等)的硬盘上的文件存储在SSD上。我该怎么办?我对这个领域是新手。需要帮助!谢谢!

sgtfey8w

sgtfey8w1#

您可以做的一件事是镜像系统,其中所有目录结构都存在于两个磁盘上。所有的fuse函数在两个磁盘中做同样的事情(mkdir,open,unlink等)。
唯一的区别是I/O将只在慢速磁盘上完成。表示read()、write()、truncate()等
由于您希望快速读取属性,这意味着快速fuse getattr()和fuse readdir(),因此您希望避免访问慢速磁盘以获取文件大小。您可以在每次write()+close()和truncate()结束时,在匹配的SSD文件上设置一个扩展属性,其文件大小与HDD文件中的文件大小相同,用于getattr()和readdir()。
PS:
对于SSD中的假文件大小,一个更优雅的解决方案是以稀疏的方式将其分配到与硬盘上相同的大小。这样,虽然磁盘块的数量保持为零,但文件大小看起来是正确的。

相关问题