我不确定我应该谷歌搜索什么,或者 FUSE 是否这样做(我怀疑不是)。我想创建一个虚拟块设备,所有形式的访问(例如读取和写入)都直接进入我的应用程序。
我知道我可以通过以下方式创建一个用作块设备的文件
dd if=/dev/zero of=~/test count=100k
然后使用创建一个环回它
losetup /dev/loop0 ~/test`
但我希望访问直接访问我的应用程序而不是文件。我希望这个问题是相当清楚的。
答案1
您可以使用 NBD。使用NBD套件你甚至可以在其中写入虚拟块设备外壳脚本或其他脚本语言(尽管如果您想要最佳性能,请坚持使用 C)。 我在 FOSDEM 2019 上做了关于这个主题的演讲我在那里做了一个现场演示,用 shell 脚本编写 Linux 内核块设备。
答案2
正如评论中提到的,可能的方法之一是 NBD。总线可能会帮助你开始这样做。它实际上使用 Unix 套接字,因此它应该具有相当的性能。
答案3
你不是在找吗mmap()
?
但是,我不确定mmap
如果没有实际文件支持它,您会怎么做,但是您可能有一个任意大的、归零的文件(请参阅falocate
、truncate
)并且mmap()
带有 flag MAP_PRIVATE
,因此对它的写入仅对您的应用程序可见,并且不保存到磁盘。