ジャンル不定の日記です。

Virtualboxのディスクイメージを縮小しようと思ったんだが・・・

Virtualboxのディスクイメージを縮小しようと思ったんだが、

まず、ゲストOS側でディスク末尾までの未使用領域を0で埋める。
Linuxの場合は、
$ dd if=/dev/zero of=zero;rm zero
こんな感じ。ddで末尾まで0で埋めるファイルを作成して、そのままrmで消す。
という方法で0で埋めれる。
Windowsの場合もそういうコマンドはあるらしい。

末尾まで0で埋まったらホストOS側で、
$ vboxmanage modifyhd [UUIDかファイルパス] --compact
をすると.vdiが一時的に縮小できる。
.vdiのファイルパスを指定してもいいが、VM名にスペースが入ってるとめんどい。
$ vboxmanage list hdds
でUUIDを確認できる。

だが、これディスクの後ろの方が使われちゃってる場合はそこまでしか圧縮できないから劇的な圧縮ができない可能性があるね。
手元でも期待した効果がなかった。


で、一時的に.vdiを圧縮してから、
$ vboxmanage modifyhd [UUIDかファイルパス] --resize メガバイト
でゲストから見えるHDDのサイズが変更できるんだが、これ拡大はできても縮小はできない。
一度大きくしちゃったらもう小さくすることはできない。


いつも、VDIは可変サイズだから適当に20GBで仮想環境作っちゃうんだが、
可変サイズといっても、ゲスト側が満タンでなくてもディスク末尾に書き込まれたらそこまで拡大しちゃうから、ギリギリの容量にして必要に応じて拡大すべきと思ったんで変更しようと思ったんだが、
縮小するのは思ったよりも難しい。

ゲストOSでパーティションを縮小して、CDブート等でデバイスの生イメージを取得してホストでVDIに変換。
って形で可能なのかな?