VMwareゲストOSのディスク容量を削減する完全ガイド【vmware-toolbox-cmd disk shrink】

2013年5月7日


VMwareの仮想マシンを長期間使っていると、ゲストOS内でファイルを削除しているはずなのに仮想ディスクファイル(.vmdk)の容量が減らない、という状況に直面することがあります。

この記事では vmware-toolbox-cmddisk shrink コマンドを使い、仮想ディスクの未使用領域を安全に回収してファイルサイズを縮小する手順を、Linux・Windows それぞれのゲストOS向けに解説します。

実際に筆者が VMware Workstation・VMware Player 環境で手順を検証済みです。

VMwareのディスク肥大化の概念図:ゲストOS内の実使用量と仮想ディスクファイルサイズの差を示す図


なぜゲストOSのディスクは肥大化するのか

仮想ディスクのファイル容量が減らない理由を理解しておくと、対処方法の意味が分かりやすくなります。

ファイル削除とディスクの実態の違い

一般的なOSでファイルを削除するとき、実際に行われる処理は「ファイルのインデックス情報の削除」です。ファイルの実データが書き込まれているディスクの領域は、新しいデータが書き込まれるまで そのままの状態で残り続けます

これはホストOSでもゲストOSでも同様の仕組みです。しかし仮想ディスクにおいては、ゲストOS内でファイルを削除しても:

  • ゲストOS:「このブロックは空き領域」と認識

  • VMware(ホスト側):「このブロックは一度書き込まれたデータがある」と認識したまま

という状態になり、.vmdk ファイルは縮小されません。

仮想ディスクの2種類のモード

VMwareの仮想ディスクには以下の2種類があります:

|
モード
| 説明
| 肥大化の挙動
|

| シンプロビジョニング(Thin)
| 実際に使った分だけ拡張
| ファイル削除後も縮小しない
|

| シックプロビジョニング(Thick)
| 最初から最大容量を確保
| 常に最大サイズのまま
|

シンプロビジョニングの仮想ディスクは、データを書き込むたびに .vmdk ファイルが拡張されますが、ゲストOS内でファイルを削除しても自動的には縮小されません。これが「肥大化」の正体です。

シンプロビジョニング仮想ディスクの動作を示す図:データ追加時は拡張、削除後は縮小しない様子


前提条件

このガイドを進める前に、以下を確認してください。

  • ホスト環境: VMware Workstation / VMware Player(バージョン問わず)

  • ゲストOS: Linux(Ubuntu、CentOS、Debian等)または Windows

  • 必須: ゲストOS内に VMware Tools がインストール済みであること

  • 仮想ディスク形式: シンプロビジョニング(Thin Provisioned)の .vmdk

重要: VMware Tools がインストールされていない場合、vmware-toolbox-cmd コマンドが存在しないため、この手順は実行できません。VMware Tools は VMware のメニューから「VMware Tools のインストール」を選択してインストールしてください。

VMware Tools のインストール確認方法

Linux の場合:

vmware-toolbox-cmd -v
# 出力例: VMware Tools daemon version: 12.3.0.61624

Windows の場合(コマンドプロンプトまたは PowerShell):

"C:\Program Files\VMware\VMware Tools\VMwareToolboxCmd.exe" -v

バージョンが表示されれば VMware Tools は正常にインストールされています。


全体の流れ

このガイドは以下の4ステップで構成されています。

VMwareディスク縮小4ステップの作業フロー図


ステップ1: ゲストOS内で不要ファイルを削除する

まず仮想ディスクの縮小効果を最大化するために、ゲストOS内の不要ファイルを削除します。

Linux の場合

パッケージキャッシュの削除:

# Ubuntu / Debian 系
sudo apt-get clean
sudo apt-get autoremove -y

# CentOS / RHEL / Rocky Linux 系
sudo yum clean all
# または
sudo dnf clean all

ログファイルの整理:

# journald ログを直近7日分に制限
sudo journalctl --vacuum-time=7d

