虚拟块设备

虚拟块设备

我不确定我应该谷歌搜索什么,或者 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如果没有实际文件支持它,您会怎么做,但是您可能有一个任意大的、归零的文件(请参阅falocatetruncate)并且mmap()带有 flag MAP_PRIVATE,因此对它的写入仅对您的应用程序可见,并且不保存到磁盘。

相关内容