PCに接続されるATAPIハードディスクなどの記憶デバイスには“Self-Monitoring, Analysis and Reporting Technology”(S.M.A.R.T.)と呼ばれる機能が搭載されている。これは、自己診断などを行う機能。ここから現在の外部記憶デバイスの状態などを調べるデータを出力させることができる。

ただ、仕様を複数の団体で決めたこと、それぞれがベンダーの寄り合いなので、ベンダー固有定義も多いという状態。結局、共通なのは、自己診断の結果、危険な状態にあるかどうかの判定ぐらいで、あちこちのベンダーの情報を集めないと簡単には、解釈できない状態だ。

また、Googleなどの論文によれば、S.M.A.R.T.では、必ずしも外部記憶装置の寿命を予言できるとは限らず、状態の悪化を告げるまでもなくお亡くなりになるデバイスも少なくないという。とはいえ、S.M.A.R.T.からは、いろいろと情報を取ることができる。たとえば、デバイスの特性などもこのS.M.A.R.T.から取得できる。

デバイスから直接S.M.A.R.T.情報を取るのはかなり面倒で、ドライバにIOCTLを送るプログラムを書かねばならない。コントローラーにより取得方法も異なれば、出てくる情報の形式も同じではない。こうした場合、Windowsが管理している情報であれば、WMI(Windows Management Instrumentation)経由で取得ができることが多い。

まずは、ATAPI系のデバイスから一般的にS.M.A.R.T.情報と呼ばれているものを取得してみる。それには、まず、以下のコマンドで、接続されているATAPIデバイスを列挙させる(写真01)。実行には管理者権限が必要(キャッシュが残っている間は一般ユーザーでも表示できる)。

Get-CimInstance -namespace root\wmi -class MSStorageDriver_FailurePredictData

写真01: コマンドからATAPIドライブのS.M.A.R.T.情報を読み出してみる。複数のデバイスが表示されるときには、InstanceNameプロパティを手掛かりにしてWhereコマンドで選択する

“Get-CimInstance”は、PowerShellからWMIを使うためのコマンド。WMIでは、膨大な情報を扱うため、「名前空間」(namespace)が使われる。簡単にいうとnamespaceごとに多数のクラスが定義され、各クラスに多数のプロパティがある。この名前空間とクラス名を正しく指定しないと、希望の情報が得られない。前記のコマンドは、「root\wmi」という名前空間で、定義されている「MSStorageDriver_FailurePredictData」クラスをアクセスするもの。

ここにある「VendorSpecific」プロパティの中に自己診断情報がある。情報を表示するなら、デバイスを特定して、“VendorSpecific”プロパティを読み出す。

(Get-CimInstance -namespace root\wmi -class MSStorageDriver_FailurePredictData | Where -Property InstanceName -like '*HGST*' | select -ExpandProperty VendorSpecific | ForEach { ([Int]$_).ToString("X2") } ) -join " "

とする。最初の部分は前回のコマンドと同じ。その後、Whereコマンドで“InstanceName”プロパティに“HGST”が含まれるオブジェクトのみを取り出し、selectコマンドで“VendorSpecific”プロパティを展開し、出てくるバイト配列を16進数に変換してスペースでつないで出している。

ATAPIデバイスの場合、先頭の2バイト(01 00)の後ろは、12バイトごとのデータに区切られ、先頭の1バイトが診断項目(ID)を表す。たとえば、0x01は「Raw Read Error Rate」、0xC2は「Temperature/Temperature Celsius」である。ただし、ディスクによって診断項目を持っていない、ベンダーごとに意味の違いがあり、その解釈は簡単ではない。このコマンドでは取得できないが、NVMeの場合には、先頭からのオフセットで情報内容が決まる。

今回のタイトルネタは、国内でも放送された1965年の米国テレビドラマ「それ行けスマート」だ。というのも原題が“Get Smart”なのである。主人公のマクスウェル・スマートは米国のスパイ組織CONTROLのエージェント『86』号である。パソコン関連では、86といえば、x86のことだが、最初の16 bit CPUの型番が8086(1978年)になったのは、その前のCPUが8085だったからというのが理由。

その後、8087(NDP)、8088(CPU)、8089(IOP)と割り当てられていき、以後のCPUは、80186、80286とCPUの末尾がずっと86であったため、x86と呼ばれるようになった。“Get Smart”の主人公に、この番号が付けられたのは米国のカジノなどで使われていた「客を追い出す」という意味の隠語だったからだという。順番とはいえ変な番号、選んじゃったねぇ。