概要
QueryChangedDiskAreas は CBT (Change Block Tracking) を有効にした VM のディスクの変更を領域を取得することができる API です
まずは API ではなく mob から実行してみようと思いやってみました
概要
- VCSA 6.5.0 9451637
事前作業
適当に VM を作成しておきましょう
また mob を開いてログインし対象の VirtualMachine のページまで移動しておきましょう
URL 的には https://xxx.xxx.xxx.xxx/mob/?moid=vm%2d62
という感じです
今回は moid=vm-62
という VM に対して操作を進めます
CBT を有効にする
デフォルトだと有効になっていません
VirtualMachine のページの methods から ReconfigVM_Task
を選択します
そして spec の欄に以下を入力します
<spec><changeTrackingEnabled>true</changeTrackingEnabled></spec>
これで「Invoke Method」しましょう
実行結果のタスクが表示されるので選択して info
-> state
が「success」になっていれば OK です
CBT が有効になっているか確認
VirtualMachine のページから config
を辿ると確認できます
changeTrackingEnabled
が true になっていれば OK です
スナップショットを作成する
QueryChangedDiskAreas はスナップショットの作成が必須です
事前に作成しておきましょう
VirtualMachine のページの methods から CreateSnapshot_Task
を選択します
以下のように入力しましょう
- name・・・dist_ss (好きなスナップショットの名前を入力してください)
- description・・・test (任意です)
- memory・・・0
- quiesce・・・0
これで「Invoke Method」を実行してスナップショットを作成します
タスクが返ってくるので state が success になっていれば OK です
ChangeID が付与されているか確認
ChangeID はディスクの変更を管理するためのタイムスタンプのようなものです
この ChangeID からどれくらい変更があったかを QueryChangedDiskAreas で取得します
ポイントは ChangeID が付与されるのはスナップショットのハードディスクになります
VirtualMachine から辿れるハードウェアには付与されていないので注意です
上記の辿り方は VirtualMachine のページから rootSnapshot
-> config
-> hardware
-> device[2000] VirtualDisk
-> backing
で確認できます
スナップショットが複数ある場合は rootSnapshot ではなく snapshot から各スナップショットを参照できます
QueryChangedDiskAreas を実行する
これで QueryChangedDiskAreas を実行できます
VirtualMachine のページの methods から QueryChangedDiskAreas
を選択しましょう
そして以下のように入力します
- snapshot・・・
<snapshot type="VirtualMachineSnapshot">snapshot-95</snapshot>
- deviceKey・・・2000
- startOffset・・・0
- changeId・・・
*
snapshot は先程参照したスナップショットの moref を入力します
deviceKey はスナップショットのハードウェアから参照した disk[2000]
の 2000 の部分を入力します
接続されているハードウェアの数によって異なるのでここは各自の数字を入力してください
startOffset
は探索を開始するオフセットを指定します
先頭から探索する場合は 0 を指定します
changeId
は今回は *
を入力します
ここにスナップショットに振られていた changeId
を指定するとその変更以降で変更があった領域を取得することができます
入力できたら「Invoke Method」を選択しましょう
現状は VM も停止している状態で実行しているので特に差分がなく changeArea は Unset で返ってきます
トラブルシュート
QueryChangedDiskAreas を実行した際に deviceKey が Invalid だというエラーが返ってくる場合があります
単純に指定している HardDisk の番号が間違っている可能性もありますが自分の場合は CBT を有効にしていないのが原因でした
もう少しいうと ChangeID が付与されたスナップショットが 1 つでも指定した deviceKey に存在しないと該当のエラーになるっぽいです
差分を出してみる
せっかくなので差分を出してみましょう
対象の VM を起動しましょう
そして新たにスナップショット (snapshot-97) を作成します
これで再度 QueryChangedDiskAreas を実行すると以下のように差分領域が出ているのが確認できます
上記は全体と新たに作成したスナップショット (snapshot-97) の差分なので大量に出てきます (起動したことでいろいろと処理が走るので大量に差分が出ている)
例えばここからサーバに SSH でもして新たにファイルを 1 つ作成したとします
echo 'hello' > test.txt
これで再度スナップショットを作成してみましょう (snapshot-98)
そして再度 QueryChangedDiskAreas
を実行するのですがその際に snapshot-97 の ChangeID を指定してみましょう
するとファイル 1 つ分の差分が取得できることが確認できます
使い方のイメージとしては snapshot には新たに作成したスナップショットの moref を指定し ChangeID には過去のスナップショットの ChangeID を指定します
そのスナップショット間の差分を取得するという API だと思っていれば良いかなと思います
最後に
QueryChangedDiskAreas
API を mob で実行してみました
CBT が密に絡んでいる API なのがポイントかなと思います
基本的にはスナップショット間の差分を取得できる API になります
0 件のコメント:
コメントを投稿