ディスクサイズの拡大・縮小 の履歴(No.2)
更新VirtualBox の仮想ディスクのサイズを拡大・縮小したい†
目的は表記の通りです。
- 仮想ディスクは可変サイズになっていることを想定しています
- 仮想ディスクを拡大した後、内部のパーティションも切り直さないとOSから使用できません。
- 可変サイズの仮想ディスクでは、サイズを縮小するには設定容量を小さくする必要はありません。
使用していない領域を解放してもらえばOKです。
- ただ、未使用領域はゼロフィルしておかないと認識してもらえないのだそうです。
目次†
サイズの拡張†
VirtualBox マネージャのあるフォルダでコマンドプロンプトを開く†
ディスクイメージの UUID を探す†
コマンドプロンプトからも可能なので、ここは VM が電源オフになっていること を 確認するのみでも大丈夫です。
VirtualBox マネージャを立ち上げて、
コマンドプロンプトからディスクサイズを拡大†
上の手順をたどっていれば VirtualBox マネージャのインストールディレクトリにいるはずなので、
- "VBoxManage list hdds" でディスクイメージの一覧を表示し、UUID を確認できます。
- "VBoxManage clonehd [UUID] [target file name]" でディスクをコピーできます (必要に応じて)
- "VBoxManage modifyhd [UUID] --resize [Size(MB)]" でディスク領域を拡大できます
LANG:console > VBoxManage list hdds UUID: e7f1bb6f-7e79-46c7-95bd-ddf4d60f4fa5 Parent UUID: base State: created Type: normal (base) Location: C:\Users\osamu\VirtualBox VMs\Debian9\Debian9.vdi Storage format: VDI Capacity: 60000 MBytes Encryption: disabled ... > VBoxManage clonehd e7f1bb6f-7e79-46c7-95bd-ddf4d60f4fa5 C:\Users\Osamu\backup.vdi 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Clone medium created in format 'VDI'. UUID: 38ef6c76-9075-453a-b738-1d62142f1ac6 > VBoxManage modifyhd e7f1bb6f-7e79-46c7-95bd-ddf4d60f4fa5 --resize 70000 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
拡大した領域をOSから使えるようにする†
ディスクが大きくなっても、OSから見たパーティションサイズは変わっていませんので、 パーティションを広げてやる必要があります。
これには、
- 広げた仮想ディスクから立ち上げていた VM をそのまま使う方法
- 他の VM に仮想ディスクをマウントして使う方法
の2つがあります。
どちらの場合も、VirtualBox マネージャの VM の [設定] が必要です。
1. の場合、その仮想ディスクからOSを立ち上げてしまうと 仮想ディスクのパーティションを変更できないので、 パーティショニングツールを含む起動可能CDを [コントローラIDE] に挿入して立ち上げ、 そこからパーティションを変更します。
2. は、他にもすでに VM が登録されている場合に使える方法で、 拡張した仮想ディスクを他の VM に2つ目の(あるいは3つ目、4つ目の)ディスクとして繋ぎ、 そちらの VM 内OSからパーティショニングを行う方法です。 この場合はパーティショニングに使う VM のコントローラ SATA の右にあるアイコンから 既存ディスクを選択して追加します。
どちらの場合にも、実際のパーティション編集の方法は使用するパーティショニングツールや パーティション構成によって異なるので、ここでは説明しません。
Google:virtualbox ディスク拡張 などのキーワードで検索するといろいろ出るようなので、 参考にして下さい。
一般に、広げたいパーティションがディスクの一番後ろにない場合には、 高性能なパーティショニングツールが必要になったり、 さもなければいろいろ手間がかかったりするようです。。。
サイズの縮小†
仮想ディスクを可変サイズで作成したる場合、 仮想ディスクのファイルは中の容量にしたがってどんどん大きくなりますが、 後に使用量が減ってもファイルサイズは減りません。
小さくする方法はこちらに書かれていました。
基本は
VBoxManage modifyhd [UUID] --compact
一発で、
LANG:console > VBoxManage modifyhd e7f1bb6f-7e79-46c7-95bd-ddf4d60f4fa5 --compact 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
とすればいいのですが、未使用領域はゼロで埋めておかないと、 VBoxManage は未使用領域であることを検出できないのだそうです。
リンク先にあるとおり、Windows ではそれ専用のコマンドが用意されているようですが、
Linux では既存のコマンドを組み合わせて、
- ディスクがいっぱいになるまでゼロを書き込んだ巨大ファイルを作成する
- すぐにファイルを削除する
の手順が必要なのだそうです。
LANG:console $ dd if=/dev/zero of=zero bs=4k; \rm zero
これは /dev/zero からファイル名 zero へ、4kバイトずつ、書けるだけ書き込み、 すぐに消去 (rm) するコマンドです。(4k はもう少し大きい方が速くなったり しないのだろうか?)
これにより、一旦仮想ディスクが大きくなることを心配したのですが、 作業後もサイズは増えませんでした。まだ存在しないところをゼロと読み込む仕様のため、 ゼロの書き込みでは仮想ディスクは大きくならないのかもしれません。
その後もう一度 compact したところ、今度はちゃんと小さくなりました。