問題タブ [sata]

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.

0 投票する
1 に答える
1056 参照

delphi - Delphi - Windows での SATA IO ポート番号の列挙

あなたのための新しいもの。別のプログラマーが自分のプログラムを C# から Delphi に移植するのを手伝う準備をしています。私は本当にC#を読むことができず、この時点で彼が実際のソースを送ってくれなかったので、議論から、一度に1つの機能の観点からこれらのほとんどに取り組むつもりだと思います。

システムに接続されているすべての SATA デバイス (デバイスを意味すると思います) の IO ポート番号を取得できる必要があります。私はWMIがそれをしないことを知っているので、これをどこから始めるべきかわかりません. このアプリの C# バージョンは、基本的にレジストリを解析する C# クラスを使用していることを知っています。私はいつもレジストリから直接読み取ることにうんざりしていました。可能であれば、Windows API などから情報を取得する方が、Windows のバージョン間で信頼性が高いと思います。

0 投票する
3 に答える
2719 参照

windows - ATA コマンドの直接制御

私はハード ドライブの分析に取り組んでおり、Windows で ATA ハード ドライブを直接制御する方法があるかどうかを知りたいと思っていました。要するに、パケット スニファーのようなことをしたいのですが、ハード ドライブとの間で送受信される ATA コマンドに対してです。

あとはドライブに直接ATAコマンドを書き込めるようにしたいです。これが Windows で不可能な場合は、Linux が 2 番目の選択肢です。

3 番目の選択肢は、これらすべてを PC 制御下で行う FPGA を作成することです。

これが標準 API から可能かどうかについてのアイデアはありますか?

0 投票する
1 に答える
972 参照

c++ - SuSE Linuxでsataドライブの取り外しをプログラムで検出する方法は?

SATAハードドライブが取り外されたかどうかをプログラムで検出するために使用できる方法を知っている人はいますか? ドライブの取り外しを検出する必要がある場合、ファイル システムは読み取り専用モードでマウントされます。先日、ハードドライブを取り外すことができ、次にディスク上のファイルから読み取ろうとするまで、すべてが問題なく実行され続けていることに気付きました.

0 投票する
1 に答える
1670 参照

hard-drive - LBA レベルのディスク アクセス

ディスク コマンド (lba n から k ブロックを読み取るなど) を SATA ディスクに発行する最良の方法は何ですか? OSの選択は問いません。また、ATA コマンドを発行できる必要もあります。プログラムでioctlを使用するよりも、ツール/アプリケーションを介してこれを行う方がよいでしょう。

0 投票する
1 に答える
1201 参照

drive - Windows XP の SAS バスでの ATA PASS THROUGH DIRECT

SAS (SATA 接続 SCSI) バス上のドライブに「ATA パス スルー ダイレクト」コマンドを送信したいと考えています。ドライブは、Windows XP(x86) 環境では SATA ドライブです。ATA コマンドを STP に変換して SCSI バス経由で SATA ドライブに送信する STP (SATA Tunneled Protocol) レイヤーがあればいいのにと思いました。ただし、「ATA パス スルー ダイレクト」コマンドを Win32 API DeviceIOControl() に送信すると、ステータスは「関数が間違っています」というエラーを返します。STP レイヤーは Windows XP に存在しますか? Win32 API Readfile()/Writefile() が機能する必要があります。しかし、「ATA パス スルー ダイレクト」コマンドを取得して、SAS バスで Win32 API を操作するにはどうすればよいでしょうか?

0 投票する
2 に答える
2494 参照

linux - Debian Linux でドライブの存在を確認する方法

2台のeSATAドライブが接続されたDebian Linuxサーバーがあります(NTFS、bleh)。それらは現在正常にマウントされており、適切な fstab エントリが設定されています (/dev の場所ではなく UUID を使用)。

サーバーの起動時にマウントされないように、「noauto」マウントオプションを追加する必要があるという結論に達しました(サーバーが存在しないときにハングするのを防ぐためです。たまに遠足)。

ただし、システムの起動後に init スクリプトをセットアップしてマウントするにはどうすればよいですか? を実行することもできますがmount /mount/location、実行する前にそれらの存在を確認することをお勧めします (エラーがスローされるのを防ぐため)。/etc/init.d/また、このスクリプトを動作させるには、このスクリプトをディレクトリに投入する必要がありますか? (私はDebianにかなり慣れていません)

0 投票する
1 に答える
2649 参照

delphi - SATAドライブのハードディスクID

ソフトウェアにハードディスクIDを使用して、本物のユーザーがソフトウェアを使用しているかどうかを確認しています。IDEタイプのハードディスクの場合、GetIdeSerialNumberプロシージャを使用してIDを取得します。

ただし、SATAドライブの場合は、IDが空白になります。

