在 Linux 上使用 libaio 发送 FUA 请求

Sending FUA requests using libaio on Linux

我正在尝试使用 libaio 访问块设备(比如 /dev/sdb)。 我工作正常,但我想知道如何使用 libaio 的 API 执行 FUA(强制单元访问)。

我必须说我找到的关于这个主题的文档很差,希望你们中的一位能够帮助我。

很遗憾,你不能。界面太局限了。但是您应该能够做的是将 SG_IO ioctl() 用于 SYNCHRONIZE CACHE (10)(16)。也就是说,如果您的设备支持该命令。 SYNCHRONIZE CACHE 允许您指示设备将一系列逻辑块提交到介质。

请参阅 sg_sync 命令的联机帮助页:http://manpages.ubuntu.com/manpages/trusty/man8/sg_sync.8.html

并在此处下载最新的 sg3_utils 源代码:http://sg.danny.cz/sg/sg3_utils.html (as of now, version 1.41 http://sg.danny.cz/sg/p/sg3_utils-1.41.tar.xz)。查看 sg_sync 命令源以了解如何调用 ioctl。

ioctl(SG_IO) 块,但有一种方法可以使用非阻塞 I/O 处理这些命令。请参阅 SCSI 通用 HOWTO:http://sg.danny.cz/sg/p/sg_v3_ho.html