肥大した仮想ディスクの圧縮

このページを配信しているサーバはVMWare上で動作していますが、サーバ機器の更改時に、実利用量に対する仮想ディスクのサイズがやたら大きいことに気がつきました。調べてみると、仮想ディスクのサイズは基本的に肥大化する一方で、仮想ディスク内の利用量を減らしたとしても、仮想ディスクのサイズは小さくならないとの事。

最近のHDD容量の増大スピードは尋常ではないので、通常であれば多少のディスクの無駄使いは問題にならないのですが、今回はサーバ機器更改に伴ってストレージがSSDになるので、数GBと言えども貴重なスペースです。

VMWare謹製ツールであるVMWare Toolsが導入されていれば、基本的にこちらを利用すればいいのですが(解説ページ)、実際に利用してみると、CentOSをデフォルト設定でインストールすると採用されるLVM(Logical Volume Manager)では利用できないようでした。

更に調べてみたところ、vmshrinkというツールがありました。
公式なツールではありませんが、実際に利用してみたところ問題なく利用でき、仮想ディスクのサイズも半分くらいになって大助かりでした。ちなみに管理人の環境は、以下の通りです。
・OS : Windows Server 2008 R2 (x64)
・VMWare : VMWare Server 2.0.1
・仮想OS : CentOS 5.3 (x86)

まずは、仮想な背中からファイルをダウンロードします。
UNIXであればvmw-060510.tar.gzをダウンロードすれば良いでしょう。
ファイルを展開すると、こんな状態になります。

[root@www vmw]# ls
DOS          OpenBSD-3.8      Windows         vmshrink-eucj.txt  vmw.txt
FreeBSD-6.0  README-eucj.TXT  src             vmshrink-sjis.txt
Linux-FC4    README-sjis.TXT  vmftp-eucj.txt  vmshrink.txt
Minix-3.1.1  README.TXT       vmftp-sjis.txt  vmw-eucj.txt
NetBSD-3.0   Solaris-10       vmftp.txt       vmw-sjis.txt

OSの名前のディレクトリには、コンパイル済みのバイナリが格納されています。
今回のターゲットはCentOS 5.3なので、強いて選ぶならばLinux-FC4ですが、念のためソースからコンパイルします。make一発で通りました。

[root@www vmw]# cd src
[root@www src]# make
Making ‘all’ for Linux (Makefile.Linux)
make[1]: ディレクトリ `/root/vmw/src’ に入ります
gcc -O2 -DHAVE_STDINT_H -DHAVE_CLOCK_SETTIME -DHAVE_SIGLONGJMP -DHAVE_NANOSLEEP -DHAVE_ICONV_H -c vmw.c -o vmw.o
gcc -O2 -DHAVE_STDINT_H -DHAVE_CLOCK_SETTIME -DHAVE_SIGLONGJMP -DHAVE_NANOSLEEP -DHAVE_ICONV_H -c vmtool.c -o vmtool.o
gcc -O2 -DHAVE_STDINT_H -DHAVE_CLOCK_SETTIME -DHAVE_SIGLONGJMP -DHAVE_NANOSLEEP -DHAVE_ICONV_H -c termutil.c -o termutil.o
as  vmcall.gas.s -o vmcall.gas.o
gcc  vmw.o vmtool.o termutil.o vmcall.gas.o -lrt -o vmw
gcc -O2 -DHAVE_STDINT_H -DHAVE_CLOCK_SETTIME -DHAVE_SIGLONGJMP -DHAVE_NANOSLEEP -DHAVE_ICONV_H -c vmshrink.c -o vmshrink.o
gcc  vmshrink.o vmtool.o termutil.o vmcall.gas.o  -o vmshrink
gcc -O2 -DHAVE_STDINT_H -DHAVE_CLOCK_SETTIME -DHAVE_SIGLONGJMP -DHAVE_NANOSLEEP -DHAVE_ICONV_H -c vmftp.c -o vmftp.o
gcc -O2 -DHAVE_STDINT_H -DHAVE_CLOCK_SETTIME -DHAVE_SIGLONGJMP -DHAVE_NANOSLEEP -DHAVE_ICONV_H -c vmshf.c -o vmshf.o
gcc  vmftp.o vmshf.o vmtool.o vmcall.gas.o   -o vmftp
make[1]: ディレクトリ `/root/vmw/src’ から出ます

vmshrinkのバイナリが出来るので、おもむろにそれを実行。引数は不要です。

[root@www src]# ./vmshrink
Wiping free space on / (43435 / 47550 MB free).
43387 / 43435 MB complete (C: cancel / S: skip)
Wiping free space on /boot (63 / 98 MB free).
62 / 63 MB complete (C: cancel / S: skip)
Complete

これだけで、仮想ディスクのサイズが実利用量にかなり近づくはずです。
メンテ時に実施してみてはいかがでしょうか。

「肥大した仮想ディスクの圧縮」への1件のフィードバック

コメントする