次に、SATAドライブの場合、ボリュームIDを一意のIDとして使用しています。

ただし、システムがフォーマットされると、ボリュームIDは変更されます

ここで、使用しているハードドライブと、delphi 7でSATAドライブのハードディスクIDを取得する方法を知りたいですか?

編集:クライアントの仕様に応じたソフトウェアをハードウェアにロックする必要があります。関係するIDは次のとおりです。

  1. Macアドレス
  2. HD ID(SATAまたはIDE)
  3. コントローラID(これは、ソフトウェアが開発されたハードウェアを駆動するモーターであり、IDは一意です)

システムが変更された場合、クライアントは認証レイヤーが失敗することを認めましたが、ソフトウェアをハードウェアにロックするための準備が整っています。

SATAIDの取得方法を知りたかったのです

0 投票する
0 に答える
3354 参照

c - コードで SATA コントローラの PIO モードから DMA モードに切り替える方法は?

Windows 7 を実行しています。いくつかの SATA ドライブを実行するために、無人/自動テストを構築する必要があります。テスト要件の 1 つは、両方の状態 (有効と無効) で DMA を使用してドライブを実行することです。

この設定を手動で変更するには、次のようにします。


私が言ったように、私はこれを無人で行う必要があります。それをどのように行うことができるかについてのアイデアはありますか?ドライバー開発キットのデバイス インスタンスやセットアップなど、Windows デベロッパー センターの高低を検索しました。そこに関連するものは何も見つかりません。また、その仕事をする可能性のあるレジストリキーも検索しましたが、そこにも何も見つかりませんでした.

0 投票する
1 に答える
1750 参照

linux-kernel - I/OスケジューリングとLinuxカーネルページバッファリングのバイパス

私が達成しようとしていること:

ATAコマンドを送信するためのPATA/SATAハードディスクドライブ(HDD)(実際には、アクセスされたHDDのバイトを変更しないATAコマンドのみ-READ_SECTOR、IDENTIFY_DEVICE、SET_FEATURESなど)。

「排他的に」とは、HDDの電源がオンになるとすぐに(カスタムハードウェア-シンプルなオンオフスイッチであり、アプリケーションがロードされて必要になるまでHDDの電源がオンにならないようにする)、最初のそのHDDへのアクセスは私のアプリケーションだけです。私のアプリケーションを除くI​​OWは、Linuxカーネル(SCSIサブシステムを含む)や他のアプリケーションやプロセス、または人間のユーザーでさえ、アプリケーションが指示/許可しない限り、そのHDDにアクセスできません。

私のアプリケーションには別の要件があります。私たちのアプリではHDDへのアクセスが非常に重要であるため(パフォーマンスではなく制御の観点から)、実行されるトランザクションにI/Oスケジュールが関与することは望ましくありません。アプリケーション別(このHDDのパフォーマンスは制約ではありません)。また、HDDから読み取られたデータがカーネルバッファまたはページバッファによってバッファリングされることは望ましくありません。アプリケーションは、512バイトまたはその倍数のブロックサイズでのみ読み取ります。

今私が直面している問題は次のとおりです。

SCSIサブシステムは、I / Oスケジューラとカーネルバッファまたはページバッファキャッシュの下にあります(動作するように記述されています)。

'sg-driver'は、コマンドを直接送信するためにSCSIサブシステムによって提供されます(-Linux SCSIサブシステムコマンド。ATAまたはSCSIコマンドを直接送信するのではなく、libataによって実際のATAコマンドに変換されます。私はここにいますか?) HDDですが、これはI/Oアプローチです。i/pを指定してo/pを取得します。つまり、データ転送プロトコル(PIO、DMA、ATAステータス、エラーレジスタなど)のプロセスを制御できません。およびデバイス構成(Set Features ATAコマンドを使用)。

また、エラー報告メカニズムは適切である必要があり、LinuxSCSIサブシステムのエラーコードだけでなくATAプロトコルに固有のものである必要があります。IOWは、アプリケーションがPATA /SATAHDDのATAエラーレジスタとATAステータスレジスタにアクセスできる必要があります。

私のアプリケーションが要求するのは、HDDの排他的制御です。READ_SECTOR ATA cmdを発行し、I / Oポートの読み取りまたは「libata」を介してHDDからデータ自体を直接取得する場合は、上記の要件を満たす必要があります。

できないことは?

PATA / SATA HBAデバイスドライバーまたは市場で入手可能なすべてのHBAを作成するつもりはありません。これらは、libataのカーネルにすでに含まれているためです。

今まで学んだことは?

