VirtualBoxのWindows10を出来るだけ小さくする

VirtualBoxとかの仮想環境って便利なんですけど、OSまるごと入っているわけで、普通にWindows 10あたりをインストールするとこれがなかなかの容量なんですよね。

具体的にはvdiファイル(VirtualBoxのディスクイメージファイル)が27GBくらいになります。アプリなしで。

ちょっとこいつをダイエットしたいなぁと思いまして、比較的に簡単かつ安全にできることだけで小さくしてみました。

まずは結果から

Before
VirtualBoxのファイルサイズBefore

After
VirtualBoxのファイルサイズAfter

27,821,056 KB が、
14,377,984 KB まで減ってます。

なかなか劇的ビフォーアフター。

やったこと

  • TEMPファイルを消す
  • ディスク クリーンアップを実行
  • Windowsの機能の中で使っていないものを削除
  • ページファイルを消す
  • システムの保護を無効にする
  • compactコマンドでOSを圧縮

TEMPファイルを消す

効果:小 実行時間:小

これは単純に下記フォルダをエクスプローラーで開き、削除するだけです。

  • C:\Windows\Temp
  • C:\Users\[ユーザー名]\AppData\Local\Temp

ディスク クリーンアップを実行

効果:大 実行時間:特大

ディスククリーンアップ

環境次第では早く終わりますが、インストールしてWindows Updateもすべて適用した後だと1時間以上かかるかも知れません。Windows Updateが残していった不要ファイルを削除するのにえらい時間がかかります。

が、その分、めちゃめちゃCドライブが空きます。

■操作方法

  1. Cドライブを右クリックし[プロパティ]を開く
  2. [ディスクのクリーンアップ]をクリック
  3. [システム ファイルのクリーンアップ]をクリック
  4. 削除するファイルの一覧にすべてチェックを付けて[OK]

[ダウンロード]はそのまんまダウンロードフォルダの意味なので、ブラウザでダウンロードしたファイルの置き場所をそのままにしている場合はご注意ください。[ダウンロード]にチェックつけてクリーンアップすると普通に消えますので。

Windowsの機能の無効化

効果:中 実行時間:中

Windowsの機能の無効化

普段使いのPCなら印刷機能まわりは外せないかもですが、テスト用のVirtualBoxとかなら外しても良いケースも多いはず。ぼくの場合は.NETとIE11だけ残して、ほかはすべて削除しました。

■操作方法

  1. [スタートメニュー]の[Windows システムツール]→[コントロール パネル]をクリック
  2. [プログラムのアンインストール]をクリック
  3. [Windows の機能の有効化または無効化]をクリック
  4. 不要な機能のチェックをすべて外して[OK]をクリック

ページファイルを消す

効果:特大 実行時間:小

ページングファイルをなしにする

pagefile.sysは3GB以上食っていることが多いので効果は大きいですが、搭載メモリが少ないとメモリ不足で起動しないアプリ等が出てくるので注意が必要です。

■操作方法

  1. エクスプローラーでPCを右クリックして[プロパティ]を開く
  2. [システムの詳細設定]をクリック
  3. パフォーマンス枠にある[設定]をクリック
  4. パフォーマンスオプションの[詳細設定]タブをクリック
  5. 仮想メモリ枠の[変更]をクリック
  6. [すべてのドライブのページングファイルのサイズを自動的に管理する]のチェックを外す
  7. [ページングファイルなし]をクリック
  8. [設定]をクリック
  9. 警告メッセージが出るので[はい]をクリック

設定自体はこれで完了ですが、C:\pagefile.sys は残ったままなので、PC再起動後にエクスプローラーで削除します。

システムの保護を無効にする

効果:大 実行時間:小

システムに大幅な変更を加えるドライバー類とかインストールするときに自動的に動作する保護機能ですが、これに助けられた記憶がありません。いまいち有用性がわかりませんが、人によっては使っているのかなぁ。とりあえずぼくの場合はメインPCでもテストPCでもOFFにしちゃう機能です。

システムの保護を無効にする

