【メモ】VMFS 6 上のシック形式の仮想ディスクには vmkfstools -K (--punchzero) が効かない

Share on:

Table of contents

概要

VMFS5 以前の VMFS データストアでは、シックプロビジョニングの仮想ディスクに vmkfstools -K コマンドを実行することで、ゼロクリアされたブロックの削除とシンプロビジョニングへの変換がおこなえました。

ゼロクリアされたブロックの削除

vmkfstools コマンドを使用して、ゼロクリアされたブロックを削除します。

-K|--punchzero

このオプションは、ゼロクリアされたすべてのブロックの割り当てを解除し、割り当て済みで有効なデータを含むブロックだけを残します。処理後の仮想ディスクはシン フォーマットになります。

VMFS6 ではシックプロビジョニングの仮想ディスクに対して vmkfstools -K の実行がサポートされなくなっています。

Storage vMotion to thin disk does not reclaim null blocks (2004155)

  1. Erase all unused blocks by running the command:

vmkfstools -K /path/to/disk-name.vmdk

Note: The punchzero (vmkfstools -K) command is not compatible with NFS datastores. This command is also not supported for thick provisioned disks on VMFS6

実際に試してみる

実際に VMFS6 上のシックプロビジョニングの仮想ディスクに vmkfstools -K コマンドを実行すると Function not implemented のエラーとなり、サポートされていないことが分かります。

1# vmkfstools -c 1G thickdisk.vmdk
2Create: 100% done.
3# vmkfstools -K thickdisk.vmdk
4vmfsDisk: 1, rdmDisk: 0, blockSize: 1048576
5Hole Punching: 3% done.
6Could not punch hole in disk 'thickdisk.vmdk': Function not implemented

シンプロビジョニングの仮想ディスクは問題なく vmkfstools -K コマンドが実行できます。

1# vmkfstools -c 1G -d thin thindisk.vmdk
2Create: 100% done.
3# vmkfstools -K thindisk.vmdk
4vmfsDisk: 1, rdmDisk: 0, blockSize: 1048576
5Hole Punching: 100% done.

シンプロビジョニングへの変換

シンプロビジョニングの仮想ディスクへの変換は素直に Storage vMotion やコールド移行で実施しましょう。

もし仮に vCenter Server が無い環境であれば、一例として OVF テンプレートのエクスポートとデプロイで対応する、vmkfstools でシンプロビジョニングとして仮想ディスクをクローンする方法が考えられます。

ゼロクリアされたブロックの回収

上述したように、シンプロビジョニングであれば vmkfstools -K は使用できるため、シンプロビジョニングに変換した後にゲスト側でディスクの未使用領域の0埋めを行ってから、仮想マシンを停止して vmkfstools -K で回収する方法が考えられます。

ただ、そもそも0埋めされた領域はデータストアの移行でシックからシンに変換した時点で回収されるので1、事前にゲスト側で0埋めを行っておけば Storage vMotion で対応でき、仮想マシンを停止する必要はなくなります。

なお、ゲストでのゼロクリアは従来どおり SDelete や dd などのツールを使用します。

1> SDelete -z C:
1# dd if=/dev/zero of=/dummy
2# rm /dummy

  1. 仮想ディスクが元々シンプロビジョニングの場合は、KB2004155 の通りデータストアの移行では回収されません。 ↩︎