2015-11-17 227 views
1

我試圖使用libaio訪問塊設備(比如/ dev/sdb)。 我工作正常,但我想知道如何使用libaio的API執行FUA(Force Unit Access)。在Linux上使用libaio發送FUA請求

我必須說我在這個主題上找到的文檔非常差,希望你們中的一個能夠幫助我。

回答

1

不幸的是,你不能。界面太有限。但你應該能夠做的是使用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(截至目前,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