1. 程式人生 > >詳解修復nova的後端映象檔案掛ceph,生成虛擬機器檔案變大1024倍(bug)

詳解修復nova的後端映象檔案掛ceph,生成虛擬機器檔案變大1024倍(bug)

感謝朋友支援本部落格,歡迎共同探討交流,由於能力和時間有限,錯誤之處在所難免,歡迎指正!

如有轉載,請保留源作者部落格資訊。

如需交流,歡迎大家部落格留言。


前端介面生成虛擬機器: 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 遮蔽掉: 再次實驗: 問題解決。