要約:
VBoxManage.exe modifyhd --resize
は、ディスクイメージの論理サイズ(ゲスト OS から見たサイズ)を増加させることができる(減少させることはできない)。
VBoxManage.exe modifyhd inputfile.vdi --compact
は物理ディスクイメージのサイズ(ホスト OS から見たディスク上のイメージファイルのサイズ)を減少させることができる。ただし、これは論理ディスクのサイズを変更するものではありません。これは、ゲスト OS で最初に空き領域がゼロになっている場合にのみ機能することに注意してください。
modifyhd
は、ダイナミックフォーマットのバリアント(「動的に割り当てられたイメージ」)でのみ動作します。
modifyhd
は VDI および VHD イメージフォーマットでのみ動作します。
スナップショットを使用している場合は、"Snapshots “サブフォルダから最新のスナップショットVDIをクローンする必要があります。
詳細はマニュアルの 8.23. VBoxManage modifyhd を参照してください。
VDIの論理ディスクサイズを減らすことがまだ実装されていないのは、データの破損を防ぐためです。したがって、--resize
オプションを使用する場合、新しいディスクサイズは現在のサイズよりも大きくなければなりません。現在のサイズ以下にすることはできません。言い換えれば、40GBのディスクは41GB以上にしかリサイズできず、40GBにリサイズすることはできません(馬鹿げている)し、39GB以下にリサイズすることもできません。
旧バージョンのVirtualBoxでは、VDIファイルは「固定」形式のバリアントとして作成されていました。新しいデフォルト設定では、新しいVDI(仮想ディスクイメージ)ファイルが作成されたときに「動的な」フォーマットバリアントを作成するようになりました。(ダイナミックフォーマットバリアントが導入されてからは、どちらのバージョンであってもそうなったのではないかと推測しています)
「この形式の操作はまだ実装されていません」というエラーメッセージが意味するのは、VDIファイルが「固定」形式のバリアントを使用しているということです。この問題を回避するには、clonehd
コマンドを使用してVDIファイルをクローンする必要があります。現在のVDIファイルの形式を確認するには、showhdinfo
コマンドを使用します。
作業例
**現在のディスクに関するVDI情報を表示する。vboxmanage.exe showhdinfo path\inputfile.vdi
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe showhdinfo "%userprofile%\virt
ualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab.vdi"
UUID: 132e9af1-0428-49f4-bc45-4d84680e17f5
Parent UUID: base
State: created
Type: normal (base)
Location: C:\Users\Name\VirtualBox VMs\sg2_win7_x64_lab\sg2_win7_x64_lab.
vdi
Storage format: VDI
Format variant: fixed default
Capacity: 40960 MBytes
Size on disk: 40962 MBytes
In use by VMs: sg2_win7_x64_lab (UUID: dcd106b3-7ed6-4f19-ad94-820ab4dc10d3)
C:\Program Files\Oracle\VirtualBox>
「デフォルト固定」と書いてあるのがわかりますか?これが、サイズを変更しようとすると上記のエラーを吐く理由です。
**古いVDIファイルを新しいVDIファイルにクローンします。vboxmanage.exe clonehd path\inputfile.vdi path\outputfile.vdi
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe clonehd "%userprofile%\virtual
box vms\sg2_win7_x64_lab\sg2_win7_x64_lab.vdi" "%userprofile%\virtualbox vms\sg2
_win7_x64_lab\sg2_win7_x64_lab_clone.vdi"
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VDI'. UUID: 34dafa68-3093-4946-926a-8237ea263
e5c
C:\Program Files\Oracle\VirtualBox>
これで完成です。これで古いファイルが新しいファイルにクローンされました。新しいバージョンのVirtualBoxでは、デフォルトでは「動的」フォーマットバリアントを使用するように設定されているので、明示的に定義する必要はありません。ただし、古いバージョンの VirtualBox を使用している場合は、将来のバージョンの VirtualBox との互換性や柔軟性を確保するために、オプションを "dynamic” に設定した方が良いかもしれません(可能であれば)。
**クローン化されたディスクに関するVDI情報を表示します。vboxmanage.exe showhdinfo path\inputfile_clone.vdi
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe showhdinfo "%userprofile%\virt
ualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_clone.vdi"
UUID: 34dafa68-3093-4946-926a-8237ea263e5c
Parent UUID: base
State: created
Type: normal (base)
Location: C:\Users\Name\virtualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_
clone.vdi
Storage format: VDI
Format variant: dynamic default
Capacity: 40960 MBytes
Size on disk: 7806 MBytes
C:\Program Files\Oracle\VirtualBox>
「ダイナミックデフォルト」と書いてあるのがわかりますか?なんて素敵なんでしょう!
(余談ですが! ここで物理的なサイズが7806 MBと書かれているのは、元のVDIファイルに--compact
オプションを使用して、ダイナミックフォーマットのバリアントへの変換を強制しようとしたからです。VirtualBox フォーラムで読んだ話では、古いバージョンでも動作するとのことだったので、試してみようと思ったのですが、うまくいきませんでした。うまくいきませんでした。)
*クローンされたディスクのサイズ変更 *
入力コマンド。vboxmanage.exe modifyhd path\inputfile.vdi --resize 51200
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe modifyhd "%userprofile%\virtua
lbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_clone.vdi" --resize 51200
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
C:\Program Files\Oracle\VirtualBox>
成功! これでもうフォーマットにこだわる必要はありません。ただ、元のディスクではなく、新しくクローンされたディスクのサイズを変更することを忘れないでください。サイズはMBで表されていることを覚えておいてください。51200
(または “GB "の可能性もあります)と同様に、例えば50G
を使用することができると思います。--resizebyte
というオプションもあり、これを使ってサイズをバイトで表現することができます。
**リサイズされたクローンディスクに関するVDI情報を表示します。vboxmanage.exe showhdinfo path\inputfile_clone.vdi
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe showhdinfo "%userprofile%\virt
ualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_clone.vdi"
UUID: 34dafa68-3093-4946-926a-8237ea263e5c
Parent UUID: base
State: created
Type: normal (base)
Location: C:\Users\Name\virtualbox vms\sg2_win7_x64_lab\sg2_win7_x64_lab_
clone.vdi
Storage format: VDI
Format variant: dynamic default
Capacity: 51200 MBytes
Size on disk: 7806 MBytes
C:\Program Files\Oracle\VirtualBox>
以上です。ここからは、このクローン化されたドライブをVMの新しいVDIとして追加します。これはVirtualBox内で行います。ここでは説明しません。ここまで読んで理解できたのであれば、これ以上のガイドは必要ありません。古い「固定」ファイルを削除するか、バックアップとして残しておきましょう。元のソースファイルを削除する前に、必ず新しいVDIファイルをテストしてください。
注意! クローン化されたディスクの新しいサイズはすぐには表示されません。これを使って VM を起動し、パーティション管理ツールを使ってパーティションを拡張して仮想ディスクを埋めるようにしなければなりません (または、より多くのパーティションを作成しなければなりません)。Windows の場合は、diskmgmt.msc
を実行するだけで、パーティションを拡張することができます。
スクリーンショット
リファレンス