我試圖使用libaio訪問塊設備(比如/ dev/sdb)。 我工作正常,但我想知道如何使用libaio的API執行FUA(Force Unit Access)。在Linux上使用libaio發送FUA請求
我必須說我在這個主題上找到的文檔非常差,希望你們中的一個能夠幫助我。
我試圖使用libaio訪問塊設備(比如/ dev/sdb)。 我工作正常,但我想知道如何使用libaio的API執行FUA(Force Unit Access)。在Linux上使用libaio發送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(截至目前,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