ハードディスクドライブのエラーレートの検証
2010/05/22作成
2014/08/17更新

私が使っていたバックアップ用の320GBのハードディスクを使い切ってしまい、新しく1TBのハードディスクを買ってきたのは数ヶ月前のことでした。
その時購入したのは日立グローバルストレージテクノロジーズ(旧IBM)製のHDS721010CLA332というものです。
しばらく使用してから信頼性について少し気になり、レビューやデータシートなどを探していました。
ところが、HDDメーカー各社が公開している仕様書によると、民生用のハードディスクはビットエラーレートが1.0E-14程度であるとのことでした。
また、このエラーレートは修復不能(Non-correctable/Uncorrectable error rate)と記されています。
このエラーが発生するとデータが変化し、読み出せない、または正常に読めるが内容が異なる(いわゆるデータ化け)という事態に陥ります。
現在販売されているHDDは10^13ビットほどの容量があるため、その場合は10回の読み書きをすると63.2%の確率でデータが失われることになります。
これほど高確率では困るので、1.0E-14というのは保障値ではないかと思いましたが、Web上では平均値であるとの意見が多く見られました。
そこで真相を確かめるべく、実験用のソフトを作成し、数台のHDDで測定してみました。
ただし実際のディスクの利用状況は使用者や環境により異なるため、厳密に測定することを目的としていません。

なお、10回の読み書きで1回なので1回で10%、10回で100%といった記述が見受けられますが、これらは誤りです。
このエラーレートが平均値である場合、自然対数の底をe、読み書きするビット数をx、エラーレートをrとしたとき、1-1/(e^rx)と近似されるので、1回で1-1/(e^((10^13)/(10^14)))=9.5%、10回で1-1/(e^((10^14)/(10^14)))=63.2%です。
ちなみに私はまだ一度もこのようなHDDのエラーを見たことがありません(故障するときは一気にデータが飛びます)。

測定方法を次に示します。

手順1. ドライブの空き領域いっぱいに4種類のパターン(A.すべて0、B.すべて1、C.3ずつ加算される24ビット整数の配列、D.乱数)の256MBのファイルを作成する。
手順2. 順番にファイルを読み込み、データを検証する。これを5回繰り返す。
手順3. Aのパターンで書き込まれたファイルをB、BをC、CをD、DをAのパターンに書き換える。
手順4. 手順2と手順3を複数回繰り返す。

この方法の問題点を次に示します。

問題1. ディスクの全領域を検査できない。
問題2. ディスク上の物理的位置や磁性を考慮していない。
問題3. ファイルシステムの読み書きを考慮していない。
問題4. 稼働時間やその間隔を考慮していない。
問題5. 経年劣化を考慮していない。

問題1と問題2は、ここで議論するエラーレートとは読み書きするデータ量に応じて発生するエラーの量を表すので、今回の実験には関係ありません。
また、手順3により同じ位置のデータが毎回書き換えられるので、磁性の偏りなどはある程度解消されます。
問題3は、ファイルデータの容量がファイルシステムの管理情報より十分に大きく、管理情報はディスクではなくメモリ上で処理されやすいので、ここでは無視することにしました。
なお、ファイルデータの読み書きにはキャッシュを利用しないように設定してあります。
問題4と問題5は時間の都合上無視することにしました。

検証結果を次に示します。

HDDの型番読み込みバイト数書き込みバイト数読み書きバイト数エラーバイト数
Hitachi HDS721010CLA3322,520,491,491,3281,124,744,560,6403,645,236,051,9680
FUJITSU MHZ2320BH G22,226,940,542,976579,283,714,0482,806,224,257,0240
Hitachi HTS541260H9AT004,943,775,793,152999,922,073,6005,943,697,866,7520
合計9,691,207,827,4562,703,950,348,28812,395,158,175,7440

2014/08/17追記
HDDの型番読み込みバイト数書き込みバイト数読み書きバイト数エラーバイト数
HGST HTS721010A9E63010,222,022,164,4802,044,404,432,89612,266,426,597,3760
合計19,913,229,991,9364,748,354,781,18424,661,584,773,1200

