解決ovirt虛擬機restore snapshot無法回退內存的問題

相關問題及報錯:
回退快照後,spice終端發現虛擬機重新啓動,沒有恢復快照內存。

1、2日誌中均出現如下報錯:

2018-02-12 19:39:23,830+0800 ERROR (vm/d7be0fde) [virt.vm] (vmId=’d7be0fde-f9b9-4447-a250-2453482faef9’) The vm start process failed (vm:662)
Traceback (most recent call last):
File “/usr/share/vdsm/virt/vm.py”, line 607, in _startUnderlyingVm
self._completeIncomingMigration()
File “/usr/share/vdsm/virt/vm.py”, line 3268, in _completeIncomingMigration
self.cont()
File “/usr/share/vdsm/virt/vm.py”, line 1128, in cont
self._underlyingCont()
File “/usr/share/vdsm/virt/vm.py”, line 3368, in _underlyingCont
self._dom.resume()
File “/usr/lib/python2.7/dist-packages/vdsm/virt/virdomain.py”, line 69, in f
ret = attr(*args, **kwargs)
File “/usr/lib/python2.7/dist-packages/vdsm/libvirtconnection.py”, line 123, in wrapper
ret = f(*args, **kwargs)
File “/usr/lib/python2.7/dist-packages/vdsm/utils.py”, line 926, in wrapper
return func(inst, *args, **kwargs)
File “/usr/lib/python2.7/dist-packages/libvirt.py”, line 1905, in resume
if ret == -1: raise libvirtError (‘virDomainResume() failed’, dom=self)
libvirtError: Requested operation is not valid: domain is already running

問題調查:
該問題出現在vdsm端,vdsm創建快照和虛擬機暫停兩項功能在原理上是一致的,且啓動流程相同,但虛擬機暫停後啓動是正常,執行流程如下。

snapshot線:

Created with Raphaël 2.1.2APIpreparefreeze file systemself._dom.snapshotCreateXMLreturn

hibernate線:

Created with Raphaël 2.1.2APIpreparemigration_regular_run_prepareGuestself._vm_pauseself._dom.suspendsaveState...etcreturn

vm啓動線:
API->prepare->_startUnderlyingVm->_completeIncomingMigration->self._dom_resume->…etc->return

Created with Raphaël 2.1.2APIprepare_startUnderlyingVm_completeIncomingMigrationself._dom_resume...etcreturn

創建快照、暫停虛擬機在保存內存和cpu狀態的流程並不相同,暫停虛擬機在保存cpu狀態前會調用self._dom.suspend暫停虛擬機,而創建快照只會凍結文件系統,創建快照不暫停虛擬機的原因見[1]中的vdsm註釋,社區認爲libvirt會pause vm,所以在vdsm並未進行pause操作,這會導致在vm啓動線中,調用self._dom_resume時出現domain is already running的報錯,這是因爲libvirt中會首先保存cpu狀態,再去檢測cpu狀態,如果running則pause,所以恢復快照後cpu狀態仍然是保存下來running,這時候再調用resume會報錯。

實際改動:
改動見[2],創建快照時只需在保存cpu狀態前pause vm,並在剩餘操作執行完畢後resume vm即可。

測試結果:
修改後重新創建多個快照,並進行5次回退操作,狀態顯示均正常,spice連接後頁面正常、內存回退正常。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章