問題タブ [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.
linux - SCSI LUN ID の意味とその用途は?
Linux では、ioctl SCSI_IOCTL_GET_LUNID の LUN ID は何を意味しますか? そして、は何を意味しますか?それはどのように役立ちますか?
scsi - vSphere Client と ESX 4.1 での LUN ID とターゲット ID の不一致
私は SCSI とストレージにかなり慣れていません。アレイから ESX ホストに公開されている LUN はほとんどありません。ESX 4.1 で sg_map -x を実行すると、すべての LUN の LUN ID が 0 と表示されます。
[root@SRESX41 ~]# sg_map -x
/dev/sg0 4 0 0 0 0 /dev/sda
/dev/sg1 4 0 1 0 0 /dev/sdb
/dev/sg2 4 0 2 0 0 /dev/sdc
/dev/sg3 4 0 3 0 0 /dev/sdd
/dev/sg4 4 0 4 0 0 /dev/sde
/dev/sg5 4 0 5 0 0 /dev/sdf
/dev/sg6 4 0 6 0 0 /dev/sdg
/dev/sg7 4 0 7 0 0 /dev/sdh
/dev/sg8 4 0 8 0 0 /dev/sdi
/dev/sg9 4 0 9 0 0 /dev/sdj
/dev/sg10 4 0 10 0 0 /dev/sdk
/dev/sg11 4 0 11 0 0 /dev/sdl
/dev/sg12 4 0 12 0 0 /dev/sdm
/dev/sg13 4 0 13 0 0 /dev/sdn
/dev/sg14 4 0 14 0 0 /dev/sdo
/dev/sg15 4 0 15 0 0 /dev/sdp
/dev/sg16 4 0 16 0 0 /dev/sdq
/dev/sg17 0 0 0 0 0 /dev/sdr
/dev/sg18 4 0 17 0 0 /dev/sds
/dev/sg19 4 0 18 0 0 /dev/sdt
/dev/sg20 4 0 19 0 0 /dev/sdu
ただし、同じ LUN の LUN ID は、vSphere Client では異なって表示されます。添付の vSphere Client のスクリーンショットを見つけてください。なぜ不一致なのか、誰かが私にアイデアを提供できますか?
linux - SCSI Generic Interfaceを使用したSCSI読み取り(10)および書き込み(10)
SSDにscsiread (10)とwrite(10)を発行しようとしています。このサンプルコードをリファレンス/基本コードとして使用します。
これは私のscsiの読み取りです:
そしてこれは私のscsi書き込みです:
次の例では、
- scsi読み取り
- scsi書き込み
- scsi読み取り
そして、書き込まれたデータ(scsi書き込み)と読み取られたデータ(scsi読み取り)の16進ダンプを出力します。
3つのコマンドを再度実行した後Abcdefg
、最初の読み取りで読み取る必要があります。右?しかし、それらを再度実行しても何も変わりません。これで、使用するメモリには以前の関数のデータが残っていると想定できますがmemset(Readbuff,0,sizeof(Readbuff))
、発生する前に実行しても同じ結果が得られsys_read()
ます。
私が書き込もうとしているLBAはおそらく書き込みが禁止されていると思い、キャッシュを読み取りました。しかし、0x00〜0xFFのLBAアドレスを介して対話しても、何も変わりません。つまり、同じデータを読み取ります(Abcdefg
)。
scsiジェネリックインターフェイスを使用したscsi読み取りまたは書き込みの実装例を知っていますか?
windows - Windows 7 アプリケーションからの SPTI/SCSI 操作
ストレージ以外の SCSI デバイスと通信するための Windows ソフトウェアを更新する際のセキュリティ上の問題について、助けが必要です。
オリジナルのソフトウェアは Windows XP 用に DLL として書かれており、Adaptec の ASPI API を介してデバイスと通信していました。ASPI には実際にはセキュリティがありませんでした。そのため、任意のユーザーが実行する任意のアプリケーションが、私の DLL を使用してこれらのデバイスの 1 つと通信することができ、すべてがうまく機能しました。
現在、Microsoft の最新の SPTI (SCSI パススルー インターフェイス) API を使用して Windows 7 で動作するようにソフトウェアを更新しています。XP で SPTI を使用すると問題なく動作しますが、Windows 7 のセキュリティははるかに厳しく、通常のユーザーまたは管理者でさえ、SPTI 呼び出しは権限が不十分であることを示すエラーを返します。非表示の「管理者」アカウントを使用してログインすると、ソフトウェアは SPTI で正常に動作しますが、これは受け入れられる展開オプションではありません。
これまでに調べたいくつかの代替案を、既存のコードを書き直さなければならないレベルの低い順に示します。
- スレッドをスピンオフし、その特権をエスカレートして「管理者」のふりをして、SPTI と通信できるようにします。[LogonUser()/ImpersonateLoggedOnUser()/LoadUserProfile(); を使用してこれを機能させることができませんでした。LoadUserProfile() の呼び出しが失敗し、SPTI 呼び出しも同様に権限不足エラーで失敗します。]
- SPTI と通信するための適切なアクセス許可を持つ Windows サービスを作成し、DLL がそのサービスと通信するようにします。
- ユーザー空間 (UMDF) ドライバー。書き直しには費用がかかりますし、UMDF が SCSI デバイスへのアクセスをサポートしているかどうかもわかりません。
- カーネル (KMDF) ドライバー。動作するはずですが、より長く、より高価な書き直しになります。
ここのコミュニティが知恵/経験/アイデアを提供して、私のコードが Windows 7 でこの SCSI デバイスと通信できるようになることを願っています。
c++ - 仮想ディスク ドライバでシステムのシャットダウンを処理する
通常のファイルをストレージとして使用するWindows用の仮想ディスクドライバーを開発しています(Windows 7に付属のVHD仮想ディスクドライバーによく似ています)。
私の仮想ドライバーは書き込みをサポートしており、OS のシャットダウン時にフラッシュする必要があるキャッシュがあります。明らかな解決策は、SRB_FUNCTION_SHUTDOWN/SRB_FUNCTION_FLUSH
SCSI 要求を処理することです。
しかし、実際のディスク (ファイルが存在するディスク) が、仮想ドライバーの前にシャットダウン要求を受信した場合はどうなりますか? どうやらそれ以上の書き込み要求を受け付けなくなり、データをフラッシュできなくなります。
この問題の解決策はありますか? ありがとうございました
macos - ドライバーの親(または祖先)のプロパティを取得する
ベンダー固有のコマンドを実装するUSB接続のカスタムSCSIデバイス用のドライバーがあります。各USBデバイスは複数のSCSILUNをホストします。これは非常にうまく機能していますが、デバイスごとにSCSI LUNをグループ化する際に問題があります。IOSCSILogicalUnitNub
レベルが下がると(ドライバーが継承します)、LUNをリンクする識別機能がありません(SCSI論理ユニット番号があります。ただし、これらはすべての新しいデバイスで衝突します。すべてのユニットは0x0です)。
USBフィールド(または他の一意のキー)に従ってそれらすべてをリンクするようなことをしたいのですが、一致するSCSIドライバーlocationID
のみを指定して親USBデバイスを取得する方法がわかりません。io_service_t
これは、ドライバーではなくアプリケーション側で実行する方が適切です。アプリケーションは、どのサービスにどのLUNがあり、ハンドラーのどのインスタンスによって開かれたかを追跡する必要があるためです。
IOレジストリの階層は次のとおりです。
algorithm - 2 乗 32 要素への書き込みを追跡するためのスペース効率の良いアルゴリズム
これは、私が自分の仕事に出くわした要件の 1 つです。(2 べき乗 32) の連続した 4294967296 の整数がメモリ内の配列として割り当てられており、その機能は別のテーブルにマッピングを提供することです。一部のエントリは、他のエントリよりも頻繁に書き込まれます。ホット スポットを追跡し、おおよそのヒストグラムを提供します。問題は、これがファームウェアに実装される予定であり、メモリをあまり使用できないことです。
情報: マッピングは、ホストからターゲット (おそらくドライブまたはフラッシュ メモリ) の lba への scsi lba 用です。
ホット コールド情報を追跡するために必要なメタ データを処理するための 1 MB のスペースがあるとします。書き込まれているかどうかを示すビットマッピング以外に、これをどのように効率的に使用できますか。追跡に使用されるメモリの大きさに基づいて、収集するデータの精度を拡張し、数学的に拡張することができます。
linux - Linux scsi コマンド キュー
私はこのフォーラムの初心者です。現在、問題が発生しています。
私は Linux カーネル ドライバーの初心者で、現在、ブロック大容量記憶装置用の Linux SCSI デバイス ドライバーの開発に携わっています。開発プラットフォームは、Fedora 14 を搭載したハイエンド マシン上にあります。セットアップは、1 つのホストに対して 1 つの LU/デバイスです。簡単に言うと、ドライバーは問題なく初期化され、デバイスを検出してデバイスに scsi フレームを送信でき、デバイスの読み取りと書き込みができ、Iometer の安定した読み取りと書き込みができるという意味で動作しています。ドライバーを介してテストします。一度に 1 つの未処理のコマンドしかない場合 (キューイングなし)。
問題は、キューイングを機能させることができなかったことです。上位の SCSI レイヤーは、最初のコマンドでない限り、未処理のコマンドを複数 (LLD) 送信しませんscsi_done()
。処理のためにコマンドをデバイスに送信する前に、上位層がqueuecommand()
複数回呼び出すことができ、デバイスが応答のために私を中断しLLD
、コマンドをscsi_done()
. キューイングがなければ、速度は非常に遅くなります。
.can_queue を設定し、 と の両方で.cmd_per_lun
ターゲットの queue_depth に設定するなど、キューイングに関連していると思われる値を既に微調整しました。基本的に、1を含むさまざまな値で遊んでいますが、役に立ちませんでした。これが効果がある場合は、タグ付けも無効にして有効にしましたが、それでも変更はありません。これまでのところ、. 不足していて、ドライバーレベルでまだできることはありますか? Linux がコマンド キューイングをサポートしていないなんて信じられません。ここで何かが欠けています。 scsi_host
scsi_host_template
scsi_device
slave_configure
macos - IOSCSIBlockCommandsDevice.cppとその仲間はどこにいますか?
IOKitのSCSI部分に依存するドライバーを作成しています(私は10.6を使用していますが、これは10.7と10.8にも当てはまります)。また、カーネルフレームワークを使用してヘッダーをプロジェクトにリンクしています。のようなファイルのヘッダーは表示されますがIOSCSIBlockCommandsDevice.h
、対応する.cppファイルはどこにも見つかりません。ソフトウェアが何を達成しようとしているのかわからないので、悪い状態を終わらせる方法を理解するのに役立つので、私は探しています(ちなみにSCSIコマンド0x1B、0x03、0x00、0x03のループ)
私は10.6のopensource.appleディレクトリを調べ、 2009年(一致するヘッダーが変更された年)(日付スタンプ)とともにファイル名をグーグルで検索したところ、空白になりました。すべてのIOSCSIArchitectureModelFamily
ファイルがAppleWebサイトから欠落しているか、少なくとも非常によく隠されているようです。
これらの.cppファイルがどこに保存されているか知っている人はいますか?
java - Eclipse のすべての GUI プログラムで奇妙なエラーが発生する
私が GUI で書いたほぼすべてのプログラムでは、プログラムの実行が完了すると、これら 2 つのエラーが表示されます。ランダムに始まっただけで、このようにするために何もしなかったと思います。なにが問題ですか?