如何修复nova的后端镜像文件挂ceph、生成虚拟机文件变大1024倍bug

发布时间:2021-12-17 10:27:26 作者:小新
来源:亿速云 阅读:198

这篇文章给大家分享的是有关如何修复nova的后端镜像文件挂ceph、生成虚拟机文件变大1024倍bug的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。



前端界面生成虚拟机:

如何修复nova的后端镜像文件挂ceph、生成虚拟机文件变大1024倍bug


1、直接从nova/virt/libvirt/imagebackend.py的RBD类的create_image函数开始讲解

如何修复nova的后端镜像文件挂ceph、生成虚拟机文件变大1024倍bug

附上源码:

          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:

如何修复nova的后端镜像文件挂ceph、生成虚拟机文件变大1024倍bug


('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')    

在执行此命令前:

如何修复nova的后端镜像文件挂ceph、生成虚拟机文件变大1024倍bug


执行命令之后:

如何修复nova的后端镜像文件挂ceph、生成虚拟机文件变大1024倍bug


rbd info:

如何修复nova的后端镜像文件挂ceph、生成虚拟机文件变大1024倍bug


图1-1:

如何修复nova的后端镜像文件挂ceph、生成虚拟机文件变大1024倍bug

如何修复nova的后端镜像文件挂ceph、生成虚拟机文件变大1024倍bug

其中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:

如何修复nova的后端镜像文件挂ceph、生成虚拟机文件变大1024倍bug

如何修复nova的后端镜像文件挂ceph、生成虚拟机文件变大1024倍bug



1.3:

如何修复nova的后端镜像文件挂ceph、生成虚拟机文件变大1024倍bug

此处纳闷之后找不到resize函数(后续有时间在研究,先以解决问题为主。)

执行完此命令:

如何修复nova的后端镜像文件挂ceph、生成虚拟机文件变大1024倍bug

发现size为1024GB,比预期打了1024倍。


修复bug:

将图1.2-1中的

size = int(size) * units.Ki

屏蔽掉:

如何修复nova的后端镜像文件挂ceph、生成虚拟机文件变大1024倍bug



再次实验:

如何修复nova的后端镜像文件挂ceph、生成虚拟机文件变大1024倍bug

如何修复nova的后端镜像文件挂ceph、生成虚拟机文件变大1024倍bug


问题解决。

感谢各位的阅读!关于“如何修复nova的后端镜像文件挂ceph、生成虚拟机文件变大1024倍bug”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

推荐阅读:
  1. nova - nova base image id的生成算法
  2. 虚拟机使用镜像文件安装系统

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

nova ceph bug

上一篇:怎样解析Spark2.2.0 MLlib

下一篇:python匿名函数怎么创建

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》