前回のブログでvagrantのBoxファイルはできたけどもファイルサイズがでかい・・・というところになっております。そこで、自分が調べてみて、いくつかファイルサイズの縮小化につながるのではないかというものを実行・比較してみようと思っています。
VirtualBoxで仮想マシンを作成後に以下をそれぞれ行います。
- 未使用ファイル削除
- デフラグ
- 仮想ディスクの縮小化
こちらもそれぞれ説明します。
まずは、1. 未使用ファイル削除 についてです。これは文字通り使用していないファイルを削除していくことを言っております。具体的には以下を削除しました。
# APTキャッシュの削除
$ sudo apt-get clean
# 一時ファイルの削除
$ sudo rm -rf /tmp/*
$ sudo rm -rf /var/tmp/*
# 古いカーネルや不要なパッケージの削除
$ sudo apt-get autoremove --purge -y
# ログファイルの削除
$ sudo find /var/log -type f -name "*.log" -exec truncate -s 0 {} \;
# Snapパッケージの削除
$ sudo snap remove --purge $(snap list | awk '!/^Name/ {print $1}')
$ sudo apt-get remove --purge snapd -y
$ sudo rm -rf /var/cache/snapd/
$ sudo rm -rf ~/snap
# ドキュメントファイルの削除
$ sudo rm -rf /usr/share/doc/*
$ sudo rm -rf /usr/share/man/*
$ sudo rm -rf /usr/share/info/*
$ sudo rm -rf /usr/share/lintian/*
$ sudo rm -rf /usr/share/locale/*
前々回のブログで最小構成(minimize)のUbuntuだとmanもインストールされないのでと言ってはいたのですが、開発環境であることと、必要になった場合、Box内で再度インストールすれば良いかと思い、manも消しています。
次に、2. デフラグ についてです。Ubuntuではデフォルトでデフラグツールがインストールされていますので、これを実行しています。
sudo e4defrag / && sudo dd if=/dev/zero of=/EMPTY bs=1M; sudo rm -f /EMPTY
デフラグ実行後に、空き領域をゼロ埋めすることで圧縮効率を向上させることを目的にしています。その後、ゼロ埋め用の一時ファイルを削除しています。
最後に、3. 仮想ディスクの縮小化 についてです。これは以下コマンドを実行しています。
VBoxManage modifymedium --compact "/Volumes/ZZZZZZ/VirtualBox VMs/nnnnnnnn/nnnnnnnn.vdi"
Vboxmanage コマンドで仮想ディスクの縮小化を行えるようです。
上記の内容をそれぞれ行なった後にvagrant packageでBoxファイルを作成した結果の一覧が以下になります。ちなみに再度記載しますが、VirtualBox仮想マシン作成時は以下で作成しています。
- CPU数:2
- 仮想ディスク容量:25GB
パターン | 未使用ファイル削除 | デフラグ | 仮想ディスク縮小化 | 容量 |
パターン1 | × | × | × | 2.25 GB |
パターン2 | × | ⚪︎ | × | 1.26 GB |
パターン3 | × | ⚪︎ | ⚪︎ | 1.26 GB |
パターン4 | ⚪︎ | × | × | 2.15 GB |
パターン5 | ⚪︎ | ⚪︎ | × | 1.24 GB |
パターン6 | ⚪︎ | ⚪︎ | ⚪︎ | 1.24 GB |
実行する前での自分の予想では、仮想ディスクの縮小化がもう少し効いてくれるのではないかと思ったのですが、ほぼ効いていない結果となりました。デフラグが一番効いています。
この結果を見ていてふと思ったのですが、仮想ディスク容量を余裕を見て25GBで作成していたのですが、小さくすれば良かったのではないか・・・(ちなみにvagrantのデフォルトは10GB)というのが頭をよぎったので、追加で以下条件でも行ってみました。
- CPU数:2
- 仮想ディスク容量:10GB
パターン | 未使用ファイル削除 | デフラグ | 仮想ディスク縮小化 | 容量 |
パターン6 | ⚪︎ | ⚪︎ | ⚪︎ | 1.19 GB |
当初のファイルサイズと比較すれば、半分近く(AlmaLinuxやRockyLinuxのBoxファイルと同程度)になりました。
ここまでくると、Ubuntu Server(minimized)はどうなのかと思い、確認してみました。
- CPU数:2
- 仮想ディスク容量:10GB
パターン | 未使用ファイル削除 | デフラグ | 仮想ディスク縮小化 | 容量 |
パターン6(minimized) | ⚪︎ | ⚪︎ | ⚪︎ | 1.17 GB |
微妙に小さくはなりました・・・。
この後実際にvagrant box addでbox追加を行い、webmin / virtualminのインストールから開発環境の構築まで行いましたが、動作としては問題がなかったので、作成したBoxファイルを当面使用していこうと思います。
追伸1:vagrant ssh 実行時に、ターミナルで以下のように表示されます。
This system has been minimized by removing packages and content that are
not required on a system that users do not log into.
To restore this content, you can run the 'unminimize' command.
unminimize コマンドを実行することで削除したパッケージが復元されます。
追伸2:apt update 実行時に、ターミナルで以下のように表示される場合があるかもしれません。
grub-pc: Running grub-install ...
/disk/by-id/scsi-SATA_VBOX_HARDDISK_VBc6cbfe60-a191d8f9 does not exist, so cannot grub-install to it!
You must correct your GRUB install devices before proceeding:
DEBIAN_FRONTEND=dialog dpkg --configure grub-pc
dpkg --configure -a
dpkg: error processing package grub-pc (--configure):
installed grub-pc package post-installation script subprocess returned error exit status 1
dpkg: dependency problems prevent configuration of grub-gfxpayload-lists:
grub-gfxpayload-lists depends on grub-pc (>= 1.99~20101210-1ubuntu2); however:
Package grub-pc is not configured yet.
dpkg: error processing package grub-gfxpayload-lists (--configure):
dependency problems - leaving unconfigured
grub-pcがインストールされるべきデバイスを見つけられないために発生しているそうです。コマンドで再構成を行う場合は、以下を実行します。(自分はこれを実行しました。)
# GRUBのインストール先を設定
$ echo "grub-pc grub-pc/install_devices multiselect /dev/sda" | sudo debconf-set-selections
$ echo "grub-pc grub-pc/install_devices_empty boolean false" | sudo debconf-set-selections
# GRUBをインストール
$ sudo grub-install /dev/sda
$ sudo update-grub