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

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

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

シンプロビジョニングされた仮想ディスクの使用時に発生する可能性のある問題
シンプロビジョニングされた仮想ディスクの使用は、必ずしも順調に進むとは限りません。注意すべき点や、対処の準備をしておくべき問題がいくつかあります。
仮想マシンが使用不能になってしまう例を考えてみましょう。たとえば、20GBのデータストアがあり、その上で3台の仮想マシンが実行されているとします。 各仮想マシンには、最大サイズ10GBに設定されたシンプロビジョニングされた仮想ディスクが割り当てられています。(この手法は" “オーバープロビジョニング” "と呼ばれます。つまり、仮想ディスクに物理的に占有できる容量よりも多くのスペースを割り当てるのです。これは、必要に応じて物理ストレージを追加することでシステムを拡張できるため、よく行われる手法です。) 各仮想ディスクのファイルサイズは、データが追加されるにつれて拡大し、データストアに空き領域がなくなるまで続きます。例えば、VM1が8GB、VM2が7GB、VM3が4GBを占有している場合のように、データストアの空き領域が1GBしか残っていないと、状況は危機的になります。
仮想マシン内での通常のファイル削除方法では、シンプロビジョニングされた仮想ディスクを縮小することはできません。これらの仮想マシンのいずれかに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 Storage Distributed Resource Scheduler
前述の通り、シンプロビジョニングされたディスクを手動で縮小する方法について説明しました。しかし、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 環境にデータストア クラスタが存在しない場合は、以下の手順に従って新しいデータストア クラスタを作成および設定してください:
- [ここ](https://example.com) に移動
vCenter > DatacentersvSphere Web Client で。 - データセンターを右クリックし、[選択] をクリックします
New Datastore Cluster. - データストア・クラスタの名前を入力し、その横にあるチェックボックスにチェックを入れてください
"Turn On Storage DRS". - 必要な自動化設定、I/O関連機能、および詳細オプションを選択してください。
- クリック
OK完了する。
結論
このブログ記事では、シック・プロビジョニングとシン・プロビジョニングの違いをより深く理解するために、仮想ディスクの種類を検討し、それぞれのメリットとデメリットを比較しました。イージー・ゼロ化されたシック・プロビジョニングディスクは、パフォーマンスとセキュリティの面で最も優れていますが、十分な空きストレージ容量が必要であり、作成に時間がかかります。 レイジー・ゼロ化されたシック・プロビジョニング・ディスクは作成時間が短いという利点がありますが、イーガー・ゼロ化されたディスクほど高速ではなく、セキュリティ面でも劣ります。シン・プロビジョニング・ディスクは、ディスク作成時にデータストアのスペースを節約するのに最適な選択肢です。
利用可能な物理スペースよりも大きな最大サイズで仮想ディスクを作成し("オーバープロビジョニング")、将来的に物理ストレージを追加することは可能ですが、物理ディスクの空き容量が満杯になり、シンプロビジョニングされたディスクがデータ増加に対応して拡張できなくなった場合、仮想マシンが使用不能になることに注意してください。そのため、空き容量を常に確認することを忘れないでください。 また、ストレージの追加を避け、占有スペースを縮小する必要がある場合のために、シンプロビジョニングされた VMware 仮想ディスクを縮小する方法についても解説しました。