Change Block Tracking (CBT)技術概要(2)

こちらのエントリーの続きです。
前回書いたとおり、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は差分バイナリファイルよりも格段に優れた方式です。しかしファイルシステム上のファイルレベルでこれらの機能を活用していくには限界があります。VMwarevSphere4.0リリースにおいて、VMFS4は発表しませんでした。ぜひ次の大きな革新として、仮想環境向けのファイルシステムとしてより先進的な機能を搭載してきて欲しいと思います。

*1:ま、そのうち自分でも確かめるつもりですが