2014年1月19日日曜日

Windows8の記憶域機能を実家サーバーに導入してみる(その2)

・・・明けましておめでとうございます。2014年が始まってからすでに20日も経過しておりますが、仕事やら何やらで色々と忙しく、ようやく新年一発目の更新をする気力が出て参りました。 今年もこんな感じでゆるゆると更新していこうかと考えておりますので、出来るなら見捨てないで頂ければ、と

で、今回のネタは前回からの続き、Windows8の記憶域機能の活用です。3TBのHDD×6台で記憶域スペースを作成したところ、利用できる容量が想定より少ない事が判明しましたのは前回ご紹介したとおり。その後色々と調べてみたところ、 この記憶域機能を詳細に解説されている「薩摩藩中仙道蕨宿別邸」様に行き着きました。この中の記事「記憶域スペースに関する理解を深める(列数とディスク使用の関係)」を読むと、以下のような記述がありましたのでご紹介します。

 パリティの場合: デフォルトの列数は「3」
           実データが保存される容量 = (列数-1)/列数 

これで、利用できる容量が想定より少ない理由がハッキリとしました。念のため式にして確認してみると、以下のようになります。前回、記憶域スペースをを作成した際の画像にも、利用できる容量は「10.9TB」となっていましたから、この計算式は正しいことがわかります

   2.72TB(1台当たりの認識されている容量) × 6(台数) × [(列数-1)/列数]
= 16.32TB × 2 / 3
= 10.88TB

さて、この「列数」というパラメータを自由にいじることが出来れば、パリティでの記憶域スペースを経済的に運用できるようになりそうです。その答えも「薩摩藩中仙道蕨宿別邸」様と、TechNetのフォーラムに色々とまとめられておりましたので、ここでは重要そうな部分だけ抜粋してみます。
 
  ・列数を指定して記憶域スペースを作成するためには、管理者権限でPowerShellの
   スクリプトを利用して、列数を指定して記憶域プールを作成すれば良い

  ・PowerShellでは、列数を「NumberofColumns」というパラメータで指定するが、
   NumberofColumns は記憶域スペース作成時にしか指定出来ない

  ・パリティの場合、指定できる列数の上限は「8」、つまりHDDの台数は最大8台
   →パリティを利用する際のNumberofColumns の最大値は高々8なので、
    パリティを利用するのであれば最初から最大のディスク本数で構成するべき

  ・ 記憶域スペースをシンプロビジョニングで作成すると書き込み速度が著しく遅いため、
   シックプロビジョニングで作成した方が良い


 これらの情報を元に色々と検討してみた結果、更にHDDを2台追加し、パリティとして使える最大の8台とした上で、PowerShell上からコマンドを投入して記憶域スペースを作成してみることにしました。早速、HDDを2台追加発注・・・しようとしたのですが、先日購入したHDDの初期不良が発覚してしまったため、HDD8台を揃えるのに時間がかかってしまいました。何だかなぁ。

 まずはGUI上から、HDD×8台の記憶域プールを作成します(キャプチャした画像がちょっと変なのはご愛敬)。詳細なやり方は前回ご紹介したので割愛。なお、今回は全て同じ型番のHDDなため、管理しやすいようにHDDそれぞれに名前を割り振りました。実HDDの方にもこの名前を記入したラベルを貼っておき、もし故障して交換する際に間違えないようにしています。・・・ちなみに私はいま大流行の「艦これ」にはあまり興味が無く、この名付けは昔からの純粋な趣味であることをお断りしておきます(w


試しに、GUI上から記憶域スペースを作成してみると以下の通り。やはり列数が「3」となってしまっているため、HDD×8台の総容量の2/3しか利用できていません。


 そんなわけで、いよいよ「PowerShell」の出番です。管理者権限で起動した上で、今回は以下のようなコマンドを実行しました。コマンド投入後程なくして、エラーも出ずに記憶域スペースの作成に成功しています。

 new-virtualdisk -storagepoolfriendlyname 記憶域プール -friendlyname DataSpace -numberofcolumns 8 -resiliencysettingname parity -size 19.00TB

  ※コマンド中のオプションの説明

   -storagepoolfriendlyname  : GUI上で作成しておいた記憶域プールの名前
                       今回はデフォルである「記憶域プール」という名前を
                       そのまま利用しました

    -friendlyname         : 記憶域スペースの名前で、任意に指定可能
                       今回は「DataSpace」と名付けてみました

    -numberofcolumns      : 今まで説明してきた「列数」のこと
                      今回、HDDの台数が「8」なので、それを指定します

    -resiliencysettingname   : 作成する記憶域スペースの回復性
                      今回作成する記憶域スペースはパリティなので、
                       「parity」と指定します

    -size              : 記憶域スペースのサイズ(容量)です
                      今回は以下の計算式で求めました

                        2.72TB × 8台 × (列数-1) / 列数
                      = 2.72TB × 8台 × 7 / 8
                      = 19.04 ≒ 19.0TB




GUI上から、作成した記憶域スペースを確認します。想定通り、HDD1台分の容量をパリティとして使用した、合計容量19.0TBの記憶域スペースが作成できました。やったね♪


作成した記憶域スペースを実際に使用するためには、当然ながらフォーマットを行う必要があります。画面に従いフォーマットを実施します。同時に名前(ボリュームラベル)も指定できるので、記憶域スペースの名前と合わせて「DataSpace」としておきます。


フォーマットも完了し、これでようやく使用できる状態になりました。これでやっと19TBもの大容量記憶域スペースを使えるようになったわけです。長かった・・・。


試しにベンチマークを実施。HDD×8台を使用しているだけあって、Readの速度(シーケンシャル)は900MB/s超と目を見張る物がありますが、やはりWriteの速度は約57MB/sとかなり遅めです。パリティを計算した上で、HDD8台にそれぞれ書き込みを行う必要がありますから、まぁ仕方が無いところではあるのですが。ただ、実運用上では書き込み速度を重視するようなことはしないので、余り困るようなことは無いかと。

ちなみに、書き込み時のCPU負荷は10%未満(Core i5-2400S)と低いため、仮にCPUを高性能な物に交換したとしても、書き込み速度が上がるということはないでしょう。ちょっと残念。


こんな感じで、ようやく想定していた大容量の記憶域スペース構築に成功したわけですが、その後トラブルが立て続けに発生してしまいます。そのトラブルへの対処に色々と悩まされたわけですが、その詳細は次回また改めて、ということで。