详解修复nova的后端镜像文件挂ceph,生成虚拟机文件变大1024倍(bug)

感谢朋友支持本博客,欢迎共同探讨交流,由于能力和时间有限,错误之处在所难免,欢迎指正!

如有转载,请保留源作者博客信息。

Better Me的博客blog.csdn.net/tantexian

如需交流,欢迎大家博客留言。



前端界面生成虚拟机:

1、直接从nova/virt/libvirt/imagebackend.py的RBD类的create_image函数开始讲解
附上源码:
     def create_image(self, prepare_template, base, size, *args, **kwargs):
        import pydevd
        pydevd.settrace('192.168.10.10', port=51234, stdoutToServer=True, stderrToServer=True)
        if self.rbd is None:
            raise RuntimeError(_('rbd python libraries not found'))
        if not os.path.exists(base): #检查路径是否存在
            prepare_template(target=base, max_size=size, *args, **kwargs)
        else:
            self.verify_base_size(base, size) #验证size是否满足要求,同之前博客本地file创建分析一致
        # keep using the command line import instead of librbd since it
        # detects zeroes to preserve sparseness in the image
        args = ['--pool', self.pool, base, self.rbd_name] #构造虚拟机文件生成参数
        if self._supports_layering():
            args += ['--new-format']
        args += self._ceph_args()
        libvirt_utils.import_rbd_image(*args) #根据到1.1
        base_size = disk.get_disk_size(base) #求出base镜像模板文件大小
        if size and size > base_size: #见图1-1:
            self._resize(self.rbd_name, size) #跟进到1.2

1.1:

('rbd' 'import' '--pool', 'nova', '/var/lib/nova/instances/_base/8b925177989924ee3e316b28b3abc03a829fbb29', 'fec8e16e-0055-4117-aa5c-afbd845773f2_disk', '--new-format', '--id', 'admin', '--conf', '/etc/ceph/ceph.conf')
在执行此命令前:

执行命令之后:

rbd info:

图1-1:
其中size为页面传递过来的falvor参数1G。即(1024*1024*1024),base_size为镜像文件cirros_ceph大小。

1.2:
     def _resize(self, volume_name, size):
        size = int(size) * units.Ki  #见图1.2-1
        with RBDVolumeProxy(self, volume_name) as vol:
            vol.resize(size) #根据见1.3

图1.2-1:


1.3:
此处纳闷之后找不到resize函数(后续有时间在研究,先以解决问题为主。)
执行完此命令:
发现size为1024GB,比预期打了1024倍。

修复bug:
将图1.2-1中的
size = int(size) * units.Ki
屏蔽掉:


再次实验:

问题解决。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值