1

libaio を使用してブロック デバイス (/dev/sdb など) にアクセスしようとしています。私は正常に動作しますが、libaio の API を使用して FUA (Force Unit Access) を実行する方法を知りたいと思っていました。

この件に関して私が見つけたドキュメントは非常に貧弱であると言わざるを得ません。

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 Generic HOWTO を参照してください: http://sg.danny.cz/sg/p/sg_v3_ho.html

于 2015-11-18T23:05:24.760 に答える