VirtualBoxです。
久々にDockerを動かしてみてイメージファイルが溜まっていたので削除しました。 だけどゲスト側では確かに削除したはずなのにホスト側から見ると削除した分の容量が減っていない。。。。
なぜだ、ということで調べたところ、仮想ディスクを「可変サイズのストレージ」にすると 一度確保した領域を削除したとしてもその分の領域が空くことはないらしい。。。
自分の場合はゲストOSがLinuxなので、スペシャルファイルの/dev/zeroを使うことで実際の容量を減らせるらしい。
イメージ的にはこんな感じ↓
1,ゲストOS側で削除対象のファイルを削除する。
2,/dev/zeroを使って仮想ディスクの未使用領域分ひたすらゼロを詰めていく。
3,未使用領域が全てゼロになるのでホスト側からゼロ分の領域を圧縮する。
4,ホストOS側から見ても容量が減っているのが確認出来る!
■環境
ホストOS:Windows10
ゲストOS:Xubuntu18.04
システムルート上で容量喰ってるものを調べたいときはこれ。(上位5件) 今回は削除対象が分かっているので別に使わない。
sudo du -sm /* | sort -rn | head -5
実際の作業はここから↓
$ sudo dd if=/dev/zero of=zero bs=4k $ sudo rm zero
/dev/zeroをカレントディレクトリのzeroファイルにひたすら書き込んでいく。 その後rmすることで未使用領域にはゼロが格納されている状態になる。
ゲストOS側の作業は終わり。シャットダウンしておく。ホストOS側でコマンド叩くとエラーが出るため。
ホストOS側でVirtualBoxがインストールされてるフォルダにcmdを使って移動する。 自分はここ(デフォルトでインストールしたならここのはず)
> cd c:\Program Files\Oracle\VirtualBox
次に仮想ディスクのUUIDを取得するために以下を実行する。
> VBoxManage list hdds
対象の仮想ディスクのUUIDを以下のコマンドに貼り付けて実行する。
> VBoxManage modifyhd [仮想ディスクのUUID] --compact
これでホスト側のdviファイルが圧縮されて、容量が減っていることが確認出来るはず。
という話。 おわち。
引用
https://freefielder.jp/blog/2014/05/virtualbox-hdd-size.html