nova热快照关键流程解析

Nova snapshot 目前只提供一种创造系统盘镜像的方法,不支持内存快照,不支持回滚至快照点,只能采用该快照镜像创建一个新的虚拟机。
也就是对当前的系统盘做一个快照生成 qcow2 格式的文件,然后上传到 glance 里面,其作用也往往是方便使用快照生成的镜像来部署新的虚机。
而Live Snapshot 则允许用户在虚机处于运行状态时不停机做快照。

下面我们通过pdb调试工具,剖析一下nova创建虚机热快照的具体过程:
工欲善其事必先利其器,在阅读源码的过程中如果能够有效的结合gdb/pdb等调试工具, 能够让你的学习事倍功半。
  1. 首先通过命令行创建一个虚机
# nova boot zhuozh-2 --image bcec-bclinux-7.1-amd64-server-10G-2015.08.15 --flavor 2 --nic net-id=00ea69c0-fa14-4311-be4d-bf07a73b3568 --availability-zone nova:node-35.domain.bcec
# nova show zhuozh-2并确认虚机正常启动,处于ACTIVE状态
...
| OS-EXT-SRV-ATTR:instance_name        | instance-000084ea
| OS-EXT-STS:vm_state                  | active
...
在计算节点上查看虚机的ID号:
# virsh list
 Id    Name                           State
----------------------------------------------------
 7     instance-000084ea              running

在计算节点上查看盘,有两块盘,一块系统盘,一块CDROM
# virsh domblklist 7
Target     Source
------------------------------------------------
vda        /var/lib/nova/instances/50aa05e6-04e8-4807-9c9f-59d477b66b0c/disk
vdz        /var/lib/nova/instances/50aa05e6-04e8-4807-9c9f-59d477b66b0c/disk.config

      
  1. 首先停掉计算节点的nova-compute服务:
          # service openstack-nova-compute stop

          在调试之前,在快照创建的必经之路上上加入调试断点:
    import pdb
    pdb.set_trace()
         如下:
# vim /usr/lib/python2.6/site-packages/nova/virt/libvirt/driver.py
    def snapshot(self, context, instance, image_href, update_task_state):
        """Create snapshot from a running VM instance.
        This command only works with qemu 0.14+
        """
        import pdb
        pdb.set_trace()

     手动启动nova-compute服务:
     # usr/bin/nova-compute --config-file=/etc/nova/nova.conf --log-file=/var/log/nova/compute.log
     这样创建快照的时候,就会在 snapshot()入口函数这里停住,接下来,可以像gdb一样进行调试(l查看源码,s下一句,n下一函数, p打印)
     
  1. 接下来利用nova image-create对系统盘创建快照,并添加--debug查看快照的创建过程:
# nova --debug image-create 2e096559-6187-45a8-b3d8-b787e3da2e2a "zhuozh-1-ss" --show
...
REQ: curl -i 'http://10.133.1.2:8774/v2/1f6364c9386b4cc687a659a466339cb8/servers/6efd608b-2ed0-477d-b770-7e05eb71fd04/action' -X POST -H "Accept: application/json" -H "Content-Type: application/json" -H "User-Agent: python-novaclient" -H "X-Auth-Project-Id: admin" -H "X-Auth-Token: {SHA1}9f718579f6e5045fbd533eea58e1f3d497fb183f" -d '{"createImage": {"name": "zhuozh-1-ss", "metadata": {}}}'
...
可以看到调用的API为/usr/lib/python2.7/dist-packages/nova/api/openstack/compute/servers.py中的
def _action_create_image(self, req, id, body)

nova调用栈大致如下(|-->):
# compute/servers.py
          def _action_create_image(self, req, id, body)
        #如果是volume则调用volum
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值