pslaboが試したことの記録

はてなダイヤリーからはてなブログに引っ越してきました

この日記は現在実行中の減量記録を含む個人的なメモとして始めましたが、最近はコンピュータやガジェット、ハック、セキュリティネタのほうがメインになっております。

はてなダイヤリー時代はカテゴリ分けが適当だったのですが、これはそのうち直します。


VMwareのスナップショットのディスク使用量を減らしたい

仮想マシンのディスクファイルを可変に設定しているとディスクの使用状況に応じて容量が増加しますが、不要になったファイルを削除しても仮想ディスクファイル自体が小さくなるわけではありません。例外的に仮想ディスクファイルが小さくなるのは次のケースです。

  • 仮想マシンのOSにWindowsを使用している
  • 仮想ディスクファイルにゼロフィルされた未使用領域(0x00だけが書き込まれた連続領域)がある
  • 仮想マシンがシャットダウンされている

Windows仮想マシンでスナップショットのディスク使用量を減らす

Windows仮想マシンではVMwareの管理画面から「仮想マシンのクリーンアップ」で仮想ディスクファイルを小さくできます。これは仮想マシンのスナップショットにも適用できるため、明示的なゼロフィルが実施されていれば肥大化したスナップショットを切り詰める目的にも利用できます。

ゼロフィルのツールは様々なものがありますが、マイクロソフトのwebサイトからダウンロードできる sdelete というツールがよいと思います。

docs.microsoft.com

sdeleteの使用例を調べるとHDD破棄を目的としたゼロフィルでの用例が多いようですが、今回は仮想マシンのディスクイメージの切り詰めが目的ですので、次のように1回だけゼロフィルすればOKです。

sdelete.exe -p 1 -z C:

その他のOSでスナップショットのディスク使用量を減らせるか?

これは減らす方法はないようです。

例えばゲストOSがLinuxの場合につぎのように操作してゼロフィルしても、VMwareLinux仮想マシンでのゼロフィルによるクリーンアップをサポートしていないため、スナップショットの使用量を減らすことができません。

dd if=/dev/zero of=testfile status=progress bs=1M
rm testfile

スナップショットがない仮想マシンなら次のようにvmware-toolbox-cmdを実行しての切り詰めがサポートされています。

sudo vmware-toolbox-cmd disk list
sudo vmware-toolbox-cmd disk shrink /