記憶域スペースに関する理解を深める(列数とディスク使用の関係)

Windows Server 2012 Essentials

記憶域スペースについて、

たとえば、以下のように4本のディスク(合計 3.39TB)を利用して記憶域プールを作成します。
121103001

そして、作成したプール上に、記憶域スペースを作成していくわけですが、[回復性の種類]によりデフォルトで表示される[サイズ(最大)]が異なってきます。記憶域スペースのサイズはシンプロビジョニングにより仮想化されたサイズのため、記憶域プールの実サイズ以上に変更することが出来るのですが、デフォルトで表示される[サイズ(最大)]は、記憶域プールに物理HDDを追加せずとも利用可能な理論上の最大サイズと同値になります(ただし、実際にはプールを構成するディスクのそれぞれのサイズと回復性の種類の組み合わせによって、実際にはこの領域を全て効率よく使えるとは限りません)。

3.39TBの記憶域プールでデフォルトで表示される[サイズ(最大)]は、以下のようになります。

回復性の種類

シンプル(回復性なし)

双方向ミラー

3方向ミラー

パリティ

デフォルトの[サイズ(最大)]

3.39TB

1.69TB

1.13TB

2.26TB

記憶域スペースで利用出来るディスクサイズが決定されるロジック

記憶域スペースのこのデフォルトのサイズを理解するには、以下のパラメーターについて理解しておく必要があります。

項目 概要
列数 記憶域スペースが1つのデータを保存するのに使用する物理ディスクの数
データの複製数 1つのデータをコピーして異なる物理HDDに保存する数(回復性の種類によって決定)

回復性の種類毎の、デフォルト値は以下のようになっています。

回復性の種類

(1)データの複製数

(2)列数のデフォルト(最小)値

(3)データが関連づけられる
(保存される)ディスクの数【(1)×(2)】

シンプル(回復性なし)

1

1

1

双方向ミラー

2

1

2

3方向ミラー

3

1

3

パリティ

1

3
(1列はパリティ情報に利用)

3

デュアル
パリティ

1

7
(3列はパリティ情報に利用)

7

従って、回復性の種類により、実際に実データが保存される容量(デフォルトサイズ)は、次の式で計算することが出来ます。

パリティ以外:
実データが保存される容量 = 1 /(データの複製数)

パリティの場合:
実データが保存される容量 = (列数-1)/列数

デュアルパリティの場合:
実データが保存される容量 = (列数-3)/列数

デフォルトの列数で作成された記憶域プールの、記憶域プールの物理サイズに対する利用可能領域(デフォルトサイズ)は以下のように計算することが出来ます。

回復性の種類

記憶域プールの物理サイズに対する利用可能領域
(デフォルトサイズ)

考え方

シンプル(回復性なし)

1/1

1つのファイルを1つのディスクに保存

双方向ミラー

1/2

1つのファイルを2つ複製し、2つの異なるディスクに保存

3方向ミラー

1/3

1つのファイルを3つ複製し、3つの異なるディスクに保存

パリティ

2/3

1つのファイルを(列数-1)に分割し、パリティ含めて3つの異なるディスクに保存

デュアル
パリティ

4/7

1つのファイルを(列数-3)に分割し、パリティ含めて7つの異なるディスクに保存

記憶域スペースの回復性の種類、列数を確認する方法

PowerShell のスクリプトで以下のコマンドを実行します。

get-virtualdisk | ft friendlyname,resiliencysettingname,numberofcolumns,numberofdatacopies,@{expression={$_.size/1GB};Label="Size(GB)"}

2方向ミラーの例:
121103003

パリティの例:
121103002

列数を指定して記憶域プールを作成する方法

記憶域プールのパフォーマンスや回復性を最適化するには、この列数を意識する必要があります。

たとえば、回復性の種類にパリティを指定して、記憶域スペースをWindows 8 / Windows Server 2012 Essentials のコントロールパネルから作成すると、物理HDDを何台接続しようが列数がデフォルトの3となっているため異なる2つのHDDにストライプを書込み、別のHDDにパリティを書込む形になり、合計3台のHDDにしか分散されません。たとえば、Windows 8 / Windows Server 2012 Essentialsで、4台の物理HDDを接続して4台のHDDに分散させたい(4台中3台にストライプを書込みたい)場合は、管理者権限でPowerShellのスクリプトを利用して、列数を指定して記憶域プールを作成します。

new-virtualdisk -storagepoolfriendlyname 記憶域プール -friendlyname 記憶域 -provisioningtype thin -numberofcolumns 4 -resiliencysettingname parity -size 2.54TB

