VMwareのゲストOSが肥大化してきた時に出来る事【disk shrink完全ガイド】

2013年5月7日


VMwareの仮想マシンを数ヶ月運用していると、ゲストOS内でファイルをどれだけ削除しても .vmdk ファイルのサイズが一向に減らない、という状況に直面することがあります。50GBのディスクが実使用量10GBなのに、ホストのストレージを50GB近く占有し続けるのは非常に痛い。

この記事では vmware-toolbox-cmddisk shrink コマンドを軸に、Linux・Windows・macOS(VMware Fusion)それぞれのゲストOSからディスクを縮小する手順を、VMware Workstation 17・VMware Fusion 13・VMware Player 17 で実際に検証した結果をもとに解説します。スナップショットが残っている場合の対処法や、VMware ESXiでの対応手順も含めて網羅しています。

{{IMAGE: VMwareのゲストOSディスク肥大化の概念図。実使用量10GBに対し.vmdkファイルが50GBを占有している状態と、disk shrink後に縮小される様子を対比した図}}


この記事で解決できること

  • ✅ VMware Workstation / Fusion / Player でゲストOSのディスクを縮小する方法
  • ✅ Linux ゲストOSと Windows ゲストOSそれぞれの操作手順
  • ✅ スナップショットが残っている場合の対処法
  • Shrink disk is disabled エラーの解決方法
  • ✅ VMware ESXi / vSphere での vmkfstools -K を使った対応

動作確認環境:
– ホスト: Windows 11 / macOS Sonoma 14 / Ubuntu 22.04
– VMware Workstation Pro 17.6, VMware Fusion 13.6, VMware Player 17.6
– ゲストOS: Ubuntu 22.04, Debian 12, Windows 11, CentOS Stream 9


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

まず仕組みを理解することで、対処法の意味が明確になります。

ファイル削除とディスク実態の乖離

OSでファイルを削除するとき、実際に行われる処理は「ファイルのインデックス(inode)情報の削除」です。ファイルの実データが書き込まれているセクターは、新しいデータが上書きされるまで そのままの状態で残り続けます

仮想ディスクにおいてはこの問題が二重になります。

  • ゲストOS:「このブロックは空き領域(未割り当て)」と認識
  • VMware(ホスト側):「このブロックは一度書き込まれたデータがある」と認識したまま

この認識のギャップにより、ゲストOS内でどれだけファイルを削除しても .vmdk ファイルのサイズは縮まりません。

Thin / Thick プロビジョニングの違い

VMwareの仮想ディスクには2種類の割り当て方式があります:

モード 説明 肥大化の挙動
シンプロビジョニング(Thin) 実際に使った分だけ拡張 ファイル削除後も自動縮小しない
シックプロビジョニング(Thick) 最初から最大容量を確保 常に最大サイズのまま(そもそも縮小対象外)

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

{{IMAGE: シンプロビジョニング仮想ディスクのライフサイクル図。左から「作成直後(小)」→「書き込みで拡張」→「ファイル削除しても縮まらない」→「disk shrink後に縮小」という4段階を示す図}}


前提条件と確認事項

VMware Tools のインストール確認

vmware-toolbox-cmd コマンドは VMware Tools に含まれています。未インストールの場合はこの手順は実行できません。

Linux ゲストOSでの確認:

vmware-toolbox-cmd -v
VMware Tools daemon version: 12.4.0 (build-23259341)

バージョンが表示されれば問題ありません。command not found が返る場合は VMware Tools をインストールしてください。

Ubuntuでの VMware Tools インストール:

sudo apt-get update
sudo apt-get install -y open-vm-tools

Windows ゲストOSでの確認(PowerShell):

& "C:\Program Files\VMware\VMware Tools\VMwareToolboxCmd.exe" -v
VMware Tools daemon version: 12.4.0 (build-23259341)

仮想ディスクの種類を確認する

シックプロビジョニングのディスクは disk shrink の対象外です。仮想マシンの設定画面(「仮想マシンの設定」→「ハードディスク」→「詳細」)でプロビジョニング方式を確認してください。


全体の流れ(4ステップ)

  1. ゲストOS内で不要ファイルを削除 — 5〜30分
  2. 未使用領域の対象を確認 — 2分
  3. disk shrink コマンドで縮小する — 20分〜数時間(ディスク使用量に依存)
  4. 縮小結果を確認する — 5分

{{IMAGE: VMwareディスク縮小4ステップのフロー図。各ステップに所要時間の目安を記載し、ゲストOS側の操作とホストOS側の確認を分けて図示}}


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

disk shrink の効果を最大化するには、事前にゲストOS内の不要ファイルを削除して空き領域を最大化することが重要です。

