厚プロビジョニングと薄プロビジョニング:その違いとは?
この記事では、仮想ディスク設定におけるストレージの事前割り当てについて詳しく検討し、シック・プロビジョニングとシン・プロビジョニングとは何か、その違いは何か、そしてこれらのストレージ事前割り当て方式のうち、どの方式がお客様のインフラストラクチャに適しているかを明らかにしていきます。
シック・プロビジョニング
シック・プロビジョニングは、ストレージの事前割り当ての一種です。シック・プロビジョニングでは、仮想ディスクの作成時に、そのストレージ容量の全量が物理ストレージ上に事前に割り当てられます。シック・プロビジョニングされた仮想ディスクは、作成当初からデータストア内で割り当てられた領域をすべて占有するため、その領域は他の仮想マシンでは使用できなくなります。
シック・プロビジョニングされた仮想ディスクには、以下の 2 つのサブタイプがあります。
- A
Lazy zeroed diskこれは、作成時に全容量を占有するディスクですが、この領域には物理メディア上に古いデータが残っている場合があります。この古いデータは消去も上書きもされていないため、新しいデータをブロックに書き込む前に、 “ゼロ埋めを行う必要があります” 。このタイプのディスクは作成が速いですが、新しいブロックに対するIOPS(1秒あたりの入出力操作数)が増加するため、最初の書き込み時のパフォーマンスは低下します。 - ある
Eager zeroed diskこれは、作成時点で必要な領域をすべて確保し、物理メディア上の以前のデータをすべて消去したディスクです。イーガー・ゼロ化ディスクの作成には、ディスク全体にゼロが書き込まれるため時間がかかりますが、最初の書き込み時のパフォーマンスは向上します。このシック・プロビジョニング仮想ディスクのサブタイプは、フォールトトレランスなどのクラスタリング機能をサポートしています。

データセキュリティ上の理由から、シックプロビジョニングされた仮想ディスクでは、レイジー・ゼロイングよりもイーガー・ゼロイングの方が一般的です。その理由は、VMDKを削除しても、データストア上のデータは完全に消去されず、オペレーティングシステムが上書きを行うまで、ブロックは単に”利用可能”としてマークされるだけだからです。 このデータストア上にイーガー・ゼロイングが適用された仮想ディスクを作成すると、ディスク領域は完全に消去(つまりゼロ化)されるため、悪意のある者が専用のサードパーティ製ソフトウェアを使用した場合でも、以前のデータを復元することはできなくなります。
シンプロビジョニング
シンプロビジョニングは、ストレージの事前割り当てのもう1つのタイプです。 シンプロビジョニングされた仮想ディスクは、当初必要な容量のみを使用し、需要に応じて時間の経過とともに容量を拡張します。
たとえば、30GBの新しいシンプロビジョニング仮想ディスクを作成し、そこに10GBのファイルをコピーした場合、結果として生成されるVMDKファイルのサイズは10GBになりますが、シックプロビジョニングのディスクを選択していた場合は、30GBのVMDKファイルが作成されていたことになります。

シンプロビジョニングされた仮想ディスクは、作成が迅速で、ストレージ容量の節約に役立ちます。シンプロビジョニングされたディスクのパフォーマンスは、レイジーゼロ化されたシックプロビジョニングされたディスクよりも優れているわけではありません。これは、どちらのディスクタイプでも、新しいブロックにデータを書き込む前にゼロを書き込む必要があるためです。なお、シンプロビジョニングされた仮想ディスクからデータを削除しても、ディスクサイズは自動的に縮小されない点に注意してください。 これは、オペレーティングシステムがファイルシステム内のファイル本体への参照であるファイルテーブルのインデックスのみを削除し、 “で削除された” ファイルに属していたブロックを”空き”としてマークし、新しいデータの書き込みが可能になるようにするためです。これが、ファイルの削除が瞬時に行われるように見える理由です。もし、削除されたファイルが占有していたブロックにゼロを書き込む完全な削除であった場合、そのファイルのコピーとほぼ同じ時間がかかってしまうでしょう。 以下の簡略化した図を参照してください。