目的のタスクを実行するには、VFSレイヤーと直接対話するブロックデバイスドライバーを作成する必要がある場合があります(または、VFSをバイパスして、アプリがこのブロックドライバーと直接通信できるようにする方法はありますか?) )カーネルバッファまたはページバッファとI/Oスケジューラを含む/混乱させることはありません。このブロックドライバーはlibataと直接通信し(SCSIサブシステム上位層をバイパスします)、次にPATA /SATAHBAドライバーと通信します。

このようなドライバーをCPUアーキテクチャに依存しない方法で作成することは可能ですか?

それは実行可能なアプローチですか?はいの場合、アプリからアクセスされない接続されている他のHDDのI/Oパフォーマンスに影響します。この上。この場合、アプリケーションがブロックドライバーと通信するために、VFSを介してシステムコールを作成する(または可能であればバイパスする)必要がありますか?このアプローチについて教えてください。

または、ブロックデバイスドライバーがlibata用に作成されたPATA / SATA HBAドライバーと直接通信することは可能ですが、このアプローチは、アプリからアクセスされない接続された他のHDDのI/Oパフォーマンスに影響します。この上。また、アプリケーションはこのブロックデバイスドライバーとどのように通信しますか?

教えてください。

また、アプリケーションの同じシナリオについて知りたいのですが、1つの違いがあります。PATA/ SATAドライブの代わりに、SCSIハードドライブとそのバリアント(具体的には、SAS、ファイバーチャネル、およびUSB)がある場合はどうなりますか。そしてもちろん、今回はlibataコマンドとATAコマンドではなく、SCSIプロトコルコマンドを使用します。

PATA / SATA HBA libataドライバーを含むライブCDディストリビューションをアプリケーションホストとして提案しますか(-IDEサブシステムでは使用しないため、現在は減価しており、更新されない可能性があります) HBAドライバーの場合。)ほとんどのHBAの場合。

つまり、LinuxアプリケーションがPATA/SATAまたはSCSI/SAS/ファイバチャネルHDDにアクセスするための最も直接的な方法は何ですか。

私の質問に関して十分な情報を提供したことを願っていますが、さらに詳しい情報や説明が必要な場合は、お気軽にお問い合わせください。

Update1(2012年6月27日)
Chris(以下を参照)との有益な議論と私の調査により、次の結論に達しました。

  1. 既製のUSB-PATA/SATAアダプターは私の目的を解決しません。なぜなら、それは私のアプリを許可しないからです。または、データ転送モード(PIOとDMA)をオンザフライで変更するドライバーの場合、アプリは許可されません。またはATAレジスタを読み取るためのドライバ。

  2. カスタムメイドのUSB-PATA/SATAアダプターが役立つかもしれませんが、それにはATAプロトコルを実装する必要のある組み込みプロセッサーまたはATAプロトコル全体を実装するFPGAチップのいずれかが必要になります。しかし、組み込みプロセッサソリューションにはGPIOが含まれており、特殊なトランシーバーが必要になるためSATAには適していません。また、I / Oパフォーマンスは、PATAとSATAの両方で問題になります。私のアプリケーションには遅すぎます。

このようなアダプターは、私のlinux-kernelドライバー(またはlibusb経由)と私のアプリと通信します。私のアプリとの通信に役立つカスタムプロトコルによって。組み込みプロセッサ上のATAプロトコル。FPGAチップソリューションの場合、このプロトコルをATAプロトコルとともにFPGA自体に実装する必要があります。

しかし、現時点では、FPGAソリューションと組み込みプロセッサソリューションを実装することは、労力、時間、費用の面で実行不可能です。だから私はソフトウェアのみの解決策で立ち往生しています。

最後に、Chrisが言ったように、要件を満たすために、ハードウェアインターフェイスレイヤーまですべてを複製して変更する必要があるようです。

したがって、VFSレイヤーとHBAドライバーまたはlibataレイヤーの間で、正確にどのように進める必要がありますか。実装する必要があるものとそうでないものは何ですか?

誰かがこの問題に光を当てることができますか?何か案は??

Update2(2012年1月7日)
この問題に苦労しています。私を啓発することができる誰かがSOにいますか?

0 投票する
3 に答える
3115 参照

c# - 特定のディスクの SATA チャネルを特定するにはどうすればよいですか?

DISKPARTコマンド ライン ユーティリティを使用すると、「ロケーション パス」と呼ばれるものを取得できます。これは、必要なものを提供しているように見えdetail diskますdiskpart

この情報は、このクラスを介してプログラムで取得できるようです: MSFT_Disk

このクラスのインスタンスを取得する方法がわかりません。ManagementObjectSearcherforクラスを使用する例がいくつかありWMIますが、その方法は私にとってはうまくいきません。またMSFT_Disk、これは Windows 8 用であるとページに記載されているため、Windows 7 で が利用できるかどうかもわかりません。

SATA チャネル情報またはディスクの「ロケーション パス」を取得する良い方法を知っている人はいますか?