今回使用したHDDはすべて、設計エラーレートが1.0E-14、代替セクタ数が0、S.M.A.R.T.の全項目のValueがThreshold以上のものです。
本来10^14ビット(すなわち1.25E13B=11.4TB)より十分に多く読み書きしなければならないのですが、時間の都合により11.3TBで打ち切りました。
同様の理由で通常の使用をしながらバックグラウンドで測定していたため、手順の途中で終了しているものもあります。
そのため、普段使用していないコンピュータに接続されたHDDほど測定バイト数が多くなっています。
温度は記録していませんが、S.M.A.R.T.情報から読み取れるもので30℃程度から上昇し、一時的に70℃以上にもなりましたが、45℃から60℃程度で安定しました。
上の結果より、今回の実験中にエラーが発生する確率は62.9%ですので、62.9%の確率でエラーレートが1.0E-14以下であることになります。
仮に99%成立する検証を行うならば52.4TBも計測しなければなりませんが、今回のようなペースで続ければ数か月かかってしまうことでしょう。
実際のエラーレートが低かった理由として考えられることを以下に示します。

2014/08/17追記
今回追加で測定したものを合わせると22.4TBになります。
したがってエラーレートが1.0E-14以下である確率は86.1%です。

理由1. 平均値ではなく保障値である。
理由2. 不良品を含めた平均値である。
理由3. 故障時または定められた寿命まで使用した場合の平均値である。
理由4. データではなくECCビットによりエラー訂正される前の物理的ビットに対するものである。
理由5. 訴訟などを避けるため公称値を低く設定している。
理由6. サーバー用途などの高信頼品(1.0E-15から1.0E-16程度)とのデータシート上の差別化のため。
理由7. 特定の(一般的に、通常の使用環境よりも厳しい)環境下での測定値である。

理由2の場合、不良品の発生率が1%、不良品のエラーレートを1.0E-13と仮定すると、正常なものでは1.0E-15となります。
理由4の場合、ECCビットを含めた1セクタを5000ビットとし、1セクタ中1ビットまでの異なりを訂正可能であると仮定すると、有効なデータに対するエラーレートは1.25E-21となります。
注意しなければならないのは理由3の場合です。
この場合、使用開始時はエラーレートが公称値より低くなりますが、使用するにつれて悪化し、故障直前ではエラーレートがさらに上昇し、バックアップしようとしても正常にデータが読み出せない可能性があります。
また、私が最も可能性の高いと考えるものは理由2です。
メーカーは出荷前に必ず製品が一定の基準を満たすかどうか検証するのですが、この検証にあまり時間をかけるわけにもいかず、時間短縮のため、複数台の製品を同時に加速器にかけて計測しているはずです。
また、実際の製品に初期不良が発生することから、計測に用いる個体から正常なもののみを選別できない、または時間の都合により行わないと考えられます(ただし量産体制でのみ発生する場合や、輸送時の問題もあります)。
このことから、検証にはエラーレートの高い不良品も含まれ、計測結果も正常な個体と比べて悪くなるのでしょう。

今回の実験では測定した台数やデータ量が不十分なため結論には至りませんでした。
これについては時間があれば検証結果の続きを公開していきたいと思います。
エラーが発生しなかったため統計的にエラーレートを計算することはできませんが、HDDのエラーレートは十分に低く、信頼性が高いと考えられます。
そのためデータの保管の際に気をつけるべきことはエラーによるデータ化けよりも外的なショックや予測不能な突然の故障と言えるでしょう。
私は普段USBフラッシュメモリと外付けHDDに手動でバックアップしていますが、それらが面倒だと思う方には市販または無料のバックアップソフトがおすすめです。
消費電力が大きいことや落雷時などに電源の問題により一度に壊れることがあるのでRAID1やRAID5などはお勧めしません。
重要なデータは独立した複数の媒体に保存することが一番確実です。


目次 質問フォーム Q&A このサイトについて トップページ