virtualboxはファイルシステムまで理解してくれないので、
ファイルとしては使用していない領域でも一度0以外のデータが書き込まれた領域は
仮想アプライアンスのエクスポートのときに無視してくれない。
なので無駄に容量を食うし、最悪データ流出に繋がる。
以下実験。
#残容量確認
$ df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 7.8G 4.2G 3.3G 57% /
#ランダムデータを書き込みし、ファイル削除
$ dd if=/dev/urandom of=gomi bs=128M
dd: error writing 'gomi': No space left on device
0+104 records in
0+103 records out
3459637248 bytes (3.5 GB, 3.2 GiB) copied, 21.4125 s, 162 MB/s
$ rm gomi
#残容量確認
$ df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 7.8G 4.2G 3.3G 57% /
$ poweroff
#仮想アプライアンスのエクスポート
#0埋めし、ファイル削除
$ dd if=/dev/zero of=gomi bs=128M
dd: error writing 'gomi': No space left on device
26+0 records in
25+0 records out
3457953792 bytes (3.5 GB, 3.2 GiB) copied, 6.86843 s, 503 MB/s
$ rm gomi
#残容量確認
$ df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 7.8G 4.2G 3.3G 57% /
#仮想アプライアンスのエクスポート
#それぞれのファイルサイズ確認
$ ls -la *.ova
-rw------- 1 summer4an summer4an 4.9G 2019-01-05 22:49 001_urandom.ova
-rw------- 1 summer4an summer4an 1.7G 2019-01-05 22:55 002_zero.ova
#ランダムデータを書き込んだ後消した場合と、0埋めした後消した場合の差が3.2GBで、ランダムデータ分がほぼ圧縮できずにまるまる容量の差になって残っている。
考えたら当然なんだけど気づかなかった…
これまで自分の開発環境を丸ごとあげるときとか、個人データ削除しかせずエクスポートして渡してたわ…