※記憶域プールのfriendlyname は予めpowershellのcmdletで確認してください。
※sizeには、物理総サイズに対して(列数-1)/列数 を指定します。
※列数は物理HDDの数より少ないか同じ数を指定出来ます。物理HDDの数を上回る数は指定出来ません。
※GUIから指定出来る列の上限は8です。PowerShellを利用すれば8以上の列数を指定出来ます。ただし、パリティの場合はPowerShellを利用しても指定出来る列数の上限は8となります。

記憶域プール作成後フォーマットすると以下のように、元の物理ディスク容量 3.39TBに対して3/4サイズである2.54TBの記憶域を作成出来ていることが確認出来ます。
121103005

注意点

ここの例ではサイズの異なる物理HDDを用いていますが、回復性の種類により指定された数の異なる物理HDDにデータを保存出来ない場合、記憶域プール全体の使用量に空きがあっても、記憶域プールの容量が足りない警告が出る場合がありますので注意が必要です。今回4本の物理HDDからなる記憶域プールに対して4本の列を設定しましたが、最小サイズのHDDの使用量が70%に達すると、スペースが足りない旨の警告が表示されます。よって、パリティでHDD台数を増やしてストライプを増やしたい場合は、同容量の物理HDDでプールを構成することが最も効率的かと思います。

参考:

コメント

  1. yuki-yuki より:

    SECRET: 1
    PASS: ec6a6536ca304edf844d1d248a4f08dc
    technetでの記憶域スペースでは大変お世話になりました。
    自宅サーバ構築の手順をメモするためのブログを作成しようと思っているのですが、この記事をリンクさせて頂いてもよろしいでしょうか?

  2. ださっち より:

    SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    > technetでの記憶域スペースでは大変お世話になりました。
    > 自宅サーバ構築の手順をメモするためのブログを作成しようと思っているのですが、この記事をリンクさせて頂いてもよろしいでしょうか?
     わざわざありがとうございます。ご自由にリンクください。

  3. やみぃ より:

    SECRET: 0
    PASS: 16bbc67855f77ff088931e609dd8e003
    Windows Server 2012 Datacenter の
    サーバー マネージャーから作成すると
    numberofcolumns を特に指定しなくても
    最初から登録されているディスク数で
    作成されるみたいですね。
    Disk が 4 台の環境では値は 4 になりました。

  4. ださっち より:

    SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    > Windows Server 2012 Datacenter の
    > サーバー マネージャーから作成すると
    > numberofcolumns を特に指定しなくても
    > 最初から登録されているディスク数で
    > 作成されるみたいですね。
    >
    > Disk が 4 台の環境では値は 4 になりました。
    StandardとDataCenterだと挙動が違うんですね。ドキュメントには自動でNumberofcolumnsを設定すると書かれていたり、TechNetでも自動で作成した場合に3以外の値が適用されている方がいるみたいなので気になっていました。ありがとうございます!

  5. hearty より:

    SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    初めまして、heartyと申します。
    現在、6台の物理ディスクを接続していまして、双方向ミラー+ストライピング環境にしたいと思っているのですが、
    記憶域プールを作成したところ、(1)が2、(2)が3となっているのですが、
    これは正しいのでしょうか?
    (2)を6に設定する方が正しい様な気もするのですが、御存知でしたら教えて頂けますでしょうか

  6. ださっち より:

    SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    > 初めまして、heartyと申します。
    > 現在、6台の物理ディスクを接続していまして、双方向ミラー+ストライピング環境にしたいと思っているのですが、
    > 記憶域プールを作成したところ、(1)が2、(2)が3となっているのですが、
    > これは正しいのでしょうか?
    > (2)を6に設定する方が正しい様な気もするのですが、御存知でしたら教えて頂けますでしょうか
    2×3で=6が正しいですね。

  7. hearty より:

    SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    ご返答ありがとうございます。
    6が正しいとのことですが
    (1)は2で、(2)が6と設定するのが
    正しいということでしょうか?

  8. ださっち より:

    SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    > ご返答ありがとうございます。
    > 6が正しいとのことですが
    > (1)は2で、(2)が6と設定するのが
    > 正しいということでしょうか?
    違います。
    (1)が 2 × (2)が 3 = (3)が 6
    です。

  9. hearty より:

    SECRET: 1
    PASS: 74be16979710d4c4e7c6647856088456
    ださっち様 お返事ありがとうございます。
    文書読解能力がなく大変お恥ずかしく思います。

タイトルとURLをコピーしました