1

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

我必须说我在该主题上找到的文档很差,希望你们中的一个能够帮助我。

4

1 回答 1

1

不幸的是,你不能。接口太有限了。但是你应该能够做的是使用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

于 2015-11-18T23:05:24.760 回答