データストレージをRAID5で構築

 私のデスクトップPCは日々の暮らしでは重要な役割を果たしており、テレビであったり音楽プレーヤーであったりDVDやBlu-rayのプレーヤーであったり、時にはラジオや新聞の役割も担っています。データストレージには録画されたテレビ番組がどんどん溜め込まれ、購入したCDやDVDのデータなども記録されていて、いちいちCDやDVDの円盤を取り出してドライブに入れなくても再生できるようになっており、大量のデータが記録されています。今までは2TBのHDDを2台で4TBで使用してきましたが、そろそろ足りなくなってきたので3TBのHDDを2台で6TBとしようという事になりました。今までと同じく当初は3TBのHDDをストライプ(RAID0)として運用しようと考えておりましたが、この4月から仕事上ストレージ関係の部署に異動し、ガンガンHDDが壊れるのを目の当たりにして冗長性の重要さを実感しました。そんなわけで、6TBの容量で冗長性を確保できるRAID5を構築する事にしたわけです。ところで、「RAIDとは何ぞや?」という方は私が下手な説明をするよりもこちらをご覧いただければ正しく理解いただけると思いますが、簡単に言うとHDDが壊れてもデータを失わないための仕組みと思って下さい。
 さて、先々月のこちらのエントリで「RAID5にしてみます」などと書いておきながら、しばらく記事にできなかったのはそれなりに理由があるのですが(酔っぱらって出来なかったわけではありませんぞ)それは別途書かせていただくとして、取りあえず安定運用となったのでまとめてみたいと思います。今回はお安く済ませるために、RAID5はマザーボード上のAMDチップセット(SB950)の機能で構築していますが、スモールビジネスなどで利用される場合は色々な観点から別途拡張スロットに装着するRAIDコントローラーを用意されることをお勧めします。なおドライブはSeagate ST3000DM001を3台使用しました。
 まずは、ドライブ単体では以下のような性能でした。なおSATAの設定はRAIDモードで、AMDRAIDドライバーを使用しての測定結果ですので、以前公開したAHCIモードでの物とは値が異なっています。

CrystalDiskMark 1000MB Read Write CrystalDiskMark 4000MB Read Write
Sequential 188.933 184.787 Sequential 181.305 180.493
Random 512KB 59.646 94.142 Random 512KB 55.692 89.769
Random 4KB(QD=1) 0.687 1.378 Random 4KB(QD=1) 0.646 1.415
Random 4KB(QD=32) 0.688 1.399 Random 4KB(QD=32) 0.614 1.390

 RAID5は3台のドライブを使いますが実データは2台のドライブから読み書きし、残り1台はデータの冗長性を確保するためのパリティデータの読み書きに使われます(パリティは3台のドライブに分散されますので特定の1台がパリティドライブというわけではありませんが)。このため、処理能力的には2台でのストライプからパリティ処理分を差し引いた程度のパフォーマンスとなります。ですので、どの程度パリティ処理のオーバーヘッドがあるか確認するために、ストライプ(RAID0)のデータを見ておきましょう。

CrystalDiskMark 1000MB Read Write CrystalDiskMark 4000MB Read Write
Sequential 355.128 355.892 Sequential 345.409 351.105
Random 512KB 48.116 76.340 Random 512KB 53.490 97.386
Random 4KB(QD=1) 0.713 2.817 Random 4KB(QD=1) 0.653 2.990
Random 4KB(QD=32) 3.006 1.957 Random 4KB(QD=32) 2.826 3.116

 シーケンシャルの読み書きはSATA2の時代のSSDなみの性能になっています。さて、次にRAID5の結果です。なお、この結果のみデバイスマネージャーのドライブのポリシーで書き込みキャッシュを無効にしています。理由はこれを有効にしているとCrystalDiskMarkのRandom 4KBのテストで稀にエラーが出たためです。試行錯誤の結果書き込みキャッシュを無効にしたところエラーが出なくなったのですが、何故なのかは分かりません。ただRAIDコントローラー側でもwrite backキャッシュを有効にしているので、それとの関係なのかもしれません(これもあくまで推測で、何の根拠もありません)。

CrystalDiskMark 1000MB Read Write CrystalDiskMark 4000MB Read Write
Sequential 347.671 288.070 Sequential 356.477 295.207
Random 512KB 42.508 37.603 Random 512KB 41.195 37.023
Random 4KB(QD=1) 0.710 1.253 Random 4KB(QD=1) 0.660 1.407
Random 4KB(QD=32) 3.887 1.277 Random 4KB(QD=32) 3.758 1.418

 ストライプ(RAID0)の結果と比較すると、読み込み時のパリティ処理によるペナルティは無視できるレベルと言えましょう。一方書き込み時はやはりパリティを生成する処理が発生する関係か80%強に落ち込んでいますが、冗長性を得ることの代償という事で考えると、それ程高いペナルティでは無いと言えます。実際単体ドライブ時より100MB/sも書き込み性能は向上している訳ですし。なお、現在はスペアドライブを追加して、以下の画面のような構成となっています。

白い枠で囲まれているのが、システムドライブのPlextor PX-256M3P。その下の青い枠で囲まれた3台がRAIDを構成するメンバーで、一番下のオレンジの枠で囲まれたドライブはRAIDの3台のどれかが壊れた時にあてがわれるスペアドライブです。この状態で9月6日あたりから運用を開始しており、今はRAID管理アプリのRAID Xpertの機能をいくつか試しているところです。運用開始に至るトラブルなどに関しては、また別途記す予定です。