2019年3月19日火曜日

rbvmomi で QueryChangedDiskAreas をコールしてみた

概要

過去に golang で QueryChangedDiskAreas をコールしました
今回は rbvmomi からコールしてみました

環境

  • CentOS 7.5.1840
  • Ruby 2.5.0p0
  • rbvmomi 2.0.1

サンプルコード

事前に changeTrackingEnabled は有効にしておきましょう
また snapshot も作成しておきます
vCenter などの接続情報は適宜変更してください

require 'rbvmomi'

vim = RbVmomi::VIM.connect(
  host: '192.168.100.30',
  user: 'administrator@vsphere.local',
  password: 'xxxxxxxxxx',
  insecure: 'true'
)

dc = vim.serviceInstance.find_datacenter('dc') || fail('datacenter not found')
vm = dc.find_vm('vm') || fail('VM not found')

params = {
  snapshot: RbVmomi::VIM.VirtualMachineSnapshot(vim, "snapshot-100"),
  deviceKey: 2000,
  startOffset: 0,
  changeId: "*"
}
ret = vm.QueryChangedDiskAreas(params)
puts ret.startOffset
puts ret.length
ret.changedArea.each { |area|
  puts "start => #{area.start}, length => #{area.length}"
}

少し解説

params の 4 つの項目はすべて必須です
スナップショットの moref と HDD のデバイス番号、探索を開始するオフセット、そしてスナップショットと差分を取得する開始地点の ID です
すべて mob から取得できます

QueryChangedDiskAreas の戻り値は RbVmomi::VIM::DiskChangeInfo になります
アクセス可能な属性は startOffset, length, changedArea になります
さらに changedAreaRbVmomi::VIM::DiskChangeExtent になっておりこれをループすることで実際にディスクの差分箇所を確認することができます

最後に

rbvmomi で QueryChangedDiskAreas を実行してみました
今回の手順の場合は事前に CBT とスナップショットを取得しておく必要があります
QueryChangedDiskAreas に渡らすパラメータの構造が少しわかりにくいくらいであとは簡単にコールできると思います

参考サイト

0 件のコメント:

コメントを投稿