2012年11月30日金曜日

vmkfstoolsで2gbsparseオプションの制限を超える


仮想化でラクをできている @snicker_jp です。

今回、VMのイメージバックアップでハマったので、その回避方法です。

前提条件

  • ESXi 4.1
  • NFS ストレージ
  • バックアップ実行はESXiホスト



vmkfstoolsを使っているときに、
コマンド例:
vmkfstools -i [from_file] -d 2gbsparse [to_file]

Failed to clone disk : Reached the host's limit for open files (40).
Destination disk format: sparse with 2GB maximum extent size
と、エラーメッセージが出てクローンできませんでした。
vmkfstoolsの詳しいオプションなどはこちらのPDFから。

VMware Communities: 2gbsparse backup failures due to open...
http://communities.vmware.com/thread/327976

フォーラムの記事を見ると、
[ulimit -n 4096]
付けたらいいよ!って。

ulimitコマンドのマニュアルはここを参照しました。
Linuxコマンド集 - 【 ulimit 】 コマンドに割り当てる資源を制限する:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230911/

そう、ESXiはデフォルトで

~ # ulimit -a
time(seconds)        unlimited
file(blocks)         unlimited
data(kb)             unlimited
stack(kb)            512
coredump(blocks)     0
memory(kb)           unlimited
locked memory(kb)    unlimited
process              64
nofiles              256
vmemory(kb)          unlimited
locks                unlimited

こんな値になっているんです。

ulimit -n
なので、
-n ファイル・ディスクリプタの数を最大N個に制限する
という意味で、
nofiles 256
の値が変われば、イケる!?

解説(間違っているかも)

私の解釈では、2GBのファイルが256個が限界(nofiles 256)
2GB x 256 = 512GB
実際は、バックアップの時にスナップショットを作成するので、
512GB ÷ 2 = 256GB
vmdkファイルが、最大で256GBまでしか出来ないという解釈です。

vmdkのプロビジョニングで256GB以上のDiskを作っていたら、デフォルトのままだとバックアップが [2gbsparse] では取れないんです。
(thinとかにしたらいける。)

ESXi 4でも5でも、現時点ではvmdkの1ファイルが2TBを超えることが出来ないので、
ulimit -n 1024 とかでもいい気がします。

まとめ

最終的には、ulimitをつけてvmkfstoolsを実行すればいいとわかりました。

ulimit -n 4096 && vmkfstools -i [from_file] -d 2gbsparse [to_file]

これで、回避できました。

参考リンク:
VMware Communities: 2gbsparse backup failures due to open...
http://communities.vmware.com/thread/327976

共有