この記事では、仮想ディスク設定のストレージの事前割り当ての側面を詳しく考察し、スクシンプロビジョニングとスィンプロビジョニングが何であるか、それらの違いは何であるか、そしてこれらのストレージの事前割り当てのタイプのうちどちらがインフラストラクチャーにとってより良いかを見つけます。
スィンプロビジョニング
スィンプロビジョニングは、ストレージの事前割り当てのタイプです。スィンプロビジョニングでは、仮想ディスクが作成されるときに物理ストレージ上に仮想ディスクのストレージ容量の完全な量が事前に割り当てられます。スィンプロビジョニングされた仮想ディスクは、作成時からそれに割り当てられたすべてのスペースをデータストアで消費するため、他の仮想マシンによって使用されるスペースは利用できません。
スィンプロビジョニングされた仮想ディスクには、2つのサブタイプがあります:
- A Lazy zeroed disk is a disk that takes all of its space at the time of its creation, but this space may contain some old data on the physical media. This old data is not erased or written over, so it needs to be “zeroed out” before new data can be written to the blocks. This type of disk can be created more quickly, but its performance will be lower for the first writes due to the increased IOPS (input/output operations per second) for new blocks;
- イーガーゼロ化されたディスクは、作成時に必要なスペースがすべて取得され、物理メディア上の以前のデータが完全に消去されます。イーガーゼロ化されたディスクの作成には時間がかかりますが、ディスク全体にゼロが書き込まれるため、最初の書き込み時のパフォーマンスが高速です。このサブタイプのスィンプロビジョニングされた仮想ディスクは、障害耐性などのクラスタリング機能をサポートしています。
データセキュリティの観点から、太いプロビジョニングされた仮想ディスクでは、怠惰なゼロ埋め込みよりも積極的なゼロ埋め込みが一般的です。なぜなら、VMDKを削除すると、データストア上のデータが完全に消去されないためです。ブロックは単に利用可能としてマークされ、それを上書きするまで、オペレーティングシステムによって簡単に消去されません。このデータストア上に積極的にゼロ埋め込みされた仮想ディスクを作成すると、ディスク領域が完全に消去(つまり、ゼロ埋め込み)されるため、特殊なサードパーティのソフトウェアを使用しても、以前のデータを回復しようとする者が防がれます。
スリムプロビジョニング
スリムプロビジョニングは、もう一つのストレージの事前割り当てのタイプです。スリムプロビジョニングされた仮想ディスクは、最初に必要なスペースのみを消費し、需要に応じて時間とともに成長します。
例えば、新しいスリムプロビジョニングされた30GBの仮想ディスクを作成し、そこに10GBのファイルをコピーした場合、生成されるVMDKファイルのサイズは10GBになりますが、太いプロビジョニングされたディスクを使用した場合は30GBのVMDKファイルが生成されます。
薄くプロビジョニングされた仮想ディスクは、ストレージスペースを節約するのに役立ちますが、そのパフォーマンスは遅延ゼロで厚くプロビジョニングされたディスクよりも高くありません。なぜなら、これらのディスクタイプの両方において、新しいブロックにデータを書き込む前にゼロを書き込む必要があるからです。薄くプロビジョニングされた仮想ディスクからデータを削除しても、ディスクサイズは自動的に縮小されません。これは、オペレーティングシステムがファイルシステム内のファイル本体を参照するファイルテーブルからインデックスのみを削除し、削除されたファイルに属していたブロックを無料および新しいデータが書き込まれるためにアクセス可能にマークするためです。これが、ファイルの削除を即時に見る理由です。削除されたファイルが占有していたブロックにゼロが書き込まれる完全な削除の場合、対象のファイルをコピーするのとほぼ同じ時間がかかります。簡単なイラストを以下に示します。
薄くプロビジョニングされた仮想ディスクを使用する際に発生する可能性のある問題
薄くプロビジョニングされた仮想ディスクを使用するのは常にスムーズではありません。対処する準備が必要ないくつかの問題があります。
仮想マシンが使用不能になる例を考えてみましょう。たとえば、20GBのデータストアに3つの仮想マシンが実行されています。各仮想マシンには、最大サイズが10GBのシンプロビジョニングされた仮想ディスクが設定されています。(この実践は「オーバープロビジョニング」と呼ばれます – 仮想ディスクに物理的に占有できるよりも大きなスペースを割り当てます。これはよく行われ、必要に応じて物理ストレージを追加してシステムをスケーリングできるためです。)データが追加されると、各仮想ディスクのファイルサイズが拡大し、データストアに空き容量がなくなるまで拡大します。データストアに空き容量が1GBしかない場合、状況は深刻になります。たとえば、VM1が8GB、VM2が7GB、VM3が4GBを占有している場合など。
仮想マシン内でのファイル削除の通常の方法では、シンプロビジョニングされた仮想ディスクを縮小するのに役立ちません。これらの仮想マシンのいずれかに1GB以上の新しいデータが書き込まれると、3つすべての仮想マシンが失敗し、1つ以上の仮想マシンを別のデータストアに移行して実行状態を復元する必要があります。
ファイルを削除した後にシンプロビジョニングされた仮想ディスクのサイズを縮小する方法
シンプロビジョニングされた仮想ディスクのVMDKファイルサイズを縮小するには、以前に削除したデータが占有していたブロックをゼロにする方法を知る必要があります。それをやり方を見てみましょう。
注:ディスクの縮小操作は、仮想マシンにスナップショットが含まれていない場合にのみ可能です。また、注意してコマンドを実行し、自己責任で行ってください。ディスクの操作を行う前に、すべての重要なデータをバックアップしてください。
LinuxでシュリンクされたThin-Provisioned VMwareディスク
例を考えてみましょう:私たちの仮想マシンが配置されているデータストアのディレクトリに移動して、サイズが10,266,496 KB(10GB)のVMDKファイルの存在を確認し、ゲストLinux OSがインストールされている仮想ディスクを縮小したいとします。この仮想ディスク上の不要なファイルを削除しようとすることができますが、Linuxはファイルを削除した後に自動的にブロックをゼロにしません。これを自分で行う必要があります。これは、データのコピーと変換に使用されるdd
(データ複製)ユーティリティを使用して行うことができます。このツールはすべてのLinuxシステムで利用可能です。
注意:dd
ユーティリティを実行する前に、データストアに十分な容量があることを確認する必要があります(たとえば、ESXiサーバーの場合、vSphereクライアントのストレージセクションでストレージ容量を確認できます – 設定 > ストレージ)。
dd
ユーティリティを使用しましょう。
-
最初に、
df -h
コマンドを使用して、ゲストLinux仮想マシンの空き容量を確認します: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
この出力から、
/
(ルート)パーティションに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
は「input file」を表します。ここではデータをコピーしたいソースを指定します。今回は/dev/zero
です。これは、読み取りたいだけのヌル文字を提供する特別なファイル(擬似デバイス)です。 -
of
は「output file」を表します。ここではデータを書き込み/貼り付けたい先を設定します(今回の場合、ファイル名はzero
です)。
上記のコマンドを実行した後、VMDKファイルのサイズが拡大します。成功裏に完了したコマンドの出力は次のとおりです:
10240+0 レコード入力 10240+0 レコード出力 10737418240 バイト(10 GB)がコピーされ、59.4348秒かかり、181 MB/s コマンドは正常に完了しました。
したがって、今やVMDKファイルのサイズは11,321,856 KB(10.8 GB)であり、拡張されています。また、
df -h /
コマンドを再度実行すると、次のように表示されます:ファイルシステム サイズ 使用済み 利用可能 使用率 マウントポイント /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 /
これは私たちの場合に表示される出力です:
縮小プロセスの間にディスクスペースに関する警告は無視してください。 進行状況: 100 [===========>] ディスクの縮小が完了しました。
今、縮小されたVMDKファイルのサイズは、5,323,456 KB(つまり、10.8 GBからはるかに少ない5.08 GB)です。
注:
ゲスト仮想マシンがESXiサーバー上で実行されている場合、0で埋められたブロックを次の手順に従って削除できます:
- 仮想マシンをシャットダウンするか、縮小する仮想ディスクを切断します。
- ESXiホストにSSHクライアントを使用して接続します。
- 仮想マシンフォルダーに移動します。
-
du -h
を使用してディスク使用量を確認します。 -
vmkfstools -K テスト仮想マシン.vmdk
を実行します。 -
du -h
を再度実行してディスク使用量を確認します。
WindowsでVMwareの薄いプロビジョニングディスクを縮小する
WindowsはLinuxのように、ファイルを削除した後、自動的にブロックをゼロにしません。Windows仮想マシンのターゲットディスクの空き領域をゼロにするには、MicrosoftのSysinternals Suiteからの無料ユーティリティであるSDeleteをダウンロードし、ダウンロードしたアーカイブ内のファイルをc:\program files\sdelete
に解凍する必要があります。
次に、以下の手順に従います:
cmd
-
SDeleteがあるディレクトリに移動します。私たちの場合、それは次のようになります:
cd c:\program files\sdelete
-
コンソールの各パーティションに対して、
sdelete -z
コマンドを使用します。私たちの場合、次のようになります:sdelete -z c:
sdelete -z d:
これらのコマンドは、指定されたパーティション上の未使用領域を埋めることで、スレッドプロビジョニングされたディスク上の任意の空き領域をゼロにします。プロセスが終了するまで数分待ちます。プロセス中にVMDKファイルは最大サイズに拡張されます。
-
Windows仮想マシンにVMware Toolsがインストールされていることを確認してください。デフォルトでは、VMware Toolsは次の場所にインストールされます:
c:\program files\vmware\vmware tools\
次のディレクトリに移動するには、次のように入力してください:
cd c:\program files\vmware\vmware 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 > データストアクラスタに移動します。
- データストアクラスタを選択し、管理 > 設定 > サービス > Storage DRSをクリックします。
- 編集をクリックします。
- 必要な自動化設定、I/O関連の機能、および高度なオプションを構成します。
- 完了をクリックします。OK。
vSphere環境にデータストアクラスタがない場合は、新しいデータストアクラスタを作成して設定するために次の手順に従います:
- <vCenter&gt;データセンターに移動して、vSphere Webクライアントを使用します。
- データセンターを右クリックし、新しいデータストアクラスターを選択します。
- データストアクラスターの名前を入力し、「ストレージDRSをオンにする」のチェックボックスをオンにします。
- 必要な自動化設定、I/O関連機能、および高度なオプションを選択します。
- 完了するにはOKをクリックします。
結論
このブログ投稿では、仮想ディスクの種類を考慮し、太いプロビジョニングと薄いプロビジョニングのそれぞれの利点と欠点を比較して、その違いをよりよく理解しました。イーガー・ゼロド・シックプロビジョニングディスクは、パフォーマンスとセキュリティに最適ですが、十分な空きストレージスペースが必要であり、作成に多くの時間がかかります。レイジーゼロド・シックプロビジョニングディスクは、作成時間が短いため良いですが、イーガーゼロドディスクほどの速度を提供せず、セキュリティも低いです。薄いプロビジョニングディスクは、データストアスペースを作成時に節約するのに最適な選択肢です。
物理スペースよりも大きな最大サイズの仮想ディスクを作成し(「オーバープロビジョニング」)、将来的に物理ストレージを追加することができますが、物理ディスクスペースがいっぱいになり、薄いプロビジョニングディスクがデータを追加できなくなると、仮想マシンは使用できなくなります。したがって、無料スペースの量に注意を払うことを忘れないでください。また、ストレージを追加したくない場合や、使用スペースを減らす必要がある場合には、薄いプロビジョニングVMware仮想ディスクを縮小する方法も説明しました。
Source:
https://www.nakivo.com/blog/thick-and-thin-provisioning-difference/