2018年12月7日金曜日

mob で QueryChangedDiskAreas を実行してみた

概要

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」しましょう
mob_query_changed_disk_area1.png

実行結果のタスクが表示されるので選択して info -> state が「success」になっていれば OK です

CBT が有効になっているか確認

VirtualMachine のページから config を辿ると確認できます
mob_query_changed_disk_area2.png

changeTrackingEnabled が true になっていれば OK です

スナップショットを作成する

QueryChangedDiskAreas はスナップショットの作成が必須です
事前に作成しておきましょう
VirtualMachine のページの methods から CreateSnapshot_Task を選択します
以下のように入力しましょう

  • name・・・dist_ss (好きなスナップショットの名前を入力してください)
  • description・・・test (任意です)
  • memory・・・0
  • quiesce・・・0

mob_query_changed_disk_area3.png

これで「Invoke Method」を実行してスナップショットを作成します
タスクが返ってくるので state が success になっていれば OK です

ChangeID が付与されているか確認

ChangeID はディスクの変更を管理するためのタイムスタンプのようなものです
この ChangeID からどれくらい変更があったかを QueryChangedDiskAreas で取得します
mob_query_changed_disk_area4.png

ポイントは 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・・・*

mob_query_changed_disk_area5.png

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 を実行すると以下のように差分領域が出ているのが確認できます
mob_query_changed_disk_area6.png

上記は全体と新たに作成したスナップショット (snapshot-97) の差分なので大量に出てきます (起動したことでいろいろと処理が走るので大量に差分が出ている)

例えばここからサーバに SSH でもして新たにファイルを 1 つ作成したとします

  • echo 'hello' > test.txt

これで再度スナップショットを作成してみましょう (snapshot-98)
そして再度 QueryChangedDiskAreas を実行するのですがその際に snapshot-97 の ChangeID を指定してみましょう
するとファイル 1 つ分の差分が取得できることが確認できます
mob_query_changed_disk_area7.png

使い方のイメージとしては snapshot には新たに作成したスナップショットの moref を指定し ChangeID には過去のスナップショットの ChangeID を指定します
そのスナップショット間の差分を取得するという API だと思っていれば良いかなと思います

最後に

QueryChangedDiskAreas API を mob で実行してみました
CBT が密に絡んでいる API なのがポイントかなと思います
基本的にはスナップショット間の差分を取得できる API になります

参考サイト

0 件のコメント:

コメントを投稿