nova的镜像缓存

实例的实际创建过程是通过调用libvirt函数来完成,在virt/Libvirt/driver.py中spawn方法来完成真正的虚拟机创建过程。

复制代码

 1     def spawn(self, context, instance, image_meta, injected_files,
 2               admin_password, network_info=None, block_device_info=None):
 3         disk_info = blockinfo.get_disk_info(CONF.libvirt_type,
 4                                             instance,
 5                                             block_device_info,
 6                                             image_meta)
 7         xml = self.to_xml(instance, network_info,
 8                           disk_info, image_meta,
 9                           block_device_info=block_device_info)
10 
11         self._create_image(context, instance, xml,
12                            disk_info['mapping'],
13                            network_info=network_info,
14                            block_device_info=block_device_info,
15                            files=injected_files,
16                            admin_pass=admin_password)
17 
18         self._create_domain_and_network(xml, instance, network_info,
19                                         block_device_info)
20         LOG.debug(_("Instance is running"), instance=instance)
21 
22         def _wait_for_boot():
23             """Called at an interval until the VM is running."""
24             state = self.get_info(instance)['state']
25 
26             if state == power_state.RUNNING:
27                 LOG.info(_("Instance spawned successfully."),
28                          instance=instance)
29                 raise utils.LoopingCallDone()
30 
31         timer = utils.FixedIntervalLoopingCall(_wait_for_boot)
32         timer.start(interval=0.5).wait()

复制代码其中有几个非常重要的目录,系统的CONF.instances_path,也就是和实例相关的目录,实例所用到的文件都在此目录下,常见的目录是/var/lib/nova/instances,

其中_base目录下存放着备份或者说缓存的镜像文件

snapshots放的是快照文件instance-xxxxx里边放的就是对应实例的相关文件console.log代表实例输出的日志,libvirt.xml就是libvirt用来生成实例的文件,disk就是对应实例的文件。关于_base目录要说的一点是。manager中有一个定时方法_run_image_cache_manager_pass定期清除同glance不相关的和超过配置文件中定义的时间的缓存。

 

 对于镜像的处理策略是,镜像从glance服务器上下载到_base目录,镜像的名字变为他的image_id的sha1 hash形式,如果镜像支持CoW,那么就会将镜像变为实例配置的大小,如果不支持CoW,就直接将镜像拷贝到实例对应的目录中,我想这就可以解释为什么会出现配置的硬盘大小同实际实例中的大小不一致的一个原因,另一个原因就是配置的镜像小于glance中的实际镜像,程序会直接忽略配置信息。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值