我正在尝试使用 libaio 访问块设备(例如 /dev/sdb)。我工作正常,但我想知道如何使用 libaio 的 API 执行 FUA(强制单元访问)。
我必须说我在该主题上找到的文档很差,希望你们中的一个能够帮助我。
我正在尝试使用 libaio 访问块设备(例如 /dev/sdb)。我工作正常,但我想知道如何使用 libaio 的 API 执行 FUA(强制单元访问)。
我必须说我在该主题上找到的文档很差,希望你们中的一个能够帮助我。
不幸的是,你不能。接口太有限了。但是你应该能够做的是使用SG_IO ioctl()
forSYNCHRONIZE 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(截至目前,版本 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