libaio を使用してブロック デバイス (/dev/sdb など) にアクセスしようとしています。私は正常に動作しますが、libaio の API を使用して FUA (Force Unit Access) を実行する方法を知りたいと思っていました。
この件に関して私が見つけたドキュメントは非常に貧弱であると言わざるを得ません。
libaio を使用してブロック デバイス (/dev/sdb など) にアクセスしようとしています。私は正常に動作しますが、libaio の API を使用して FUA (Force Unit Access) を実行する方法を知りたいと思っていました。
この件に関して私が見つけたドキュメントは非常に貧弱であると言わざるを得ません。
残念ながらできません。インターフェースが狭すぎる。しかし、できるべきことは、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 Generic HOWTO を参照してください: http://sg.danny.cz/sg/p/sg_v3_ho.html