Pythonからの直接ディスクアクセス(simhdd)

画像






こんにちは、同僚。 最初の記事を書いてからかなりの時間が経ちました。 この間、私のディスクアクセスライブラリは、組み込みのSMARTテストとそのログ、および最新のドライブのセキュリティメカニズムの使用方法を学びました。



今回は、このライブラリに基づいてハードドライブをテストするためのアプリケーションの作成について説明します。



ホットスワップバスケットを備えたサーバー上で実行し、そのディスクをテストして、テストに合格したディスクを交換できるアプリケーションが必要でした。 このための最善の解決策は、各ディスクを個別のスレッドでテストするプロセスを開始するように思えました。 Pythonでマルチスレッドプログラミングの経験がなかったため、問題の調査を開始しました。 Pythonでマルチスレッドアプリケーションを作成するには、スレッドモジュールがあります。 スレッドは同じプロセス内で作成されるため、共有データへのアクセスに問題はありません。 すべてが非常にシンプルに見えます。 残念ながら、問題が待っていました。 ライブラリがマルチスレッドモードで動作することを拒否しました。 したがって、私の道は、複数のプロセスとプロセス間通信のすべての楽しみを備えたアプリケーションを書くことにありました。 このために、Pythonにマルチプロセッシングモジュールがあります。



アプリケーションのアーキテクチャは次のように見えました。メインスレッドはユーザーインタラクションを処理します。 ドライブをリストし、コマンドを受け入れ、テストの進行状況を表示します。 各ディスクコマンドは、個別のプロセスで実行されます。 メニューでコマンドが与えられた特定のドライブでテストが実行されることを確認するために(たとえば、ディスクをランダムに再配置し、プログラムでの再読み込みを忘れることができます)、ディスクのシリアル番号がコマンドを実行するためのキーになります。 コマンドを実行する前に、起動時にコマンドに送信されたシリアル番号と、接続されたドライブのシリアル番号との対応が確認されます。 番号が一致しない場合、コマンドは音声信号で拒否されます。 SMARTを監視するために接続されたドライブで誤って破壊テストを実行しない便利な機能。



メインプロセスとテストプロセスの間でデータを交換するために、いくつかの辞書が作成されています。 辞書キーは、ディスクのシリアル番号です。 辞書のパックという形のソリューションはあまり好きではありませんが、私はまだ最高のものを思いつきませんでした。



画像

メインプログラムウィンドウは次のようになります。



プログラム内の各ディスクには、それが配置されているモードがあります。 デフォルトでは、これはアイドルアイドルモードです。 テストが開始されると、このモードは実行中のテストの名前に変わります。 テストプロセスは、モードがその名前と一致するかどうかを定期的にチェックし、一致しない場合はテストを終了します。 したがって、メインモードは、ドライブモードをアイドルに変更することでテストを中断できます。 プログラムは、組み込みのSMARTテスト(ショートおよび拡張)をディスク上で実行し、シーケンシャルな読み取りと書き込みによってディスクをチェックできます。 同時に、記録テストは周期的に行われ、ディスクが何度も処方され、実行されたサイクル数が記録されます。 連続サイクリック録音により、表面が「崩れている」が、サプライヤに返送するのに必要なエラー数がまだ記録されていないディスクを「仕上げる」ことができます。 このモードで数日間、通常、SMARTステータスが不良のステータスになります。これが交換の理由です。 画面には、テスト中、テストの速度(可能な場合)、ディスクエラーの数、および「低速」セクターの数が表示されます。 セクターが「遅い」と見なされるまでの時間は、プログラムの定数によって設定されます。 このプログラムは、ディスク、SMART、およびSMARTテストのログに関する基本情報も表示できます。



画像



書き込みテストでは、ゼロ値と一意のパターンの両方でディスクを登録できます。これにより、ディスクがこのプログラムですでにテストされていることがわかります。 記録方法も定数によって切り替えられます。 プログラムはネットワーク経由でテスト環境をロードするように設計されているため、メニューでプログラムの終了を無効にすることができます。



ここにそのようなユーティリティがあります。おそらく誰かが役に立つでしょう。 ユーティリティとそれが構築されているライブラリのコードは、githubで入手できます。



All Articles