在 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
我正在尝试使用 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