こんにちは、AWS担当のwakです。
現在弊社では社内サーバーをAWSに移行するための作業の真っ最中です。ファイルサーバーも移行するのですが、この作業を始めるにあたり、Windows 8/Windows Server 2012から導入された「記憶域プール」を試しました。Windows Server 2012は(その名の通り)2012年からなのでだいぶ今さら感はありますが……
これまでできなかったこと
サーバーをEC2で立てて利用していくうち、ディスクの空き容量が足りなくなることがあります。ここでディスクの空き容量を増やす場合、通常ですと
- EBSのスナップショットを作成する
- そのスナップショットをもとに新たなEBSを復元する(その際に容量を増やす)
- 既存のEBSと取り替える
という手順を踏むことになります。物理サーバーよりははるかに簡単とはいえ、それでも手間も時間もかかりますし、整合性を保つためにはディスクが利用できない時間帯もできてしまいます。
これに対して記憶域プールを使うと、物理ディスク(=EBS)そのものを新規に追加して、既存のドライブをそのまま拡張することができます。この作業はオンラインで実行可能だということですから試すほかありません。
やったこと
- Windows Server 2012 R2のインスタンスをEC2で立ち上げる
- 記憶域プールを用意し、Dドライブを作る
- Dドライブをファイルでいっぱいにする
- 後からEBSを追加し、 オンラインで Dドライブを拡張する
記憶域プールについて
記憶域プール(Storage Space Pools)とは
複数の物理ディスクをまとめて1つの仮想的な領域として使える機能です。
仮想ディスク(Virtual Disk)とは
記憶域プールの中に作成する領域のことで、通常の物理ディスクドライブ(以下物理ディスクと呼びます)に相当します。記憶域プール自体が複数の物理ディスクの寄せ集めですから、1個の仮想ディスクは複数の物理ディスクにまたがって存在できる点が異なります。1つの記憶域プールの中には複数の仮想ディスクを作成することができます。
ボリューム(Volume)とは
ボリュームはボリュームです。物理ディスクや仮想ディスクをフォーマットしてボリュームを割り当てればDドライブやEドライブとして利用できることになります。
ここまでをまとめるとこんな形になります。
レイアウト方式
仮想ディスクを作る(記憶域プールの中にレイアウトする)ときには3つの選択肢があります。
- シンプル……RAID-0のように冗長性ゼロで全ての容量をユーザーが使う
- ミラー………RAID-1のようにミラーリングを行う
- パリティ……RAID-5またはRAID-6のようにパリティビット用領域を持たせる
プロビジョニング方式(provisioning)
ディスクにサイズを割り当てるときの方法をプロビジョニングと呼びます。仮想ディスクを作成するときには、たとえば物理的には1TB分しかディスクがなくても10TB分の領域を予め確保する「シン・プロビジョニング(thin provisioning)」が選べます。もちろん実際に1TB分以上のデータを格納することはできませんが、実残容量が減ってきたときに*1物理ディスクを記憶域プールに追加して容量を増やせば良いのでイニシャルコストが削減できます。もちろん、ディスクに実在する領域から固定のサイズを割り当てる「固定プロビジョニング(thik provisioning または fat provisioning)」も選べます。
どちらを選んだとしても、仮想ディスクは後から物理ディスクを追加してサイズを拡張することができます。この自由度が最大の利点です。
記憶域階層
SSDとHDDを混ぜて記憶域プールを作成した場合、よくアクセスするデータはSSDに、利用頻度が低いデータはHDDへ自動的に移動して全体のパフォーマンスを上げる機能です(Windows Server 2012 R2から)。ただし、上記の「シン・プロビジョニング」とは両立できません。
今回はこの記憶域プールの作成、仮想ディスクの拡張、ボリュームの拡張をAWS上で試してみます。
記憶域プールを作る
インスタンスの準備
まず普通にWindows Server 2012 R2のインスタンスを立ち上げます。データ用ドライブとして2つめのEBSを追加しました。記憶域プールを試すだけならサイズは小さめで構いませんが、最低でも4GB以上の容量が必要です。
ディスクのリセット
サーバーマネージャーを起動して、利用するディスクを「リセット」します。この操作によりディスクの内容は全てクリアされます。これでディスクを記憶域プールに参加させる準備ができます。
記憶域プールの作成
「記憶域プール」から新しい記憶域プールを作成します。名前は適当で、「割り当て」は「自動」を選びましょう。
これで物理ディスク1台からなる記憶域プールが作成できます。
仮想ディスクの作成
記憶域プールができたので、この中に仮想ディスクを作ります。
上述の通り、物理ディスクをどのように利用するかで3つの選択肢がありますが、ここでは「シンプル」を選択します。この方式では一切の冗長化は行われません。どれか1つの物理ディスク(この場合EBS)が破損したらすべてのデータが読めなくなります。
ここではプロビジョニングの種類を選びます。「最小限」がシン・プロビジョニングを意味します。ここでは「固定」を選びました。
ボリュームの作成
これで仮想ディスクができたので、最後にボリュームを作成します。仮想ディスクは物理ディスクと同じように扱えるので、あえてお馴染みの「コンピューターの管理」→「ディスクの管理」から作成することもできます。
ダミーデータでディスクを埋める
このDドライブにダミーのデータを作成して容量をいっぱいにします。
D:\>fsutil file createnew c:\dummy.dat 1000000000 ファイル c:\dummy.dat が作成されました D:\>for /L %i in (1,1,4) do copy c:\dummy.dat d:\dummy%i.dat D:\>copy c:\dummy.dat d:\dummy1.dat 1 個のファイルをコピーしました。 D:\>copy c:\dummy.dat d:\dummy2.dat 1 個のファイルをコピーしました。 D:\>copy c:\dummy.dat d:\dummy3.dat 1 個のファイルをコピーしました。 D:\>copy c:\dummy.dat d:\dummy4.dat 1 個のファイルをコピーしました。 D:\>
このコマンドでは任意の容量を持ったダミーのファイルを作成することができます。容量は予約されるだけで実際のデータの書き込みは行われません(したがってファイル作成も一瞬で終わります)。これをファイルコピーで「実体化」させて本当に空き容量を減らしておきます。
記憶域プールを拡張する
空き容量がなくなったので、EBSを追加してDドライブの空き容量を増やしてみましょう。
AWSのコンソールでEBSを追加
再度5GBのEBSを作成し、このインスタンスにアタッチします。作成してからインスタンスが認識するまで数分程度です。
記憶域プールに追加
「オンラインにする」→「初期化」→「ディスクのリセット」で追加する準備をして、記憶域プールのメニューから「物理ディスクの追加」を行い、追加したEBSを記憶域プールに加えます。
仮想ディスクを拡張
仮想ディスクを拡張します。
ボリュームを拡張
ボリュームを拡張します。
まとめ
名前だけなら以前から知っていた機能でしたが実際に使うのは初めてで、その便利さとお手軽さに驚きました。何かを試すためのハードルは以前より圧倒的に下がっているので、ぐずぐずしないで新しいものは触ってみるべきですね。それでは!
*1:減ってくるとイベントログが出ます