こちらのエントリーの続きです。
前回書いたとおり、CBTを有効にすると-ctk.vmdkファイルが仮想ディスクファイル毎に自動的に用意されます。私が確認した環境では、10GBの仮想ディスクファイルに対して640.5KB、40GBの仮想ディスクファイルに対して2560.5KBの仮想ディスクCBTバイナリファイルが作成されました。
[root@ESX_Host VM_Name]# ls -la total 56629696 drwxr-xr-x 1 root root 2100 Apr 19 14:23 . drwxr-xr-t 1 root root 1260 Apr 13 17:10 .. -rw------- 1 root root 655872 Apr 19 14:24 VM_Name_1-ctk.vmdk ←2個目の仮想ディスクファイルのCBTバイナリ -rw------- 1 root root 10737418240 Apr 19 14:35 VM_Name_1-flat.vmdk ←2個目の仮想ディスクファイルのバイナリ -rw------- 1 root root 525 Apr 19 14:24 VM_Name_1.vmdk ←2個目の仮想ディスクファイルの構成情報 -rw------- 1 root root 2621952 Apr 19 14:24 VM_Name-ctk.vmdk ←1個目の仮想ディスクファイルのCBTバイナリ -rw------- 1 root root 4294967296 Apr 19 14:23 VM_Name-f65c90db.vswp ←スワップファイル -rw------- 1 root root 42949672960 Apr 19 15:29 VM_Name-flat.vmdk ←1個目の仮想ディスクファイルのバイナリ -rw------- 1 root root 8684 Apr 19 14:36 VM_Name.nvram ←NVRAMファイル -rw------- 1 root root 547 Apr 19 14:24 VM_Name.vmdk ←1個目の仮想ディスクファイルの構成情報 -rw------- 1 root root 586 Apr 14 04:05 VM_Name.vmsd ←スナップショット管理ファイル -rwxr-xr-x 1 root root 3092 Apr 19 14:24 VM_Name.vmx ←仮想マシン構成情報 -rw------- 1 root root 270 Apr 14 00:59 VM_Name.vmxf ←仮想マシン構成情報補足XMLファイル -rw-r--r-- 1 root root 1533010 Apr 16 18:53 vmware-1.log ←旧ログファイル -rw-r--r-- 1 root root 251899 Apr 19 14:36 vmware.log ←現行ログファイル [root@ESX_Host VM_Name]#
0.5KBの部分はヘッダ?データだと考えれば、仮想ディスクファイルのサイズが4倍になっているのに対して、CBTバイナリもちょうど4倍になっていますので、CBTバイナリファイルのサイズは仮想ディスクファイルのサイズに比例して決定される様です。ただしこれはブロックサイズ8MBのVMFS3データストアの場合です。10GBは10240MBですから、8MBブロックだと1280個のブロックから構成されていると考えられます。それに対してCBTバイナリファイルは640.5KBですから、1ブロックあたり0.5KB必要にしているということになります。この仮説が正しいのかどうかについては、別のブロックサイズのデータストアで確認すればひと目でわかることなのですが、未確認です(^_^;)。誰か確認したら教えてもらえると嬉しいです*1。
通常時の-flat.vmdkに対してだけではなく、スナップショット有効時の-delta.vmdkに対しても作成されます。
-rw------- 1 root root 2621952 Apr 19 15:31 VM_Name-000001-ctk.vmdk ←1個目の仮想ディスクファイルに対する差分CBTバイナリ ※元のCBTバイナリと同サイズ -rw------- 1 root root 16861184 Apr 19 15:31 VM_Name-000001-delta.vmdk ←1個目の仮想ディスクファイルに対する差分バイナリ -rw------- 1 root root 385 Apr 19 15:31 VM_Name-000001.vmdk -rw------- 1 root root 655872 Apr 19 15:31 VM_Name_1-000001-ctk.vmdk ←2個目の仮想ディスクファイルに対する差分CBTバイナリ ※元のCBTバイナリと同サイズ -rw------- 1 root root 16799744 Apr 19 15:31 VM_Name_1-000001-delta.vmdk ←2個目の仮想ディスクファイルに対する差分バイナリ -rw------- 1 root root 391 Apr 19 15:31 VM_Name_1-000001.vmdk
ただし、仮想ディスクに対するスナップショットファイル自体は変更差分を蓄積に基づいてサイズが拡張されていくバイナリファイルですが、その差分に対するCBTバイナリファイルのサイズは元の仮想ディスクファイルに対するものと同サイズになります。まぁ当たり前の話ですね。変更されるブロックの管理用なわけですから、差分バイナリデータそのものを管理するスナップショット用のファイルとは性質が異なります。
「前の状態」ではなく「変更された箇所」さえ把握できればよいのであれば、CBTは差分バイナリファイルよりも格段に優れた方式です。しかしファイルシステム上のファイルレベルでこれらの機能を活用していくには限界があります。VMwareはvSphere4.0リリースにおいて、VMFS4は発表しませんでした。ぜひ次の大きな革新として、仮想環境向けのファイルシステムとしてより先進的な機能を搭載してきて欲しいと思います。
*1:ま、そのうち自分でも確かめるつもりですが