シンプロビジョニングされた仮想ディスクの使用時に発生する可能性のある問題
シンプロビジョニングされた仮想ディスクの使用は、必ずしも順調に進むとは限りません。注意すべき点や、対処の準備をしておくべき問題がいくつかあります。
仮想マシンが使用不能になってしまう例を考えてみましょう。たとえば、20GBのデータストアがあり、その上で3台の仮想マシンが実行されているとします。 各仮想マシンには、最大サイズ10GBに設定されたシンプロビジョニングされた仮想ディスクが割り当てられています。(この手法は” “オーバープロビジョニング” “と呼ばれます。つまり、仮想ディスクに物理的に占有できる容量よりも多くのスペースを割り当てるのです。これは、必要に応じて物理ストレージを追加することでシステムを拡張できるため、よく行われる手法です。) 各仮想ディスクのファイルサイズは、データが追加されるにつれて拡大し、データストアの空き容量がなくなるまで続きます。例えば、VM1が8 GB、VM2が7 GB、VM3が4 GBを占有している場合のように、データストアの空き容量が1 GBしか残っていない状況になると、事態は危機的になります。
仮想マシン内での通常のファイル削除方法では、シンプロビジョニングされた仮想ディスクを縮小することはできません。これらの仮想マシンのいずれかに1GBを超える新しいデータが書き込まれると、3台すべてが障害状態に陥り、稼働状態を復旧させるには、1台以上の仮想マシンを別のデータストアに移行する必要があります。
ファイルを削除した後、シンプロビジョニングされた仮想ディスクのサイズを縮小する方法
シンプロビジョニングされた仮想ディスクのVMDKファイルサイズを縮小するには、以前に削除したデータが占めていたブロックをゼロで上書きする方法を知っておく必要があります。その方法を見ていきましょう。
注: ディスクの縮小操作は、仮想マシンにスナップショットが含まれていない場合にのみ実行可能です。また、十分にご注意の上、ご自身の責任においてコマンドを実行してください。ディスク操作を行う前には、必ず重要なデータをすべてバックアップしてください。
Linux におけるシンプロビジョニングされた VMware ディスクの縮小
例を挙げてみましょう。10,266,496 KB(10GB)のVMDKファイルがあり(このサイズについては、仮想マシンが配置されているデータストア上のディレクトリを確認して把握しました)、ゲストOSとしてLinuxがインストールされている仮想ディスクを縮小したいとします。 この仮想ディスク上の不要なファイルを削除してみることもできます。ただし、Linuxではファイルを削除した後、ブロックが自動的にゼロ埋めされるわけではないため、手動で処理する必要があります。これを行うには、 dd データのコピーや変換を行うための(データ複製)ユーティリティ。このツールは、すべてのLinuxシステムで利用可能です。
注: 実行する前に dd このユーティリティを使用するには、データストアに十分な容量があることを確認する必要があります(たとえば、ESXi サーバーの場合、vSphere クライアントの”ストレージ”セクションでストレージ容量を確認できます。以下の手順に従ってください)。 Configuration > Storage).
それでは、 dd ユーティリティ。
-
まず、ゲストのLinux仮想マシン上の空き容量を、
df -hコマンド:root@test-virtual-machine:/# df -hコンソールには次のような出力が表示されます:
Filesystem Size Used Avail Use% Mounted on
udev 469M 0 469M 0% /dev
tmpfs 99M 6,3M 92M 7% /run
/dev/sda7 17G 8,8G 6,4G 58% /
tmpfs 491M 116K 491M 1% /dev/shm
tmpfs 5,0M 4,0K 5,0M 1% /run/lock
tmpfs 491M 0 491M 0% /sys/fs/cgroup
/dev/sda1 945M 121M 760M 14% /boot
/dev/sda6 3,7G 13M 3,5G 1% /var/log
tmpfs 99M 36K 99M 1% /run/user/1000この出力から、
/(root)パーティションには、8.8 GBのファイルが含まれています。 -
ルートパーティションにある不要なファイルを数ギガバイト分削除してみましょう。コンソールで次のコマンドを実行すると、次のような表示が出ます。
df -h /コマンド:Filesystem Size Used Avail Use% Mounted on
/dev/sda7 17G 4,7G 11G 31% /したがって、ルートパーティションには現在4.7 GBのファイルが格納されています。しかし、VMDKファイルが保存されているディレクトリに移動してみると、そのサイズは依然として10,266,496 KB(10 GB)であることがわかります。
-
それでは、空き領域をゼロで埋めていきます(この例では、利用可能な11 GBのうち10 GBを埋めます)。まず、次のように入力します。
cdその後に、ゼロ埋めを行う必要があるパーティションがマウントされているディレクトリ名を指定します(この例ではcd /(ルートパーティションに移動したいからです)。その後、必要に応じて変数を変更し、次のコマンドを実行します:dd bs=1M count=10240 if=/dev/zero of=zeroこのコマンドでは:
ddスーパーユーザーとしてのみ実行可能です。-
bsブロックサイズを設定します(例:bs=1M(これにより、ブロックサイズは1メガバイトになります)。 -
countコピーするブロックの数を指定します(デフォルトはdd(入力データが尽きるまで、あるいは無限に実行し続けるため)。今回のケースでは、10,240 MB がゼロで埋めるべき空き領域の容量であるため、1メガバイト単位のブロック数は 10240 となります。 -
ifは、 “の入力ファイル”を表します。ここでは、データをコピーする元のファイルを指定する必要があります。今回の例では、/dev/zero– 読み取りたいだけヌル文字を返す特別なファイル(疑似デバイス)。 -
of“の出力ファイル”を指します。ここでは、データを書き込みまたは貼り付けたい保存先を設定します(この例では、ファイル名はzero).
上記のコマンドを実行すると、VMDKファイルのサイズが大きくなります。コマンドが正常に完了した後の出力は次のようになります:
10240+0 records in
10240+0 records out
10737418240 bytes (10 GB) copied, 59,4348 s, 181 MB/s
Command has been completed successfully.さて、VMDKファイルのサイズは現在11,321,856 KB(10.8 GB)となっており、ファイルが拡大したことがわかります。また、
df -h /このコマンドをもう一度実行すると、次のような結果が表示されます:Filesystem Size Used Avail Use% Mounted on
/dev/sda7 17G 15G 569M 97% /これは、ルートパーティションのほぼ全体(つまり97%)が使用済みであることを意味します。これは、以前 “で利用可能だった” の空き領域の大部分をゼロで埋めたためです。これで、シンプロビジョニングされた仮想ディスクを縮小する準備が整いました。
注: シュリンキングを実行するには、VMware Tools をインストールする必要があります。
-
VMware ESXi または VMware Workstation 上で実行されている仮想マシンについては、Linux ゲスト OS で次の 2 つのコマンドを実行します。a) ディスクパーティションが利用可能であることを確認するために、次のコマンドを実行します:
root@test-virtual-machine:/# vmware-toolbox-cmd disk list
このケースでは、次のような出力が表示されます(つまり、利用可能なパーティションの一覧が表示されます):
/
/boot
/var/log
ルートパーティションが存在するため、処理を続行できます。b) パーティションを縮小するには、次のコマンドを実行します:
root@test-virtual-machine:/# vmware-toolbox-cmd disk shrink /
今回のケースでは、次のような出力が表示されます:
Please disregard any warnings about disk space for the duration of shrink process.
Progress: 100 [===========>]
Disk shrinking complete.これで、縮小したVMDKファイルのサイズは5,323,456 KB(つまり5.08 GB)となり、以前の10.8 GBよりも大幅に小さくなりました。
注: ゲスト仮想マシンがESXiサーバー上で実行されている場合は、各ブロックをゼロで埋めた後、以下の手順に従ってください:
- 仮想マシンの電源を切るか、サイズを縮小したい仮想ディスクを取り外してください。
- SSHクライアントを使用して、ESXiホストに接続します。
- 次のページに移動してください。
Virtual Machine Folder. - 次のコマンドでディスク使用状況を確認します。
du -h. - 実行
vmkfstools -K test-virtual-machine.vmdk. - 次のコマンドでディスク使用状況を確認します。
du -hまたしても。
Windows でのシンプロビジョニングされた VMware ディスクの縮小
Linuxと同様、Windowsでもファイルを削除した後、ブロックは自動的にゼロ埋めされません。Windows仮想マシンの対象ディスクの空き領域をゼロ埋めするには、以下をダウンロードする必要があります。 SDelete – MicrosoftのSysinternals Suiteに含まれる無料のユーティリティ – ダウンロードしたアーカイブからファイルを解凍して、 c:program filessdelete
次に、以下の手順に従ってください:
- 実行
cmd -
次のディレクトリに移動してください。
SDeleteが配置されています。今回のケースでは、それは次の通りです:cd c:program filessdelete -
コンソール内の各パーティションについて、
sdelete -zコマンド。今回のケースでは、次のような内容になっています:sdelete -z c:
sdelete -z d:
これらのコマンドを実行すると、指定されたパーティションの未使用領域が埋められ、シンプロビジョニングされたディスク上の空き領域がすべてゼロで上書きされます。処理が完了するまで数分間お待ちください。処理中、VMDKファイルは最大サイズまで拡張されます。
-
Windows 仮想マシンに VMware Tools がインストールされていることを確認してください。デフォルトでは、VMware Tools は
c:program filesvmwarevmware tools次のコマンドを入力して、このディレクトリに移動してください:
cd c:program filesvmwarevmware tools -
利用可能なディスクパーティションを表示するには、次のように入力してください:
vmwaretoolboxcmd disk list -
必要なディスクパーティションを縮小します。今回の例では、次のコマンドを実行しました:
vmwaretoolboxcmd disk shrink c:
vmwaretoolboxcmd disk shrink d:
プログラムによるディスクの縮小処理が完了するまでお待ちください。
この方法は、VMware ESXi または VMware Workstation 上で実行されている仮想マシンに対して使用できます。
VMware ストレージ分散リソーススケジューラ
前述のように、シンプロビジョニングされたディスクを手動で縮小する方法について説明しました。しかし、vSphere でデータストアクラスターを使用している場合、仮想ディスク(シンプロビジョニングおよびシックプロビジョニングの両方)を管理するもう 1 つの方法があります。VMware は、シンプロビジョニングされた仮想ディスクが配置されているディスクストレージの容量オーバーフローを回避し、I/O リソースの負荷分散を行うために、データストアクラスター内での仮想ディスクの自動移行機能を提供しています。
ESXi サーバーに複数の共有データストアがマウントされている場合は、Storage Distributed Resource Scheduler(Storage DRS)を設定できます。Storage DRS は、VMFS および NFS ストレージを効率的に管理するための vCenter Server のインテリジェントな機能であり、仮想マシンのディスクの配置と移行を自動的に行います。移行の推奨事項を手動で承認したい場合は、Storage DRS を手動モードに設定することもできます。
Storage DRS を有効にするには、以下の手順に従ってください:
- vSphere Web Client で、データストア クラスタに移動します。
- [移動]
vCenter > Datastore Clusters. - データストア・クラスタを選択し、[クリック] をクリックしてください
Manage > Settings > Services > Storage DRS. - クリック
Edit. - 必要な自動化設定、I/O関連の機能、および詳細オプションを設定してください。

- クリック
OK完了する。
vSphere 環境にデータストア クラスタが存在しない場合は、以下の手順に従って新しいデータストア クラスタを作成および設定してください。
- [ここに移動]
vCenter > DatacentersvSphere Web Client 内で。 - データセンターを右クリックし、[ ] を選択します。
New Datastore Cluster. - データストア・クラスタの名前を入力し、その横にあるチェックボックスにチェックを入れてください。
"Turn On Storage DRS". - 必要な自動化設定、I/O関連機能、および詳細オプションを選択してください。
- クリック
OK完了する。
結論
このブログ記事では、シックプロビジョニングとシンプロビジョニングの違いをより深く理解するために、仮想ディスクの種類を検討し、それぞれの長所と短所を比較検討しました。イージー・ゼロ化されたシックプロビジョニングディスクは、パフォーマンスとセキュリティの面で最適ですが、十分な空きストレージ容量が必要であり、作成に時間がかかります。 レイジー・ゼロ化されたシック・プロビジョニング・ディスクは、作成時間が短いという利点がありますが、イーガー・ゼロ化されたディスクほど高速ではなく、セキュリティ面でも劣ります。シン・プロビジョニング・ディスクは、ディスク作成時にデータストアの容量を節約するのに最適な選択肢です。
利用可能な物理スペースよりも大きな最大サイズで仮想ディスクを作成し(“オーバープロビジョニング”)、将来的に物理ストレージを追加することも可能ですが、物理ディスクの空き容量が満杯になり、シンプロビジョニングされたディスクがデータ増加に対応するために拡張できなくなった場合、仮想マシンが使用不能になることに注意してください。そのため、空き容量を常に確認することを忘れないでください。 また、ストレージを追加せずに占有スペースを縮小したい場合のために、シンプロビジョニングされた VMware 仮想ディスクを縮小する方法についても解説しました。