OpenStack Resume实例报错(2)

Suspend及Resume过程
 
以前也Suspend然后Resume过实例并没有出现问题。首先我新建了一个实例然后执行Suspend完成后再Resume成功。难道是因为时间太久的原因?首先通过粗略观察,Suspend会 做以下几件事:
 
1)将实例的内存状态以“域名.save”保存到/var/lib/libvirt/qemu/save目录下,注意该文件的所有者为root,如下所示:

[root@stack6 ~]# ll /var/lib/libvirt/qemu/save/
总用量 5422824
-rw-------. 1 root root 4012820373 6月  5 16:44 instance-00000082.save
-rw-------. 1 root root 1540140463 6月  5 16:58 instance-000000e2.save

2)删除目录/var/lib/libvirt/qemu下的对应实例的“域名.monitor”文件

3)修改实例目录下的文件console.log、disk的所有者为root:root,如下:

[root@stack6 ~]# ll /var/lib/nova/instances/instance-00000082/
总用量 5377104
-rw-rw----. 1 root root          0 6月  19 12:43 console.log
-rw-r--r--. 1 root root 5506269184 6月  5 16:44 disk
-rw-r--r--. 1 nova nova      1421 11月  1 2012 libvirt.xml

suspend调用的是managedSave更准确详细的过程估计可以用 类似strace的工具跟踪virsh managedsave 来获得,如下,而resume就是suspend的逆过程但是调用的是createWithFlags,virsh下没有找到对应的命令

[root@stack5 ~]# strace -o managedsave.log virsh managedsave instance-00000193

解决方法
 
Google了半天没有找到比较好的方法,找到的唯一可行的方法是在实例所在物理节点运行virsh managedsave-remove dom删除保存的内存镜像文件然后再重启实例, 这样的话suspend前的内存状态将会丢失,实例重新启动,如下:

[root@stack6 ~]# virsh managedsave-remove instance-00000082
Removed managedsave image for domain instance-00000082

补充:通过上述方法删除内存镜像文件重启后再进行suspend和resume操作,一切正常,好神奇!
 
北方工业大学 | 云计算研究中心 | 姜永

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/75de47ac5d07b0f7076d93be35e335c5.html