肥大化した仮想HDDの圧縮

2年前に公開したサービスのVagrantに割り当てられてるVHDが肥大化しており、Cドライブをかなり圧迫してしまった。

まえから「圧縮しないとなー」とは思いつつも、ちょっと手順が面倒っぽいので先送りにしてましたが、この度やっと実行。

環境

ホストOS Windows 10
ゲストOS CentOS 6.7
VirtualBox バージョン 5.2.6 r120293 (Qt5.6.2)

作業結果

後述する作業手順を実行したことで、24GBあったVHDが5GBにまで圧縮されました!!

作業工程で、24GB x 2ファイル分のディスクスペースが必要になったので、この作業はこまめにやるべきだなと思うとともに、vagrant環境を新規で構築する際にはさっさとVDI形式に変換しておいた方がよいなと思いました。

作業ログ

フォーマット変換 (ホストOS側の操作)

Vagrant + VirtualBoxで環境作るとVHDがVMDK形式で構築されるため、VDI形式に変換する必要がある。

VirtualBox マネージャーのメニューから仮想メディアマネージャーを起動。

VirtualBox マネージャー

VirtualBox マネージャー

仮想メディアマネージャーでフォーマット変換したいファイルを選択して、「情報」タブにある「UUID」をコピー。

仮想メディアマネージャー

仮想メディアマネージャー

取得した情報を使って、コマンドプロンプトから下記を実行。

cd "C:\VirtualBox\VirtualBox VMs\server_default_1517204820012_22860"

"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" clonehd "C:\VirtualBox\VirtualBox VMs\server_default_1517204820012_22860\box-disk001.vmdk" "f:\clone.vdi" --format vdi

空き領域のzero埋め(ゲストOS側の作業)

後述する圧縮作業を実行するためには、VHD上の空き領域をzero(null)で埋める必要があるらしい。
そのため、ゲストOSにログインして下記を実行する。

以下はすべてroot権限で実行。

まずはzero埋めするディスクを確認。

$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                       38G  3.7G   33G  11% /
tmpfs                 1.9G     0  1.9G   0% /dev/shm
/dev/sda1             477M   83M  369M  19% /boot
/dev/sdb1             9.8G  180M  9.1G   2% /vagrant_data
vagrant               109G  107G  2.0G  99% /vagrant
vagrant_sync          109G  107G  2.0G  99% /vagrant_sync

圧縮対象が含まれるディレクトで下記を実行。
今回は下記をホームディレクトリで実行しています。

$ dd if=/dev/zero of=zero bs=4k; \rm zero

 圧縮作業(ホストOS側の作業)

いよいよ圧縮作業です。この作業を開始する前にゲストOSをシャットダウンしておきましょう。

vagrant halt

ちなみに、前述した「空き領域のzero埋め」をやらずに実行してもサイズは減りません。
(実行確認してみました)

フォーマット変換が完了すると返還後のファイルが「仮想メディアマネージャー」に追加されています。

フォーマット変換の時同様に、「UUID」をコピーします。

仮想メディアマネージャー

仮想メディアマネージャー

コピーしたら下記を実行。

"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" modifyhd a7f4c715-f7e9-48e7-bb9e-45b2a1d0f680 --compact

いろいろな参考サイトを見る限り、圧縮したVDIをVMDKに変換しているようですが、たぶんこのままで行けるでしょう・・・ということで、また、圧縮することもあるだろうからこのまま使うことにします。

もし何かしらトラブルようなら記事書こうっと。

ストレージ設定(ホストOS側の作業)

圧縮されたVHDをVPCに割り当てます。

VirtualBoxマネージャーから対象のVPCの設定を開きます。

VirtualBoxメディアマネージャー

VirtualBoxメディアマネージャー

圧縮の基となったVHDの割り当てを削除します。

VPCの設定画面

VPCの設定画面

圧縮されたVHDを追加します。

VPCの設定画面

VPCの設定画面

「既存のディスクを選択」からファイルを指定。

VPCの設定画面

VPCの設定画面

一応割り当て前と同じように「ホットプラグ可能」にチェック入れてるけど入れなくてもいいだろうね。

VPCの設定画面

VPCの設定画面

「OK」ボタン押したら、起動確認。無事起動!!

Tips

仮想ディスクのファイル形式

VDI 業界標準のOVF:Open Virtualization Format規約に沿った仮想ディスク形式
VMDK VMware形式
VHD Virtual PCやVirtual Server、Hyper-Vなどのファイル形式

シェアする

  • このエントリーをはてなブックマークに追加

フォローする