問題タブ [scsi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
driver - 64ビットのCreateFileを介したドライバーとの通信に失敗する
私はSCSIドライバーの開発者です。
CreateFileを介してドライバーからデータを取得するユーザースペースプログラムを作成します。
32ビットWindows環境でテストする場合は問題なく動作しますが、64ビットでは次のエラーが表示されます。
CreateFileは-1を返します。GetLastError()は2を返します。(ERROR_FILE_NOT_FOUND)
IoCreateSymbolicLink
ドライバが初期化されるときに呼び出しましたが、windbgを使用してデバッグ出力を表示すると成功を返します。
誰かがこの種の問題に遭遇しましたか?
c++ - ntddscsi.h でコンパイル エラーが発生する
次のインクルードで少し問題があります:
#include <ntddscsi.h>
(NetBean 7.1 & Cygwin C++ コンパイラを使用して) コンパイルすると、使用する前に「SCSI_PASS_THROUGH」を定義する必要があると言われました... ntddscsi.h で、ただし、それは次のように定義されています。
いったい何が間違っているのか、誰にも分かりますか??
windows - Windowsでc/c++を使用してデバイスからバイトを読み取る方法
これが背景です:
生データを含むメディアを備えたこのSCSIデバイスがあります(簡単にするために、abc123が含まれているとしましょう)。このデバイスはWindowsマシン上にあります。C / C ++を使用してデバイスを初期化し、開いて、SCSI読み取りコマンドをデバイスに送信し、最終的にバイトを「読み取り」たいと思います。
同様のトピックを検索しましたが、Linux / Unixガイド、またはVisual C ++(アクセスできません)を入手し続けています。
誰かがこれを始める良い方法を知っていますか?たぶん、いくつかのサンプルコードまたは誰かがチュートリアルを置いているかもしれません;-)
前もって感謝します!
編集:私はCygwinを使用しています。
linux - Linux: 書き込みは 512K のチャンクに分割されます
大きな SCSI 書き込みを生成するユーザー空間アプリケーションがあります (詳細は後述)。しかし、SCSI ターゲット (つまり、FC によって接続されたストレージ) に到達する SCSI コマンドを見ると、これらの書き込みが 512K のチャンクに分割されています。
アプリケーションは基本的に、デバイスに直接 1M サイズの直接書き込みを行います。
このコードにより、それぞれ 512K の 2 つの SCSI WRITE が送信されます。
ただし、ブロック層なしで直接 SCSI コマンドを発行すると、書き込みは分割されません。コマンドラインから次のコマンドを発行します。
1M サイズの SCSI WRITE が 1 つ確認できます。
問題は、何が書き込みを分割しているのか、さらに重要なことに、それは構成可能かということです。Linux のブロック層は (SG_IO が通過しないため) 有罪のようであり、512K はあまりにも恣意的な数値であり、何らかの構成可能なパラメーターではないようです。
linux - Linux 2.6.33.20 カーネル ソースで SCSI タイムアウトが作成/設定されている場所を探しています
古いバージョンのカーネル (2.6.25.8) では、関数 scsi_add_timer および scsi_delete_timer の drivers/scsi/scsi_error.c にありました: http://www.cs.fsu.edu/~baker/devices/lxr/http/ソース/linux/drivers/scsi/scsi_error.c?v=2.6.25.8
私は 2.6.33.20 カーネルの scsi_error.c に似たようなものを見つけることができないようです。(grep を使用して時間を検索して) 他のファイルを調べたところ、タイムアウトについて言及されていましたが、タイマーのタイムアウト値を再設定します。
しばらくの間、これについて頭を悩ませてきました。
ありがとう!
networking - iSCSIデータ転送パケットのオーバーヘッド
この質問は確かにiSCSIパケットヘッダーと重複していますが、私のより具体的な質問に対して提供されているものよりも具体的な回答を期待しています。
質問:読み取りまたは書き込みへのデータの転送で、iSCSIおよびSCSIによってどのくらいのオーバーヘッドが発生しますか?
これはデータ入力およびデータ出力トランスポートパケットで行われ、TCP / IPおよびイーサネットからのオーバーヘッドがあることを理解していますが、iSCSI / SCSIにはどのような追加のオーバーヘッドが必要ですか?SCSIプロトコルデータユニット(PDU)が何らかのアルゴリズムによってTCPデータグラムにパックされていることは認識していますが、そのアルゴリズムがわかりません。
イニシエーターとターゲットの間で発生する必要のある完全な会話があることを認識しており、その部分は無視します。したがって、読み取りまたは書き込みコマンドの後に送信されるデータパケットについてのみ知りたいのです。
storage - SCSI 照会コマンド
私は SCSI と SCST の初心者です。SCSI 照会コマンドに新しいページ コードを導入しようとしています。そのため、最初にページ コード 0x00 を使用して、サポートされているページのリストを要求しています。そのため、SCST コードでは、応答の長さとサポートされるページ コードについて言及しました。私はprintkステートメントを保持し、scst_vdisk.cファイルを介して送信するときに同じことを確認しましたが、問題ありませんでした。しかし、SCSI 側からチェックしていたときに、既存のエントリが正常に機能していたため、新しい値のエントリがゼロになっていました。問題を解読しようとしましたが、正しく続行できませんでした。
アダプターレイヤーまたは(通常、これらのチェックが存在する場所)で値をブロックするフィルターはありますか、または問題を解決する方法を教えてください。
linux - sys_write() 中に read SCSI コマンドがあるのはなぜですか
sys_write
SCSI デバイス上の がどのように機能するかを理解したいです。したがって、簡単なテスト プログラムをissue
作成し、デバイス ドライバーの関数にデバッグprintk()
を追加して、ata_queued_cmd->scsicmd->cmnd
.
では/var/log/messages
、次の発行されたコマンドを確認できます。
書き込みたい 512 バイトがブロックサイズである必要があります。これは私がこの値を取得する方法です:
データが電源障害に安全に書き込まれていることは、私にとって非常に重要です。それが私が帰りを待ちたい理由ですO_SYNC
。今、私はいくつかの質問があります:
READ
の前にがあるのはなぜWRITE
ですか?SYNCHRONIZE CACHE
データがドライブの内部キャッシュにある場合、保証されますか? または、安全な書き込みを行うためにできることは他にありますか?
どうもありがとうございました :)
python - SCSA論理バイトアンダースコア?
SCSAコマンドからのLBU用に45バイトがあります。
0、0、4、8、0、0、0
私はこれをPythonの64ビットuuintLBUに派生させようとしています:
これは正しいです?そうでないかもしれない...
ありがとう
linux - カーネル モジュールの SSD に scsi 書き込みコマンドを送信する方法
SSDにできるだけ速く書き込もうとします。データが電源障害に対して安全に書き込まれるかどうかを知る必要があるため、同期書き込みを行うことは非常に重要です。
Linux カーネル ブロック IO スタック (このユースケースでは必要ありません) のほとんどを回避するために、scsi コマンドを自分で送信することを考えました。カーネルの開始/終了のオーバーヘッドを回避するには、カーネル モジュールにする必要があります。
- scsi 書き込みをデバイスに送信する方法の例を知っていますか?
- これをどのように実装しますか?
- または、なぜ SCSI レイヤーが間違ったエントリポイントなのですか?