ディスクサイズの拡大・縮小

(1150d) 更新


公開メモ

VirtualBox の仮想ディスクのサイズを拡大・縮小したい

目的は表記の通りです。

  • 仮想ディスクは可変サイズになっていることを想定しています
  • 仮想ディスクを拡大した後、内部のパーティションも切り直さないとOSから使用できません。
  • 可変サイズの仮想ディスクでは、サイズを縮小するには設定容量を小さくする必要はありません。 使用していない領域を解放してもらえばOKです。
    • ただ、未使用領域はゼロフィルしておかないと認識してもらえないのだそうです。

目次

サイズの拡張

VirtualBox マネージャのあるフォルダでコマンドプロンプトを開く

  • Oracle VM VirtualBox マネージャ のショートカット上で右クリックから [プロパティ]
    • 普通なら [作業フォルダ] がインストールフォルダなので、右クリックから [すべて選択] + [コピー]
      copy-virtualbox-location.png
  • コマンドプロンプトを立ち上げて "cd " と打った後、右クリックで貼り付けてリターン

ディスクイメージの UUID を探す

コマンドプロンプトからも可能なので、ここは VM が電源オフになっていること を 確認するのみでも大丈夫です。

VirtualBox マネージャを立ち上げて、

  • 目的のディスクをマウントする VM が [電源オフ] になっていることを確認します
  • Ctrl+D を押すか、[File]-[仮想ディスクマネージャ] でディスクマネージャを立ち上げます
  • ディスク上で右クリックから [コピー] を押すとディスクを複製できます。 万一の場合にはディスクサイズの変更に失敗してデータが失われる可能性がありますので、 バックアップのため [コピー] しておくことをおすすめします。
  • 目的のハードディスクを選んで、UUID を右クリックからコピーします copy-virtual-disk-uuid.png

コマンドプロンプトからディスクサイズを拡大

上の手順をたどっていれば 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から見たパーティションサイズは変わっていませんので、 パーティションを広げてやる必要があります。

これには、

  1. 広げた仮想ディスクから立ち上げていた VM をそのまま使う方法
  2. 他の VM に仮想ディスクをマウントして使う方法

の2つがあります。

どちらの場合も、VirtualBox マネージャの VM の [設定] が必要です。

vm-setting-for-partitioning.png

1. の場合、その仮想ディスクからOSを立ち上げてしまうと 仮想ディスクのパーティションを変更できないので、 パーティショニングツールを含む起動可能CDを [コントローラIDE] に挿入して立ち上げ、 そこからパーティションを変更します。

2. は、他にもすでに VM が登録されている場合に使える方法で、 拡張した仮想ディスクを他の VM に2つ目の(あるいは3つ目、4つ目の)ディスクとして繋ぎ、 そちらの VM 内OSからパーティショニングを行う方法です。 この場合はパーティショニングに使う VM のコントローラ SATA の右にあるアイコンから 既存ディスクを選択して追加します。

どちらの場合にも、実際のパーティション編集の方法は使用するパーティショニングツールや パーティション構成によって異なるので、ここでは説明しません。

Google:virtualbox ディスク拡張 などのキーワードで検索するといろいろ出るようなので、 参考にして下さい。

一般に、広げたいパーティションがディスクの一番後ろにない場合には、 高性能なパーティショニングツールが必要になったり、 さもなければいろいろ手間がかかったりするようです。。。

swap の UUID が変化してしまうことへの対応

Ubuntuでa start job is running for dev-desk-by ...とかでて起動が遅い
http://kurenaif.hatenablog.com/entry/2016/04/27/014245

サイズの縮小

仮想ディスクを可変サイズで作成したる場合、 仮想ディスクのファイルは中の容量にしたがってどんどん大きくなりますが、 後に使用量が減ってもファイルサイズは減りません。

小さくする方法はこちらに書かれていました。

http://vboxmania.net/content/%E4%BB%AE%E6%83%B3%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E3%81%AE%E5%9C%A7%E7%B8%AE

基本は

LANG:console
> VBoxManage list hdds

でディスクの UUID を確認しておき、

LANG:console
> VBoxManage modifyhd e7f1bb6f-7e79-46c7-95bd-ddf4d60f4fa5 --compact
 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

のようにすればいいのですが、その前に未使用領域はゼロで埋めておかないと、 VBoxManage は未使用領域であることを検出できないのだそうです。

リンク先にあるとおり、Windows ではそれ専用のコマンドとして sdelete が用意されているようですが、

Linux では既存のコマンドを組み合わせて、

  1. ディスクがいっぱいになるまでゼロを書き込んだ巨大ファイルを作成する
  2. すぐにファイルを削除する

の手順が必要なのだそうです。

ということで、VirtualBox 内のシェルから以下のコマンドを実行します。

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

これは /dev/zero からファイル名 zero へ、4kバイトずつ、書けるだけ書き込み、 すぐに消去 (rm) するコマンドです。(4k はもう少し大きい方が速くなったり しないのだろうか?)

これにより、一旦仮想ディスクが大きくなることを心配したのですが、 作業後もサイズは増えませんでした。まだ存在しないところをゼロと読み込む仕様のため、 ゼロの書き込みでは仮想ディスクは大きくならないのかもしれません。

その後もう一度 compact したところ、今度はちゃんと小さくなりました。

質問・コメント




bs は大きくすると速くなりますよ。

mnishi? ()

例えば、32m とかすると32MB のブロックサイズになって速くなります。ある程度以上の大きさにすると(64mとかにしても)あんまり体感は変わらないもしれません。


Counter: 57292 (from 2010/06/03), today: 16, yesterday: 0