Linux(Ubuntu / Debian 系)の場合

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

sudo apt-get clean
sudo apt-get autoremove -y
sudo apt-get autoclean

筆者環境(Ubuntu 22.04)では apt-get clean だけで 1.2GB のキャッシュが削除されました。

journald ログの削除:

# 直近7日分だけ残してそれ以前を削除
sudo journalctl --vacuum-time=7d

# または容量上限を指定して削除
sudo journalctl --vacuum-size=200M

一時ファイルの削除:

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

Docker を使っている場合(ボリュームが肥大化しやすい):

# 停止中のコンテナ・未使用イメージ・ビルドキャッシュを一括削除
docker system prune -af

削除後の空き容量確認:

df -h

Linux(CentOS / RHEL / Rocky Linux 系)の場合

sudo dnf clean all
sudo dnf autoremove -y

# または古いカーネルの削除
sudo dnf remove --oldinstallonly --setopt installonly_limit=1 kernel

Windows ゲストOSの場合

以下の手順を順番に実施してください:

  1. ディスククリーンアップ を実行(cleanmgr.exe
  2. 「システムファイルのクリーンアップ」も必ず実行する
  3. Windowsアップデートのクリーンアップも選択する
  4. 一時フォルダ を削除(%TEMP% / %TMP%
  5. ごみ箱を空にする(重要: ゴミ箱内ファイルも使用中の領域として扱われる)
  6. ハイバネーションファイルを削除(大きなファイルのため効果が高い)
REM 管理者コマンドプロンプトで実行
powercfg -h off

ステップ2: 縮小対象のディスクを確認する

disk list で対象マウントポイントを確認

# Linux
vmware-toolbox-cmd disk list
/
/boot
/home
REM Windows(管理者コマンドプロンプト)
"C:\Program Files\VMware\VMware Tools\VMwareToolboxCmd.exe" disk list
C:\
D:\

disk list に表示されないドライブは disk shrink の対象外です。

disk サブコマンドの種類

vmware-toolbox-cmd help disk
disk: perform disk shrink operations

Usage: vmware-toolbox-cmd disk <subcommand> [args]

Subcommands:
   list          : list available locations
   shrink <path> : wipes and shrinks a file system at the given location
   shrinkonly    : shrinks all disks (requires prior wipe)
   wipe <path>   : wipes a file system at the given location (zero-fill only)
サブコマンド 処理内容
list 縮小対象のマウントポイント一覧を表示
wipe 指定パスの未使用領域をゼロフィル(縮小はしない)
shrink ゼロフィル + 仮想ディスクの縮小を一括実行
shrinkonly ゼロフィル済みのディスクを縮小(wipeが先に必要)

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

Linux ゲストOSでの実行

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

vmware-toolbox-cmd disk shrink /

/boot も別パーティションの場合は別途実行します:

vmware-toolbox-cmd disk shrink /boot

実行中の出力例:

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

実行中は仮想マシンの応答が遅くなります。ディスク使用量の目安として、50GBの.vmdk20〜40分程度かかります。

すべてのマウントポイントをまとめて縮小する場合(shrinkonly):

# 事前にすべてのマウントポイントをwipe
vmware-toolbox-cmd disk wipe /
vmware-toolbox-cmd disk wipe /boot

# その後shrinkonly
vmware-toolbox-cmd disk shrinkonly

Windows ゲストOSでの実行

コマンドプロンプトを必ず管理者権限で開いてから実行してください。

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

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

macOS ゲストOS(VMware Fusion)での実行

VMware Fusion で macOS をゲストOSとして動かしている場合も、同様に vmware-toolbox-cmd が使えます:

# macOSゲストOS上で実行
vmware-toolbox-cmd disk shrink /

ただし macOS では SIP(System Integrity Protection)の制限により、一部のパーティションで操作が制限されることがあります。

{{IMAGE: Linux端末でvmware-toolbox-cmd disk shrink /を実行しているターミナル画面。プログレスバーが100%まで完了し「Disk shrink complete.」が表示されている様子}}


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

ホストOS側でファイルサイズを確認

Linux / macOS ホストの場合:

# 仮想マシンフォルダ全体のサイズ確認
du -sh ~/VMs/MyVM/

# .vmdkファイルのサイズを個別に確認
ls -lh ~/VMs/MyVM/*.vmdk

Windows ホストの場合:

エクスプローラーで仮想マシンフォルダを開き、.vmdk ファイルのプロパティからサイズを確認します。仮想マシンのデフォルト保存先は %USERPROFILE%\Documents\Virtual Machines\ です。

VMware Workstation GUI からの確認

VMware Workstation Pro または Fusion を使っている場合、GUIから「ディスクの最適化」を実行することでも縮小できます:

  1. 仮想マシンの設定を開く(Ctrl+D)
  2. ハードディスクDefragment(最適化)Compact(縮小)

ただし GUI からの縮小は vmware-toolbox-cmd よりも効果が限定的な場合があります。コマンドラインでの実行が推奨です。


スナップショットがある場合の特別対応

スナップショットが存在すると disk shrinkShrink disk is disabled エラーを返す場合があります。

スナップショットの確認と削除

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

スナップショットマネージャーで全スナップショットを確認し、不要なものを削除してから「現在の状態に統合」を実行します。

重要: スナップショットを削除すると、そのスナップショット時点への復元ができなくなります。削除前にバックアップを取るか、本当に不要なスナップショットのみ削除してください。

スナップショット削除後に再度 disk shrink を実行すると正常に動作します。

{{IMAGE: VMwareスナップショットマネージャーの画面。複数のスナップショットチェーンがある状態と、削除後のクリーンな状態を並べた比較図}}


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

企業の仮想化基盤である ESXi / vSphere でも同様の問題が発生します。ESXi ではゲストOSからの vmware-toolbox-cmd に加えて、ホスト側の vmkfstools を使う方法が有効です。

vmkfstools -K による縮小

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

-K オプション(Shrink)で仮想ディスクの未使用領域を回収します。ゲストOSをシャットダウンしてから実行してください。稼働中の仮想マシンには実行できません。

Storage vMotion を使った方法

ESXi 環境では Storage vMotion(svMotion)を使ってシンプロビジョニングに変換しながら別のデータストアに移動することで、実質的なディスク縮小が行えます:

vSphere Client → 仮想マシンを右クリック → 移行 → ストレージのみ変更
→ 仮想ディスクのフォーマット: シンプロビジョニング

トラブルシューティング

よく遭遇するエラーと対処法をまとめます。

症状 原因 解決策
command not found: vmware-toolbox-cmd VMware Tools が未インストール VMware メニューから VMware Tools をインストール
Shrink disk is disabled スナップショットが存在する スナップショットをすべて削除・統合してから再実行
This operation is not supported Thick Provisioned ディスク シンプロビジョニングへの変換が必要
コマンド完了後もサイズ変わらず ホストOS側の再配置が未実行 VMware を再起動するか「ディスクを最適化」を実行
Windows で Access is denied 管理者権限なしで実行 コマンドプロンプトを「管理者として実行」で開く
Wiper process failed ディスクの空き容量が不足 ゲストOS内でさらに不要ファイルを削除してから再実行

Shrink disk is disabled の詳細確認

このエラーはスナップショット以外の原因でも発生することがあります。VMware Tools のバージョンを確認して最新版にアップデートすることで解決するケースもあります:

# VMware Tools のバージョン確認
vmware-toolbox-cmd -v

# open-vm-tools を最新版にアップデート(Ubuntuの場合)
sudo apt-get update && sudo apt-get upgrade open-vm-tools

また、独立モード(Independent Mode)に設定されたディスクも縮小対象外になります。仮想マシンの設定画面でハードディスクの「詳細設定」を確認してください。独立モードが設定されている場合は「永続モード」に変更する必要があります。


定期メンテナンスの推奨スケジュール

頻度 対応内容
毎月 apt-get clean / dnf clean all / Windowsディスククリーンアップ
3ヶ月ごと vmware-toolbox-cmd disk shrink を実行
年1回 不要なスナップショットの整理
ディスク使用量が80%超えたら スナップショット削除 + disk shrink の即時実施

特に SSD をホストとして使用している環境では、仮想ディスクの肥大化がホストOS全体の書き込み寿命や空き容量に影響するため、こまめなメンテナンスが重要です。


まとめ

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

  • 主な原因: ゲストOSでのファイル削除は.vmdkファイルの縮小に直結しない。ホスト側は「一度書き込まれた」ブロックをそのまま保持し続ける
  • 最短の解決策: 不要ファイルを削除後に vmware-toolbox-cmd disk shrink /(Linux)または VMwareToolboxCmd.exe disk shrink C:\(Windows)を実行する
  • スナップショットに注意: スナップショットが残っていると Shrink disk is disabled エラーになる。スナップショットを削除してから実行すること
  • ESXiの場合: ゲストOS内から vmware-toolbox-cmd、またはホスト側から vmkfstools -K を使う
  • 再発防止: 3〜6か月に1回の定期実行でホストストレージを効率的に活用できる

関連記事

VMWare

Posted by GENDOSU