强制阻止设备(NBD)绕过缓冲区caching

我想知道是否有办法强制一个块设备绕过Linux缓冲区caching(即直接IO),并将请求直接传递给底层。 我知道可以使用O_DIRECT标志打开文件来实现这一点,但我的程序不是块设备的用户,文件系统是。 到目前为止,我还没有任何运气告诉各种FS使用直接IO。

总之,我需要裸设备的function,而不使用原始设备(因为它们在我的发行版,Fedora中已被弃用)。

如果这很重要,我的块设备是一个networking块设备。 任何帮助,将不胜感激。

您可以通过使用同步选项进行安装来实现此目的。

mount(8) -man页面:

  sync All I/O to the filesystem should be done synchronously. In case of media with limited number of write cycles (eg some flash drives) "sync" may cause life-cycle shortening. 

我不认为有可能没有使用O_DIRECT或裸设备直接I / O。 在挂载上使用同步选项也不会绕过缓冲区caching。

因为你不能从文件系统中设置它,你必须修改你的程序来使用O_DIRECT或mmap()和madvise()来获得类似的行为。

“我知道可以使用O_DIRECT标志来打开一个文件来实现这一点,但是我的程序不是块设备的用户,而是一个文件系统。

不要担心你的程序不是用户,O_DIRECT适用于open(),反正它是基于文件的。