# 古いログファイルを手動で確認・削除
sudo du -sh /var/log/*
sudo find /var/log -name "*.gz" -delete

tmpファイルの削除:

sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*

Windows の場合

  • ディスククリーンアップcleanmgr.exe)を実行

  • 一時フォルダ%TEMP%)を手動で削除

  • ごみ箱を空にする

  • Windowsアップデートのキャッシュを削除(C:\Windows\SoftwareDistribution\Download\

よくあるミス: ごみ箱を空にせずに進めてしまうケースが多いです。ファイルシステム上はゴミ箱内のファイルも「使用中の領域」として扱われるため、必ず空にしてください。

ステップ1完了の確認: df -h(Linux)または「ディスクの管理」(Windows)で空き容量が増えていることを確認してください。


ステップ2: 未使用領域をゼロフィルする

disk shrink コマンドは内部で「未使用領域をゼロで埋める(wipe)」処理を行ってから縮小します。ただし明示的に wipe を先に実行しておくことで、shrink 処理の効率が上がります。

disk コマンドのサブオプション確認

まず利用可能なサブオプションを確認します:

# Linux
vmware-toolbox-cmd help disk

disk: perform disk shrink operations

Usage: vmware-toolbox-cmd disk  [args]

Subcommands:
   list: list available locations
   shrink : wipes and shrinks a file system at the given location
   shrinkonly: shrinks all disks
   wipe : wipes a file system at the given location

|
サブコマンド
| 処理内容
|

| list
| 縮小対象のマウントポイント(Linux)またはドライブ(Windows)を一覧表示
|

| wipe
| 指定した場所の未使用領域をゼロフィル(縮小はしない)
|

| shrink
| ゼロフィル + 仮想ディスクの縮小を一括実行
|

| shrinkonly
| すべてのディスクを縮小(ゼロフィル済み前提)
|

対象ディスクの一覧確認

# Linux
vmware-toolbox-cmd disk list

/
/boot

# Windows(コマンドプロンプトを管理者権限で実行)
"C:\Program Files\VMware\VMware Tools\VMwareToolboxCmd.exe" disk list

C:\

vmware-toolbox-cmd disk list の実行結果例

ステップ2完了の確認: disk list でマウントポイントが表示されれば、次のステップに進む準備ができています。


ステップ3: disk shrink コマンドで仮想ディスクを縮小する

いよいよ仮想ディスクの縮小を実行します。shrink コマンドは内部で wipe(ゼロフィル)と縮小を一括実行します。

Linux ゲストOSでの実行

ルート(/)を縮小する場合:

vmware-toolbox-cmd disk shrink /

/boot も縮小したい場合は別途実行します:

vmware-toolbox-cmd disk shrink /boot

実行中の表示例:

Shrinking disk...
[=====================================================] 100%
Disk shrink complete.

実行中は仮想マシンの操作が数十分間ほど制限されます(ディスク使用量が大きいほど時間がかかります)。目安として 50GB の仮想ディスクで20〜40分程度かかることがあります。

Windows ゲストOSでの実行

コマンドプロンプトを管理者権限で開き、以下を実行します:

"C:\Program Files\VMware\VMware Tools\VMwareToolboxCmd.exe" disk shrink C:\

管理者権限が必須です。 通常のコマンドプロンプトでは権限エラーが発生します。スタートメニューからコマンドプロンプトを右クリック →「管理者として実行」を選択してください。

Windows環境でVMwareToolboxCmd.exeをコマンドプロンプトから実行する様子

shrinkonly での一括縮小

すべてのディスクをまとめて縮小したい場合は shrinkonly を使います:

# Linux(すべてのマウントポイントを一括縮小)
vmware-toolbox-cmd disk shrinkonly

ステップ3完了の確認: 「Disk shrink complete.」のメッセージが表示されれば成功です。


ステップ4: 縮小結果を確認する

disk shrink が完了したら、ホストOS側で .vmdk ファイルのサイズを確認します。

# ホストOS(Linux/macOS)で仮想マシンフォルダのサイズを確認
du -sh ~/VMs/MyVM/
ls -lh ~/VMs/MyVM/*.vmdk

Windows ホストの場合は、エクスプローラーで仮想マシンフォルダを開き、.vmdk ファイルのプロパティからサイズを確認します。

VMware Workstation GUI からの確認・操作

VMware Workstation Pro / Fusion を使っている場合は、GUIからもディスク縮小を実行できます:

  • 仮想マシンの設定を開く

  • ハードディスクDefragment(最適化) または Compact(縮小) を選択

ただし GUI から操作する場合、VMware Tools の disk shrink ほど細かい制御はできません。


応用編: VMware ESXi / vSphere 環境での対応

個人向けの VMware Player / Workstation だけでなく、企業の仮想化基盤である ESXi / vSphere でも同様の問題が発生します。

ESXi での仮想ディスク最適化

ESXi 環境ではゲストOS内からの vmware-toolbox-cmd に加えて、Storage vMotionvmkfstools を使う方法もあります:

# ESXi ホストのシェルで実行(ESXi Shell を有効にして SSH 接続が必要)
vmkfstools -K /vmfs/volumes/datastore1/VM-Name/VM-Name.vmdk

-K オプション(Shrink)で仮想ディスクの未使用領域を回収します。

スナップショットが残っている場合の注意点

スナップショット(スナップショットチェーン)が存在する場合、disk shrink の効果は限定的になります。スナップショットを削除(統合)してからディスク縮小を行うことで、最大の効果が得られます。

# GUIメニュー: 仮想マシン → スナップショット → スナップショットマネージャー


トラブルシュート

|
症状
| 原因
| 解決策
|

| command not found: vmware-toolbox-cmd
| VMware Tools が未インストール
| VMware メニューから VMware Tools をインストール
|

| Shrink disk is disabled
| ディスクのスナップショットが存在する
| スナップショットをすべて削除してから再実行
|

| This operation is not supported
| Thick Provisioned ディスクを使用中
| シンプロビジョニングへの変換が必要(vmkfstools -i で変換)
|

| コマンド実行後にサイズが変わらない
| ホストOS側での仮想ディスク再配置が必要
| VMware を再起動するか、VMware Workstation の「ディスクを最適化」を実行
|

| Windows で権限エラー
| 管理者権限なしで実行している
| コマンドプロンプトを「管理者として実行」で開く
|


まとめ

VMwareゲストOSの仮想ディスク肥大化を解消する手順をまとめます。

  • 原因: ファイル削除ではディスクの実データ領域は解放されず、.vmdk ファイルは自動で縮小されない

  • ステップ1: ゲストOS内の不要ファイル・キャッシュ・ログを削除して空き容量を確保する

  • ステップ2: vmware-toolbox-cmd disk list で対象を確認する

  • ステップ3: vmware-toolbox-cmd disk shrink /(Linux)または VMwareToolboxCmd.exe disk shrink C:\(Windows)を実行する

  • ステップ4: ホストOS側で .vmdk ファイルサイズを確認する

定期的に(3〜6か月に1回程度)disk shrink を実行することで、ホストOSのストレージを効率的に活用できます。特に SSD を使用しているホスト環境では、仮想ディスクの肥大化がホストOS全体のパフォーマンスに影響するため、こまめなメンテナンスをおすすめします。


関連記事

VMWare

Posted by GENDOSU