■操作方法

  1. エクスプローラーでPCを右クリックして[プロパティ]を開く
  2. [システムの詳細設定]をクリック
  3. [システムの保護]タブをクリック
  4. [構成]ボタンをクリック
  5. [システムの保護を無効にする]をクリック
  6. 確認ダイアログで[はい]をクリック

compactコマンドでOSを圧縮

効果:大 実行時間:特大

Windows 10にはもともとOSのバイナリを圧縮する機能※1があって、どのファイルをどのくらい圧縮するかはOSが自動的に判断しています。デスクトップPCやVirtualBoxにセットアップされたWindows 10だとあまり圧縮されてないため、コマンドで強制的にコンパクトにできます。

[管理者として実行]でコマンドプロンプトを開き、下記のコマンドを実行するだけです。

■OSを圧縮する

C:\>compact /compactos:always

圧縮することでかなりCドライブに余裕ができますが、メインPCではあまりやりたくないですね。

でも時間はかかりますが、戻すことも簡単にできます。

■OSを無圧縮にする

C:\>compact /compactos:never

VirtualBoxならではの問題

ここまですればこのとおり、使用領域が10.3GBまで減らせます。
Windows 10 のCドライブの容量

小さなアプリを少し入れた状態ですし、通常の方法では消せないアプリとかもちょっとしたツールを使えば消せるので、10GBを切るのもそんなに難しくないかも知れませんね。

ただ、これだけ減らしてもVirtualBoxのディスクイメージ(vdi)のファイルサイズはピクリとも変化しません。

最初に作ったイメージサイズを超えて使用したらファイルサイズは大きくなるものの、中身が減ったとしてもファイルサイズが小さくなることはないんですね。一度贅沢を覚えると収入が減っても生活が変えられないという人間と似ていますね(違)

そんなわけでこのvdiを小さくするには後2ステップ必要です。

SDeleteコマンドを使う

SDeleteとはMicrosoftが公開しているコマンドラインツールで、ディスクの空き領域のクリーンアップを行ってくれるツールです。
https://docs.microsoft.com/ja-jp/sysinternals/downloads/sdelete

このSDeleteには空き領域にひたすら0を書き込むという機能があり、これを実行しないとこの後の処理でvdiファイルを小さくできないのです。

■SDeleteを(VirtualBox内の)コマンドラインで実行する

C:\>sdelete64.exe -z c:

これけっこう時間かかります。自慢のM.2 SSDでも1時間以上かかったので普通のSSDだと3倍くらいかかるかも知れません。

VBoxManageコマンドを使う

SDeleteが終わったらゲストOSは終了し、下記コマンドを実行します。

C:\>VBoxManage.exe" modifyhd testpc.vdi --compact

VBoxManage.exeはデフォルトだと C:\Program Files\Oracle\VirtualBox にあるのでパスが通っていない場合はパスを通すか、フルパスで書いてください。

このコマンドでvdiの空き領域を詰めてくれるのですが、SDeleteで空き領域に0を書き込んでおかないとぜんっぜん小さくならないのです。

VirtualBoxは一度きれいにしても、テストで使い続けるとどんどんvdiが肥大化していくため、SDeleteとVBoxManageのcompactオプションは定期的に使っています。

VirtualBoxのファイルサイズAfter

最初の画像にも写っていますが、このvmclean.batという中に

"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" modifyhd testpc.vdi --compact

と記述してあるので、ダブルクリックするだけで実行できます。

まとめ

下記の手順を実行すればCドライブの使用領域は27GBから10GBまで減りました。

  • TEMPファイルを消す
  • ディスク クリーンアップを実行
  • Windowsの機能の中で使っていないものを削除
  • ページファイルを消す
  • システムの保護を無効にする
  • compactコマンドでOSを圧縮

この状態のvdiファイルを別途外付けHDDなどに保管しておいて、きれいな環境でテストがしたくなったら上書きコピーして使う、なんてこともしています。仮想環境さまさまですね。

なお、上記compact以外は自分のメインPCでもよくやってます。別段Cドライブの容量に困っているわけではないのですが、なんか気分的にすっきりするのでw