マニュアル本プログラムは開発途中のベータ版です。評価、実験には自由に利用してくださって構いませんが、転載・再配布は行なわないでください。このドキュメントも推敲が不十分で内容が間違っている箇所があるかもしれませんが、ご容赦願います。ToolsはハードディスクのS.M.A.R.T.情報を記録・分析・管理するソフトウェアです。S.M.A.R.T.情報を登録・分析・管理するSDBサーバの2つのプログラムを中心に動作します。複数のパソコンのS.M.A.R.T.情報を一括して管理でき、情報の閲覧・表示はWebブラウザから行えます。2000/XP用とLinux(*1)用を用意しています。PostgreSQL(データベース)、PHP(スクリプト言語)といったソフトウェアが必要です。ToolsのS.M.A.R.T.監視は秒単位、あいるは分単位以下の頻繁な監視には向いていません。ネットワークやサーバの負荷が大きくなります。SDBクライアントのS.M.A.R.T.データ収集は、5分から1時間程度の間隔が適当です。収集データが大量にあると解析に時間がかかります。1時間間隔のデータ収集でも十分役立ちます。ロングモードは1日1回程度の実行を想定しています。Linux用バイナリ(実行プログラムは)は収録していません。ソースコードからコンパイルしてください。ToolsはWindwos用はsdb-0.99a01-win.zipとして配布しています。zipファイルを展開すると、次のファイル・ディレクトリをsdb-0.99a01ディレクトリが得られます。Linux用はsdb-0.99a01-linux.tgzとして配布しています。内容はWindows用とほぼ同じですが、Linuxでは不要なrelaseディレクトリは収録していません。64ビット・エディションのWindowsでは動作確認していません。S.M.A.R.T.対応ハードディスク及びインターフェースパラレル/シリアルATA等に接続したATA/IDEハードディスクが必要です。IEEE1394/SCSI/USB等に接続したハードディスクや、RAIDを構成していると利用できないことがあります。Apache動作確認はバージョン2.0.55で行いました。PHPが動作するならバージョンは特に問いません。PostgreSQL動作確認はバージョン8.1.3で行いましたが、7.2移行ならバージョンは問いません。PHP動作確認はバージョン4.4.1で行いました。Apacheから利用しますが、設定・管理にCGI版も必要です。Linux用はソースコードからコンパイルするために開発ツール(gcc,make等)が必要です。ついてこのプログラムの著作権は作者が保持しています。以下の条件に従って自由に使用してください。著作権表示を変更しないこと。このプログラムを使用したことによって生じた損害はまったく保証しない。作者はこのプログラムに不備があっても、それを訂正する義務を負わない。taro.kobayashi@nifty.comまで、願いします。電子メールでのお問い合わせは返事が遅れたり、あるいは返信のメールが行かないこともありますので、ご了承ください。開発途中のベータ版につき転載・再配布は禁止します。説明・表記についてコマンドプロンプトやコンソールでの実行例は次のように掲載しています。194:word0↓(省略)黄色の下線部分がユーザが入力した内容を表しています。表示の上では、複数行にわたっていても実際には改行せずに1行で入力してください。複数行として表示されている箇所ではスペース(空白)があるので、注意してください。入力部の最後に表示している水色の下矢印は、[Enter]キーを押すことを意味しています。この操作でコマンドが実行されます。Settings\user)は、環境によって内容は異なります。コマンドの実行結果や表示内容は省略することがあります。設定ファイルsdb.defの内容を示す場合は、次のように掲載しています。画面サイズや表示の都合上、複数行に渡っていることがありますが、グレーの下矢印マークまでが1行です。赤色の部分は説明のために示しています。動作上は入力する必要はありませんが、コメントとして残してもかまいません。設定ファイルの中では「//」移行はコメントとなります。ケジュールに登録となります。マニュアル(→quickstart.htm)で説明していますので、そちらを参照してください。公開SDBサーバを利用すれば、ユーザはSDBサーバをセットアップする必要はありません(ただし、公開SDBサーバは負荷低減のため限定した機能しか提供していません)。マニュアルの内容と重複する部分もありますが、ここでは全般的なセットアップ手順を紹介します。次のファイルを適当なフォルダにコピーしてください。以後の説明では<c:\sdb\bin>フォルダにインストールしたとして説明します。libpq.dllは必要ありませんが、バージョンの違いもあるのでコピーしておくことをお勧めします。S.M.A.R.T.情報の確認まずはハードディスクのS.M.A.R.T.情報が取得・表示できるか確認します。これが正常に動作しないことにはSDBクライアントは利用できません。コマンドプロンプトの実行[スタート]メニューから「プログラム」→「アクセサリ」→「コマンドプロンプト」を選択して、コマンドプロンプトを実行、開いてください。コマンドプロンプトが開いたら、SDBクライアントをインストールしたフォルダに移動します。showコマンドを実行して、ハードディスクのS.M.A.R.T.情報が表示できるか確認します。13実行例のようにS.M.A.R.T.情報が表示されれば成功です。error!」と表示されかもしれませんが、接続するデータベースを設定していない状態ではこれで正常です。S.M.A.R.T.情報が表示されない場合はBIOSの設定を確認したり、--devオプションでデバイスを直接指定してください。0番)から順番に探しますが、デバイスが存在しないと検索をやめます。ほとんど場合、ドライブは0番から連続していますが、プラグ&プレイ等で取り外し可能なドライブを使用していると途中の番号が抜けていることがあります。disk4」を指定するなど、手動でドライブを指定してください。S.M.A.R.T.情報が表示できない場合、SDBクライアントは利用はできません。Valueの表示形式を指定したほうが良いことがあます。Valueに最大・最小値や平均値といった複数の情報が含まれていることがあります。Temperatureがこれにあたります。Valueは158,915,035,170と温度としてもありえない数値を示しています。194:divword」オプションを指定すると、3つの値に分解して表示してくれます。3つに分解すると正しい値を表示します。--smart_attrオプションを指定するには、--devオプションも合わせて必要なので、次のように指定します。Toolsを使うためには環境に合わせてsdb.defファイルを編集しておく必要があります。Valueを正しく表示するのに毎回--smart_attrオプションを指定するのは大変です。いう場合は、sdb.defファイルに登録しておくとパラメータの指定を省略できます。メモ帳などのテキストエディタでインストールしたsdb.defファイルを開いてください。先ほどの操作の続きで、コマンドプロンプトからメモ帳を開いてsdb.defを編集する場合は次のように入力してください。sdb.def↓sdb.defファイルの内容は次のようになっています。//[23]↓};↓LAN/イントラネット環境でデータベースに直接接続する場合は[1]〜[5]をSDBサーバに合わせて正しく設定しておく必要があります。インターネット経由のHTTPモードで使用するには[3]〜[5]のデータベースのユーザ名/パスワード/データベース名と、[9]〜[8]のHTTPサーバのアドレス/ポート/パスの設定が必要です。公開SDBサーバを利用する場合は、このサンプルのままでかまいません。[9]はSDBサーバにS.M.A.R.T.情報が記録できなかった場合に、データを保存するためのディレクトリです。Valueの調整で--smart_attrオプションを使いたい場合は、sdb.defファイルの中に指定しておくことができます。}」という形式で追加します。複数のハードディスクがある場合、[23]のように続けて何台でも指定できます。モデル名やシリアルは正確に入力してください。1文字でも間違うと、正しく動作しないので、コマンドプロンプトの表示内容からコピーして貼り付け(ペースト)することをお勧めします。編集が終わったらsdb.defを保存してください。addコマンドを実行してデバイスをSDBサーバに登録します。showコマンドと同じように、--devオプションを省略するとdisk0から順番に処理しますが、なるべく--devオプションでドライブを指定してください。マニュアル(→quickstart.htm)で説明していますので、そちらを参照してください。ここでは、LAN/イントラネット環境でデータベースに直接接続して使用する場合を例に説明します。確認のダイアログが表示されたら、[はい]ボタンをクリックしてください。updateコマンドを実行して、動作確認を行います。updateを実行すると、SDBサーバのデータベースにS.M.A.R.T.情報が記録されます。updateコマンドはランダムに待ち時間が入ります。動作が停止したような状態になりますが、そのまま待ってください。待ち時間は初期設定のままなら最大30秒です。連続して何度も実行すると、そのつどデータが記録されるので注意してください。updateを実行するとSDBサーバにS.M.A.R.T.記録できるので、後はこれを定期的に繰り返し実行します。sdbctlコマンドはコマンドプロンプト用のプログラムで、実行すると必ずコマンドプロンプトが開いてデスクトップ環境では邪魔なことがあります。このため、S.M.A.R.T.情報の記録・更新には専用のプログラムsdbtask.exeを使います。スケジュールに登録して、繰り返し実行するようにします。マニュアル(→quickstart.htm)に詳しく説明しているので、そちらを参照してください。マニュアルは公開SDBサーバの使用が前提で--httpオプションを指定していますが、LAN/イントラネット環境でデータベースに直接接続して使用する場合は、--httpオプションは不要です。5分〜1時間くらいの間隔で実行するように設定しておけば十分かと思います。5〜10分とか実行間隔が短いほうが、異常をすぐに検出できますが、故障予測には間隔の長短は重要ではありません。故障予測には長期間(数週間以上)継続してデータを記録・蓄積することが重要となります。スケジュールに登録したアイテムを削除して、インストールしたフォルダ(c:\sdb\bin等)を削除してください。SDBクライアントのインストールLinux用バイナリ(実行ファイル)は収録していないので、ソースコードからコンパイルしてください。コンパイルするにはPostgreSQLのソースコードも必要です。installの手順でコンパイル、インストールしてください。configureでは、--with-pgsrcオプションでPostgreSQLソースコードのディレクトリを指定してください。installはrootで行ってください。標準では/usr/local/sdbディレクトリにインストールします。ディレクトリを変更する場合はconfigureに--prefixオプションを指定してください。installの手順でコンパイル、インストールしてください。Linux用の設定ファイルはサンプルをsample/sdb-linux.defとして収録していますので、これをsdb.defというファイル名で/usr/local/sdb/etcにsdb.defに格納してください。sdb.defファイルの内容は各自の環境に合わせて変更してください。設定、運用方法はWindowsとほぼ同じですので、Windows版SDBクライアントの説明を参照してください。/dev/hda」のようにデバイスファイルを指定します。S.M.A.R.T.情報の記録・更新はsdbctlコマンドをcronを使って5分から1時間程度の間隔で実行してください。SDBクライアントの削除(アンインストール)cronに登録したプログラムを削除して、インストールしたフォルダ(/usr/local/sdb等)を削除してください。Toolsを使う際、以下のプログラム/ソフトウェアをそろえておくと便利かと思います。Program以下のWebページからダウンロードして入手できます。http://www.runser.jp/softlib.htmlDevTestはコマンドプロンプト用のプログラムですが、ハードディスク、CD/DVDドライブ等の様々なドライブ情報を表示できます。disk」として実行すれば、sdbctlに指定できる物理ドライブ番号(disk0等)が表示されます。ドライブの指定セクタのデータ内容をダンプ表示して確認することもできます。0」とするとCドライブのMBR(マスターブートレコード)の内容が表示されます。区切られた選択肢のうち、いずれか1つを選択できる。繰り返し指定できるパラメータ。特定の書式をもつパラメータ。sdbctlsdbctlコマンドはSDBクライアント、SDBサーバの双方で使用するコマンドライン用プログラムです。ハードディスクのS.M.A.R.T.情報を取得してSDBサーバに記録する機能と、SDBサーバのデータベースをメンテナンス・操作する機能が備わっています。{show|createdb|dropdb|add|delete|load|update}必須のパラメータで、次のいずれか1つを指定します。updateデータベースの接続先をIPドレスかホスト名で指定します。updateデータベースの名前を指定します。updateデータベース接続時のパスワードを指定します。updateデータベースのポート番号を指定します。updateデータベースに接続するユーザ名を指定します。update各コマンドの操作対象となるデバイスを指定します。Windows版ではdisk0、disk1といった物理ドライブ番号で指定します。--devオプションの指定がない場合はdisk0から順番に検索します。Linux版では/dev/hda、/dev/hdbといったデバイスファイルで指定します。--devオプションは複数指定できます。updateデバイス情報に記録する、パソコングループ名を指定します。このグループ名はユーザが自由に決めることができます。updateデバイス情報に記録する、パソコンのホスト名を指定します。このホスト名はユーザが自由に決めることができます。updateデバイス情報に記録する、テスキトを指定します。デバイスの説明や注釈など内容はユーザが自由に決めることができます。Valueの表示形式または記録形式を指定します。48ビット整数として表示・記録します(デフォルト)。6バイトの16進数として表示します。SDBサーバへの記録には影響しません。3つの16ビット整数に分解して表示し、最初の16ビット整数を記録します。3つの16ビット整数に分解して表示し、最初の16ビット整数を記録します(divwordと同じ)。3つの16ビット整数に分解して表示し、2番目の16ビット整数を記録します。3つの16ビット整数に分解して表示し、3番目の16ビット整数を記録します。直前にある--devオプションに対して有効で、--devオプションを指定してからこのオプションを指定する必要があります。Valueの記録は、48ビット整数のオリジナルと、--smart_attrオプションで指定した形式の両方が行われます。<確証コード>有効なコマンド:updateデバイスを操作するために必要な確証コードを指定します。確証コードはaddコマンドでSDBサーバにデバイスを追加したときに発行されます。--httpオプションと同時に指定します。updateHTTPモードでSDBサーバに接続します。add/updateコマンドで有効です。{basic|none}HTTPモードの確証方式としてbasicまたしnoneを指定します。--httpオプションと同時に指定します。updateHTTPモードのパスワードを指定します。--httpオプションと同時に指定します。updateHTTPモードのユーザ名を指定します。--httpオプションと同時に指定します。<ファイル名>有効なコマンド:loadloadコマンドで読み込むCSVログファイルのファイル名を指定します。このオプションの指定がない場合は、sdb.defファイルのsdb_sub_dirに指定されているディレクトリにあるファイルsmart.logを読み込みます。<ファイル名>有効なコマンド:すべて設定ファイルのパス・ファイル名を指定します。--helpヘルプを表示します。<秒>有効なコマンド:update実行時に指定した秒数を最大とするランダムなウェイト(待ち時間)を入れます。デフォルトは30秒で、SDBサーバの負荷を低減するためのオプションです。【解説】show/add/delete/updateコマンドは--devオプションで指定したデバイスに対して操作を行います。Windows版では--devオプションの指定がない場合はdisk0から順番に検索して実行します。デバイスが存在しないためエラーが発生した時点で操作を止めます。Linux版ではデバイスの自動検索は行いません。loadコマンドも--devオプションで指定したデバイスに対して操作を行います。--devオプションの指定がない場合、CSV・ログファイルに記録されているすべてのデバイスが対象となります。データベース接続とHTTPモードに関するオプションは設定ファイルsdb.defでも指定できますが、設定ファイルとコマンドラインの両方に指定がある場合は、コマンドラインのほうが優先されます。デバイス情報の表示デバイスのS.M.A.R.T.情報を表示します。データベースの作成SDBサーバのデータベースを作成して初期化します。具体的にはデバイス情報を格納するdevというテーブルを作成します。テーブルが存在する場合はエラーとなります。このコマンドは、SDBサーバのデータベースに直接接続して実行する必要があります。データベースの削除SDBサーバのデータベースをすべて削除します。具体的にはデバイス情報を格納するdevというテーブルと、各デバイスのS.M.A.R.T.情報が記録されたsmt_という名前で始まるテーブルを削除します。このコマンドは、SDBサーバのデータベースに直接接続して実行する必要があります。デバイスをデータベースに追加デバイスをSDBサーバに追加します。S.M.A.R.T.情報を記録するためには、このコマンドでデバイスをSDBサーバに追加・登録しておく必要があります。指定のデバイスが既に登録されている場合はエラーとなります。デバイスをデータベースから削除デバイスをSDBサーバから削除します。このコマンドは、SDBサーバのデータベースに直接接続して実行する必要があります。CSV・ログファイルを読み込んでデバイス情報を更新CSV形式のログファイルに記録されているS.M.A.R.T.情報をデータベースに記録します。このコマンドは、SDBサーバのデータベースに直接接続して実行する必要があります。udapeコマンド実行時にSDBサーバが停止していたりエラーが発生して記録ができなかった場合、ログファイルにデータを保存します。loadコマンドはこのログファイルの内容を読み込み、データベースに記録します。--csvfileオプションで読み込むファイルを指定できます。デバイス情報を更新デバイスのS.M.A.R.T.情報を取得して、SDBサーバに記録します。addコマンドでデバイスを追加・登録しておく必要があります。実行時にランダムに待ち時間が入ります。これはSDBサーバの負荷低減のための処理です。待ち時間は--random_waitオプション、または設定ファイルsdb.defのsdb_random_wait_sec変数で指定・変更できます。updateコマンドと同等の機能を持っています。スケジュールから実行するとコマンドプロンプトが必ず開くので、これを回避するために用意しています。updateコマンドと共通ですので、詳細はsdbctlの解説を見てください。sdbwatchsdbwatchコマンドはSDBサーバに記録されたS.M.A.R.T.情報を監視し、異常があれば知らせるプログラムです。<アドレス>データベースの接続先をIPドレスかホスト名で指定します。<名前>データベースの名前を指定します。<パスワード>データベース接続時のパスワードを指定します。<ポート>データベースのポート番号を指定します。<ユーザ名>データベースに接続するユーザ名を指定します。<デバイス>監視するデバイスを指定します。--devオプションの指定がない場合、SDBサーバに記録されているすべてのデバイスが対象となります。Windows版ではdisk0、disk1といった物理ドライブ番号で指定します。Linux版では/dev/hda、/dev/hdbといったデバイスファイルで指定します。--devオプションは複数指定できます。<デバイス>にはダミーとしてヒリオド「.」を指定することができます。その場合、--modelオプションと--serialオプションを指定してデバイスを特定してくたざい。<グループ名>デバイス情報に記録する、パソコングループ名を指定します。他コマンドとの互換性のためのオプションで指定しても機能しません。<ホスト名>デバイス情報に記録する、パソコンのホスト名を指定します。他コマンドとの互換性のためのオプションで指定しても機能しません。<モデル>デバイスのモデルを指定します。<シリアル>デバイスのシリアルを指定します。監視に関するオプション--fast短時間で処理が完了するファストモードを指定します。sdbwatchコマンドはファストモードでデフォルトですが、明示的に--fastオプションを指定できます。--long詳細な解析を行うロングモードを指定します。<秒>パソコンの電源が切れているか、デバイスが動作していない状態を判断するための時間を秒単位で指定します。デフォルトは7200秒(2時間)で、最後のデータ記録日時から2時間以上経過している場合は、オフラインと判断します。<秒>直前の値として判断する秒数を指定します。ファストモード、ロングモード共にこのオプションで指定した期間のS.M.A.R.T.情報を使って診断します。ロングモードの故障予測の分析は別ですが、この期間より古いデータは直接診断には用いません。デフォルトは3600秒(1時間)ですので、1時間前から現在までのデータが診断の対象となります。<ファイル名>設定ファイルのパス・ファイル名を指定します。--helpヘルプを表示します。監視用テーブル設定sdbwatchコマンドを使うことでS.M.A.R.T.情報を監視し、異常を検出できますが、監視方法や警告レベル等をカスタマイズすることが可能です。監視方法をカスタマイズするには、データベースに監視用のテーブルを作成しておく必要があります。このテーブルの作成を行うのが、createwatch.phpというPHP用スクリプトです。このスクリプトはtools\createwatch.phpとして収録しています。設定内容はsdbwatch.incというファイルに記述されていますので、これをテキストエディタで編集してください。データベースへの接続方法やユーザ、パスワードはphplin/sdblib.incに記述されていますので、必要ならこのファイルも編集してください。createwatch.php」として実行します。設定は$SdbWatchTblという配列に格納されます。配列の各要素は更に次のキーを持つ連想配列として指定します。比較対象PHPスクリプトの中では、次のように形式で記述します。先頭からモデル名までの文字数が一致していれば、そのデバイスが監視対象となります。modelを「HD」と指定した場合は「HDD〜」や「HD7」といったモデル名のデバイスも監視対象となります。モデル名を省略した場合、すべてのデバイスが対象となります。デバイスのシリアルデバイスのシリアルを指定します。モデルとシリアルの両方が一致した場合に監視対象とにります。シリアルを指定する場合は、モデル名も指定しておく必要があります。属性ID監視対象の属性IDを1〜255の範囲の数値で指定します。属性IDは省略できません。属性値が閾値(Threshold)に達するまでの予測は標準で行いますが、この指定はこれを無効にしたい場合に使います。属性値をopとrightで指定した方法で比較します。条件が一致した場合はwarnで指定した警告を発します。Valueをopとrightで指定した方法で比較します。条件が一致した場合はwarnで指定した警告を発します。Valueがrightで指定した値に達するまでの期間を予測します。監視方法を指定します。実際のパラメータは数値ですが、「SDB_WATCH_〜」と定義されているマクロで指定してください。警告レベルを指定します。実際のパラメータは数値ですが、「SDB_WARN_〜」と定義されているマクロで指定してください。最後に記録されたデータと、rightに指定された数値を比較して、条件が一致した場合はエラー・警告となります。opを「>」、rightを「100」と指定した場合、最後に記録された値が100より大きいとエラー・警告となります。比較対象watchにSDB_WATCH_ATTR_VALUE、SDB_WATCH_RAW_VALUE、SDB_WATCH_RAW_ANALYSを指定した場合は、比較対称となる値を指定します。通常は数値を指定しますが、「prev」とすると1時間前(sdbwtachの--prev_timeオプションで変更可能)からの値と比較します。複数の監視条件が指定されている場合、登録されている順番に処理します。modelが指定されている監視条件を処理すると、以後は同じmodelの監視条件だけを処理します。次のようにmodelを省略した監視条件[A]と、mdoelに「HD1」を指定した監視条件[B]を設定したします。この場合、HD1というモデルのハードディスクは[A]、[B]両方の監視条件を処理します。,"right"=>"5000"),↓);↓しかし、次のように監視条件の登録順序を[B]→[A]に変更すると、HD1というモデルのハードディスクは最初の監視条件[B]だけを処理します。警告レベルについて警告レベルにはSDB_WARN_OFF、SDB_WARB_FAILURE、SDB_WARN_HIGH、SDB_WARN_MID、SDB_WARN_LOWの5種類があります。監視条件にSDB_WARN_OFFを指定した場合、警告は無効となります。S.M.A.R.T.エラーを検出しても警告やエラーにはなりません。SDB_WARB_FAILUREは属性値が閾値(Threshold)以下になるような明らかなエラーや異常を検出した場合です。それ以外の、SDB_WARN_HIGH、SDB_WARN_MID、SDB_WARN_LOWは警告の状態を高・中・低によって指定できます。設定ファイルsdb.defに「sdb_mail_warnlevel」という項目があり、指定レベル以上の警告エラーを検出した場合にメールを送信します。次の例では、警告レベルがSDB_WARN_FAILUREかSDB_WARN_HIGHでメールを送信します。Valueが指定の値に達するまでの期間を予測・分析しますが、残り時間に応じて警告を発することができます。デフォルトでは残り時間が3日、14日、30日以内でそれぞれSDB_WARN_HIGH、SDB_WARN_MID、SDB_WARN_LOWの警告を発します。この期間を変更したい場合は、次の変数をsdb.defに追加してください。Valueは、--smart_attrオプションで指定した形式を扱います。Valueは48ビット整数として扱いますが、--smart_attrオプションでdivword/word0/word1/word2等が指定されている場合は16ビット整数として扱います。#9の稼働時間が分単位で記録されていますが、16ビットの最大値65535分(約45日)で溢れて0に戻ってしまうことがあります。Valueが65000から0に戻ってしまうような変化を検出した場合は、自動的に桁を繰り上げて、稼働時間が連続するように処理します。この処理を行う属性ID番号は、設定ファイルsdb.defのsdb_auto_raw_word_id変数で指定しています。設定ファイルsdb.def設定ファイルsdb.defには次の変数が使用できます。オプション次のモデル、シリアル、オプションを持つ構造体の配列です。--groupname、--hostname、--smart_attr、--user_passが指定できます。System)と呼ばれている、自己診断機能が備わっています。いう機能だけで、S.M.A.R.T.関連のすべての機能が利用できるわけではありません。Toolsで扱う診断情報は、各属性ごとに次の6つの情報があります。Time(スピンアップタイム)、194はTemperature(温度)といった具合に診断内容をテキストとして表示します。ID番号から診断内容を知るためには、メーカーの資料を見る必要がありますが、一部のメーカーしか公開していません。一部のメーカが公開しているデータシートや、他のS.M.A.R.T.診断ツールを参考にしてテキスト表示を行っていますが、本来S.M.A.R.T.情報としてわかるのはID番号だけです。メーカーやモデルが違ってもID番号が同じなら、内容や意味はほぼ同じようですが、中にはID番号が同じでも意味や内容が異なる場合があります。Value)と閾値(Threshold)との比較で行います。属性値と閾値は0〜255の範囲の数値を取りますが、属性値が閾値よりも大きければ正常、属性値が閾値以下だと異常といった具合です。属性値や閾値は診断項目やメーカー・モデルによって算出方法が異なるので、数値を見ただけでは安全度や危険度を判断することはできません。確実に判断できるのは属性値と閾値の大小関係だけです。通常、属性値は大きいほど安全で、小さいと危険なのですが、中にはこれが通用しない診断項目があります。Seagate社のハードディスクの中には温度をそのまま属性値として返すモデルがあるので、温度が上昇すると属性値も大きくなります。この場合、閾値との比較によって診断できないような気がしますが、こういう属性では閾値を変化させるのだと思います(これは作者の推測ですが)。Valueと呼ばれている、生データともいえる情報があります。Valueには実際の稼働時間やスタート/ストップカウント、不良セクタ数など、重要な情報が含まれていることがあります。Valueには決まったフォーマットがないのでメーカー・モデルによって内容や意味は異なります。Valueそのものは6バイト(48ビット)のデータで、48ビット整数として表示します。そのまま稼動時間を表すことがありますが、Maxtor社のハードディスクでは時間(hour)ではなく分単位(minute)で表すモデルがあります。一部の診断項目では2バイト毎に3分割して使うことがあります。HGST社のハードディスクでは温度を最大/最小、平均値等の3つに分けています。Valueの表示方法を指定することができます(詳しくはコマンドラインの書式を参照してください)。194:divwordといったオプションを追加することで対応できます。Valueと表現して区別することがあります。Toolsを開発するにあたって次の資料・ソフトウェアを参考にしました。