下記、XenServer 5.6 SP2 + XS56EFP1001, XS56EFP1004, XS56EFP1005, XS56EFP1006, XS56ESP2, XS56ESP2001, XS56ESP2002, XS56ESP2003, XS56ESP2004, XS56ESP2005, XS56ESP2006, XS56ESP2007, XS56ESP2008, XS56ESP2009, XS56ESP2011, XS56ESP2013, XS56ESP2014, XS56ESP2015, XS56ESP2016
な環境での話。
検証環境でテストしていたら、妙な現象が。特定の VM でスナップショットが取れなくなっている。
怪しげなログ(/var/log/SMlog)
[15446] 2012-10-12 16:03:53.947425 ***** BLKTAP2:call_pluginhandler: EXCEPTION XenAPI.Failure, ['HOST_OFFLINE', 'OpaqueRef:5d79ee19-6942-531e-7eb3-833fdbb29044'] [15446] 2012-10-12 16:03:53.954785 lock: released /var/lock/sm/a4c3399a-4cde-6738-2aab-d627f456f369/sr [15446] 2012-10-12 16:03:53.955676 ***** vdi_snapshot: EXCEPTION util.SMException, failed to pause VDI c7514e13-25bd-4e0b-8ab7-32aad371a232 File "/opt/xensource/sm/blktap2.py", line 1212, in call_pluginhandler {"sr_uuid":sr_uuid,"vdi_uuid":vdi_uuid}) File "/usr/lib/python2.4/site-packages/XenAPI.py", line 229, in __call__ return self.__send(self.__name, args) File "/usr/lib/python2.4/site-packages/XenAPI.py", line 133, in xenapi_request result = _parse_result(getattr(self, methodname)(*full_params)) File "/usr/lib/python2.4/site-packages/XenAPI.py", line 203, in _parse_result raise Failure(result['ErrorDescription']) [15446] 2012-10-12 16:03:53.954785 lock: released /var/lock/sm/a4c3399a-4cde-6738-2aab-d627f456f369/sr [15446] 2012-10-12 16:03:53.955676 ***** vdi_snapshot: EXCEPTION util.SMException, failed to pause VDI c7514e13-25bd-4e0b-8ab7-32aad371a232 File "/opt/xensource/sm/SRCommand.py", line 94, in run return self._run_locked(sr) File "/opt/xensource/sm/SRCommand.py", line 131, in _run_locked return self._run(sr, target) File "/opt/xensource/sm/SRCommand.py", line 169, in _run return target.snapshot(self.params['sr_uuid'], self.vdi_uuid) File "/opt/xensource/sm/LVHDSR.py", line 997, in snapshot raise util.SMException("failed to pause VDI %s" % vdi_uuid) [15446] 2012-10-12 16:03:53.982316 Raising exception [82, Failed to snapshot VDI [opterr=failed to pause VDI c7514e13-25bd-4e0b-8ab7-32aad371a232]]
# xe vbd-list vm-name-label=<VMの名前> params=vdi-uuid
vdi-uuid ( RO) : c7514e13-25bd-4e0b-8ab7-32aad371a232
vdi-uuid ( RO) : <not in database>
片方は、CD-ROMドライブなので、必要なのは 上のほう。
# xe vdi-param-list uuid=c7514e13-25bd-4e0b-8ab7-32aad371a232
このパラメータを、full copy して問題がない VM と見比べると、次のことがわかった。
VM が電源ONされると、sm-config に
host_OpaqueRef:1279ce49-0bdf-809f-d4a3-df67d3021873: RO;
が追加される。host_OpaqueRef は、VMを稼働させるhostによって、uuid が異なる(が、なんと、その uuidは host-uuidじゃない。意味わからん)
起動が完了すると
host_OpaqueRef:1279ce49-0bdf-809f-d4a3-df67d3021873: RW;
になる。VMを shutdown すると、このパラメータは消される。
で、Snapshotが取れないVMは、停止状態で
host_OpaqueRef:5d79ee19-6942-531e-7eb3-833fdbb29044: RO;
稼動状態で
host_OpaqueRef:1279ce49-0bdf-809f-d4a3-df67d3021873: RW; host_OpaqueRef:5d79ee19-6942-531e-7eb3-833fdbb29044: RO;
ん?2つある...
実は、この問題となったVMは、検証環境を再構築する際に、退避させていた VM。
どうやら、強制shutdownしたか、起動途中で強制shutdown したかはわからないが、sm-config にこのゴミ情報が残った状態で、VMのバックアップが取られてしまったらしい。
で、新環境では、その host_OpaqueRef で指定される host は存在しないので、HOST_OFFLINE となった模様(VMのmeta情報に、バックアップしては困る(多分しちゃだめな)情報が残ることは、ままある話だけど……以前あった話では、そのVMでは、使ってないSR情報が入ってて、そのSRがないから meta情報は importできないよ!って怒られたことがある。泣いた...)
で、こまったことに、sm-config って RW じゃない。
sm-config (MRO):
xeコマンド使って、書き換えできない...良い子は真似しちゃいけない、マスターサーバ上での state.db 直接書き換え
# xe pool-ha-disable
# /etc/init.d/xapi stop
# cp /var/xapi/state.db /var/xapi/state.db.bak
# vi /var/xapi/state.db <- 該当部分の削除
# /etc/init.d/xapi start
slaveサーバには、古い情報が残るけど、snapshotの作成&削除とかしてると、更新されるのでまぁいいでしょう。
state.db のクリーナーが欲しい今日この頃。
と、ここまで来ても、なんで RO な host_OpaqueRef が残ってたか、いつの時点でかはトレースできなかった。
IPv4/IPv6 meter |
思ったより安い……時もある、Amazon |