V-7 Openstack 在ceph中轉換鏡像格式

上下文:api

在工做中客戶要求作一個openstack的鏡像,這個操做系統的配置要求很是的高,最小須要896GB內存1TB硬盤。普通的系統能夠經過分區擴展腳本作一個20GB的鏡像而後在雲平臺上擴展,可是因爲這個系統是封閉的,無法把腳本放進去,因此鏡像只能一口氣作成1TB大小。ide

該鏡像若是製做成qcow只有5GB的大小。若是作成raw格式的鏡像則有1TB大。ui

原來的設想是將鏡像作成qcow2格式而後上傳到glance中,沒想到qcow2的鏡像在建立虛擬機的時候會臨時在計算節點上轉換成raw格式,這樣致使計算節點由於一會兒多出了一個1TB文件,佔滿了磁盤把信息隊列堵死了。spa

無奈在計算節點上將qcow轉換成raw的話,也沒法放下一個1TB的文件。故此最後決定將鏡像上傳到存儲中去,而後在存儲中將qcow轉換成raw格式,而後再傳到glance中去。操作系統

因爲這個狀況很是複雜,狀況特殊,因此我把操做的記錄寫下來。orm

 

參數:隊列

在本文中會牽涉到一些參數,這個參數在實際的環境中會有變化故此在這裏解釋一下。ip

<pool.name> ceph的池名,能夠經過命令:ceph osd lspools查看到。內存

不知道爲何本環境中全部關於ceph的命令都須要加上--id cinder參數才能顯示。ci

<rbd.id> rbdidid是內容是隨機生成的,能夠經過命令uuidgen來生成,而後鏡像就使用這個id來表示本身。在ceph中的鏡像都是用uuid來命名。

 

uuidgen

首先我先運行了uuidgen命令來生成id來用於接下來的一條命令中使用。

 

rbd import --path <*.raw> --dest-pool <pool.name> --dest <rbd.id> --id cinder

import命令將本地的鏡像文件<*.raw>上傳到了<pool.name>中,而<rbd.id>就是前面的uuidgen生成的字符串。

 

rbd -p <pool.name> info <rbd.id> --id cinder

這條命令是查看池中有沒有這個id的鏡像,確認上傳成功。在完成上傳後,咱們就要準備將這個raw轉換成qcow。因此要爲qcow文件準備一個名字,依舊是一個uuid

 

uuidgen

這一次生成的uuid是給qcow文件準備的。

 

qemu-img convert -O raw rbd:<pool.name>/<old.rbd.id>:id=cinder rbd:<pool.name>/<new.rbd.id>:id-cinder

這個是一個qemu-img轉換鏡像格式的命令,不事後面的路徑是rbd的。

 

rbd -p <pool.name> info <new.rbd.id> --id cinder

檢查池中有沒有新生成的鏡像文件。

 

qemu-img info rbd:<pool.name>/<new.rbd.id>:id=cinder

能夠經過qemu-img查看這個文件,看到這個文件是否爲raw文件。

 

rbd --pool <pool.name> snap create --snap snap <rbd.id> --id cinder

rbd --pool <pool.name> snap protect --image <rbd.id> --snap snap --id cinder

rbd -p <pool.name> snap ls <rbd.id> --id cinder

 

最後是上傳鏡像(這個命令有點怪,貌似是上一個版本的openstack命令,我用的是m版本)

glance --os-image-api-version 1 image-create --id <rbd.id> --name <image.name> --store rbd --disk-format raw --container-format bare --location rbd://$(ceph fsid --id cinder)/<pool.name>/<rbd.ip>/snap

相關文章
相關標籤/搜索