社内se × プログラマ × ビッグデータ

プログラミングなどITに興味があります。

VirtualBox 仮想ディスクのサイズを変更

VirtualBox で使用している仮想ディスクの使用率が99パーセント近くになってしまったので、ホストOSからのディスクサイズの割り当てを増やすことを決断。
Vagrantを使用しているため、仮想ディスクは VMDK 形式になっています。
ただこの形式は、サイズ変更がサポートされていないため、一旦 VDI 形式に変換してあげる必要がありました。

おおまかな手順

1. VMDK 形式から VDI 形式へ変換
2. ディスク割り当て量を増やす(リサイズ)
3. VDI 形式から VMDK 形式へ変換
4. パーティション変更

1. VMDK 形式から VDI 形式へ変換

既存の仮想ディスクの一覧

$ VBoxManage list hdds
UUID:           8cbbe27d-8feb-4444-88ce-e5df4fe5ac71
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       C:\Users\xx\VirtualBox VMs\Ubuntu14.04-2-box\box-disk1.vmdk
Storage format: VMDK
Capacity:       30720 MBytes
Encryption:     disabled

既存でおよそ30GB割り当てられています。

VDI 形式へ変換(別ファイルで生成)

$ VBoxManage clonehd "C:\Users\xx\VirtualBox VMs\Ubuntu14.04-2-box\box-disk1.vmdk" "C:\Users\xx\VirtualBox VMs\Ubuntu14.04-2-box\clone-disk1.vdi" --format vdi

既存のファイル(VMDK)はそのままで、新しいファイル(VDI)が生成されることになります。
そのため、ディスクの空き容量に注意が必要です!
この処理には1時間以上かかりました。

$ c:\Program Files\Oracle\VirtualBox>VBoxManage clonehd "C:\Users\xx\VirtualBox VMs\Ubuntu14.04-2-box\box-disk1.vmdk" "C:\Users\xx\VirtualBox VMs\Ubuntu14.04-2-box\clone-disk1.vdi" --format vdi
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone medium created in format 'vdi'. UUID: 1a09f8cf-6eb8-40af-a233-f797810a31f3
$ VBoxManage showhdinfo "C:\Users\xx\VirtualBox VMs\Ubuntu14.04-2-box\clone-disk1.vdi"
UUID:           1a09f8cf-6eb8-40af-a233-f797810a31f3
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       C:\Users\xx\VirtualBox VMs\Ubuntu14.04-2-box\clone-disk1.vdi
Storage format: vdi
Format variant: dynamic default
Capacity:       30720 MBytes
Size on disk:   30249 MBytes
Encryption:     disabled

出来上がりました。

2. ディスク割り当て量を増やす(リサイズ)
$ VBoxManage modifyhd "C:\Users\xx\VirtualBox VMs\Ubuntu14.04-2-box\clone-disk1.vdi" --resize 61440

約60GBに増やしています。
この処理は一瞬で完了しました。

$ VBoxManage showhdinfo "C:\Users\xx\VirtualBox VMs\Ubuntu14.04-2-box\clone-disk1.vdi"
UUID:           1a09f8cf-6eb8-40af-a233-f797810a31f3
Parent UUID:    base
State:          created
Type:           normal (base)
Location:       C:\Users\xx\VirtualBox VMs\Ubuntu14.04-2-box\clone-disk1.vdi
Storage format: vdi
Format variant: dynamic default
Capacity:       61440 MBytes
Size on disk:   30249 MBytes
Encryption:     disabled

Capacity が増えていますね。

3. VDI 形式から VMDK 形式へ変換
$ VBoxManage clonehd "C:\Users\xx\VirtualBox VMs\Ubuntu14.04-2-box\clone-disk1.vdi" "C:\Users\xx\VirtualBox VMs\Ubuntu14.04-2-box\box-disk2.vmdk" --format vmdk
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone medium created in format 'vmdk'. UUID: f52bff5a-4e35-4148-bfa4-2f3781ffe989

実際に計っていませんが、この処理も時間がかかりました。
これも厳密には変換ではなく、新しい VMDK ファイルが生成されることになります。
よって、元のファイルと合わせると3つの仮想ディスクファイルが保持されることになります。
box-disk1.vmdk (元の VMDK ファイル) 30GB
clone-disk1.vdi (変換用の vdi ファイル) 30GB
box-disk2.vmdk (変換後の新しい VMDK ファイル) 30GB

そのため、ディスクの空き容量に注意が必要です!!
変換後の新しい VMDK ファイル は 60GB になるのでは? と思っていたのですが、30 GB ほどでした。
恐らく実データが入るようになってから、喰われるのではないかと思います。

box-disk1.vmdk と clone-disk1.vdi は作業完了後に削除して良いと思います。

4. パーティション変更

ディスクの割り当て量は増えてバンザイ!だと思ったのですが、df コマンドで確認しても領域は増えていません。。
まだ増やした領域はパーティションとして未割り当て領域になっているため、割り当てる必要がありました。
fdisk よりも、専用のツール GParted とか使った方が簡単で良いかもしれません。