OpenStack 创建快照(Create Snapshot)过程源码分析

本文深入分析了OpenStack中创建快照的过程,详细探讨了源代码流程,帮助读者理解其内部工作机制。
摘要由CSDN通过智能技术生成
1. 背景:
    一直以为OpenStack的创建快照的操作是在线创建快照(live snapshot), 并且应该是增量的快照,即利用virsh或者qemu的live snapshot来实现的:
         virsh  snapshot-create-as --live ....
    后来发现快照和原始镜像之间并没有依赖关系,感觉OpenStack还做的挺好的,自动解决了增量快照和原始镜像之间的依赖关系;
    但是后来又发现做快照的时候虚拟机竟然会shutoff, 就感觉不对了,于是分析了下源码。

2. 结论:目前OpenStack默认的快照方式都是cold snapshot, 首先先关机,其次执行如下命令生成一个镜像文件,再次开机,最后再调用glance api将镜像上传。
       qemu-img convert -f qcow2 -O qcow2 <disk_path>  <out_path>
       所以目前并不是真正意义的快照,其实和关闭虚拟机,拷贝一份,再上传没有本质区别。

3. 源代码流程分析

3.1 nova/compute/api.py

    # NOTE(melwitt): We don't check instance lock for snapshot because lock is
        # intended to prevent accidental change/delete of instances
        @wrap_check_policy
        @check_instance_cell
        @check_instance_state(vm_state=[vm_states.ACTIVE, vm_states.STOPPED,
                                        vm_states.PAUSED, vm_states.SUSPENDED])
        def snapshot(self, context, instance, name, extra_properties=None):
            """Snapshot the given instance.
            :param instance: nova.db.sqlalchemy.models.Instance
            :param name: name of the snapshot
            :param extra_properties: dict of extra image properties to include
                                     when creating the image.
            :returns: A dict containing image metadata
            """
           #调用glance api创建image entry,为后将snapshot上传为镜像做准备,虽然镜像和snapshot在可以上传到glance作为镜像启动虚拟机,
           #但是为了区分二者的不同,glance将镜像和snapshot标记卫不同的类型:type=image 和 type=snapshot
            image_meta = self._create_image(context, instance, name,
                                            'snapshot',
                                            extra_properties=extra_properties)
            # NOTE(comstud): Any changes to this method should also be made
            # to the snapshot_instance() method in nova/cells/messaging.py
            # 将任务状态(task state) 设置为:image_snapshot_pending
            instance.task_state = task_states.IMAGE_SNAPSHOT_PENDING
            instance.save(expected_ta
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值