ESXi5でシンプロビジョニングされた仮想ディスクを圧縮する・続き

前回の方法では、dd コマンドで空き領域に0を書き込み、vmkfstools でその領域を解放するものでした。


ESXi5でシンプロビジョニングされた仮想ディスクを圧縮する - しょぼんメモリ (´・ω・`)


dd コマンドで何度か0を書き込んでも、vmkfstools でVMDKを縮小できないケースがありました。

そこで、dd コマンドではなく、zerofree というコマンドを使用して、空き領域に0を書き込んで試してみました。

【環境】
ESXi-5.1(Update 2)
ゲストOS:CentOS 5/32bit


zerofree のソースコードの入手はここから。
http://intgat.tigress.co.uk/rmy/uml/index.html


RPMファイルの入手はここから。

RPM Search
http://rpm.pbone.net/

「Advanced RPM Search」をクリックして詳細検索のフォームを表示し、RedHat EL5/CentOS 5にチェックを入れて、「zerofree」で検索する。

RedHat EL 5」用のRPMしか検索結果に表示されないけれど、CentOSでも使えるのでダウンロードする。


RPMファイルを入手してインストール。

# wget ftp://ftp.pbone.net/mirror/download.fedora.redhat.com/pub/fedora/epel/5/i386/zerofree-1.0.1-5.el5.i386.rpm
# rpm -ivh zerofree-1.0.1-5.el5.i386.rpm


内容を確認。

# rpm -ql zerofree
/usr/sbin/sparsify
/usr/sbin/zerofree
/usr/share/doc/zerofree-1.0.1
/usr/share/doc/zerofree-1.0.1/COPYING
/usr/share/doc/zerofree-1.0.1/index.html

manが無いので、ヘルプを表示・・・されず構文が表示されるだけ。

# /usr/sbin/zerofree --help
/usr/sbin/zerofree: invalid option -- -
usage: /usr/sbin/zerofree [-n] [-v] filesystem


Ubuntu だけど、manをネットで発見。
http://manpages.ubuntu.com/manpages/lucid/man8/zerofree.8.html

  • n:テスト実行。
  • v:詳細表示。進捗が表示される。


シングルユーザモードで、読み取り専用で再マウントして実行する。

# init 1
# mount -o remount,ro /
# zerofree -v /dev/sda2

/home のパーティションを分けている等、複数パーティションがある場合は、全てのパーティションで繰り返す。

完了したら再マウントして、仮想マシンを停止。

# mount -o remount,rw /
# poweroff

不安だったので、ここで仮想マシンを一度起動してみて、正常に起動するのを確認後、再び仮想マシンを停止。

この後、以前と同じく vmkfstools コマンドで圧縮すると、今度はVMDKのサイズが減ったのを確認できた。


ところで、

dd がバッファにキャッシュされていた可能性があるので、dd の後に以下を実行して縮小を試してみれば良かったかもしれない(先に zerofree したので未検証)。

# sync; echo 3 >/proc/sys/vm/drop_caches

あるいは、dd にオプションの「iflag=direct」「oflag=direct」を付けてキャッシュしないようにするとか?(未検証)