VirtualBox の仮想 HDD イメージ(.VDI)圧縮
以前に書いたけれど Ubuntu では run level 1 の起動方法が違ってハマったためまとめなおし。
手順は 1) ゲストで空き領域をゼロで埋め、 2) ホストでイメージを圧縮、となる。
以下詳細。
ゲスト Ubuntu での操作
zerofree コマンドで空き領域をゼロで埋める。
Ubuntu では "sudo apt-get install zerofree" で導入可能。先に進む前に入れておくこと。
run level 1 に落ちる方法は次のとおり。(sudo init 1 だとリブート中に固まって動かなくなるので GRUB 経由で)
- Shift を押しながら Ubuntu を起動して GRUB メニューを表示
- "recovery mode" を選択
- "root" (Drop to root shell prompt) を選択して root シェルに
以下 root シェルで実行。
$ mount / -o ro,remount # / を read only mount $ zerofree -v /dev/sda1 # 空き領域をゼロ埋め $ mount / -o rw,remount # / を writable に戻して… $ shutdown -h now # システムシャットダウン
ホスト Windows での操作
しばらくすると VM が終了するので、こんどは Windows ホストのコマンドラインで HDD イメージの compact を実行。
> "%PROGRAMFILES%\Oracle\VirtualBox\VboxManage"^ modifyhd <path.to>\<file.vdi> --compact
これで空き領域が圧縮された HDD イメージ内のできあがり。
(ファイルサイズとホスト PC の処理能力次第だけれど、時間がかかります)
補足: / にマウントされているデバイスの調べ方
mount コマンドを実行するとわかる。:
$ mount /dev/sda1 on / type ext4 (rw,errors=remount-ro) proc on /proc type proc (rw,noexec,nsuid,nodev) sysfs on /sys type sysfs (rw,noexec,nosuid,nodev) none on /sys/fs/fuse/connections type fusectl (rw) none on /sys/kernel/debug type debugfs (rw) none on /sys/kernel/security type securityfs (rw) udev on /dev type devtmpfs (rw,mode=0755) devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620) none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880) none on /run/shm type tmpfs (rw,nosuid,nodev) binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev)
(圧縮対象とする)一番大きなファイルシステムは df コマンドを使って確認できる。
$ df Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda1 65516240 47289332 14945348 76% / udev 1963672 4 1963668 1% /dev tmpfs 790268 792 789476 1% /run none 5120 0 5120 0% /run/lock none 1975668 160 1975508 1% /run/shm