READ DMA EXT
最大セクタ数に違反し(要するに)、すべての可能なOSキャッシュ、バッファリング、並べ替えなどをバイパスするには、RAW ATA要求を直接ハードドライブ(0x25、)に転送する必要があります。
HDIO_DRIVE_TASKFILE
.IOCTL は使用できなくなりましたlibata
。
SG_IO
ATAパススルー(()を使用してIOCTLを使用して目標を達成しましたSG_ATA_16
。1つの問題を除いて完全に機能します。1つのコマンドで最大8192個のセクタを読み取ることができます。必要合計32767個のセクターを読みました。
- 最大ハードウェアセクタ数(KB)32767なので、ドライブはサポートする乗り継ぎが多すぎて
- 最大セクタ数(KB)低いけど32767セクターまで上げても役に立たない
- スケジューラに設定されていますヌープ、お金を保ってください。
- バッファを収集しようとしましたが(連続バッファスライスに
iovec_count>0
正しく設定されていますiovecs
)、変更はありません。
環境:標準カーネルを含むUbuntu 16.04/16.10/17.04/17.10、Intelチップセットの標準AHCIインターフェイスに接続されたSATAドライブ。
私が何をしても、8193セクターからIOCTLは通過します」無効な引数「エラー(EINVAL
正確にはerrnoを含む)です。他のコンピュータでは、実行ごとに少しずつ異なり(再起動は不要)、通常最大1344セクタに固定されます。
どこで見ることができますか?データ転送制限の原因は何ですか?