您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關如何修復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
屏蔽掉:
再次實驗:
問題解決。
感謝各位的閱讀!關于“如何修復nova的后端鏡像文件掛ceph、生成虛擬機文件變大1024倍bug”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。