V-7 Openstack 在ceph中转换镜像格式
上下文:
在工作中客戶要求做一個openstack的鏡像,這個操作系統的配置要求非常的高,最小需要8核96GB內存1TB硬盤。普通的系統可以通過分區擴展腳本做一個20GB的鏡像然后在云平臺上擴展,但是由于這個系統是封閉的,沒法把腳本放進去,所以鏡像只能一口氣做成1TB大小。
該鏡像如果制作成qcow只有5GB的大小。如果做成raw格式的鏡像則有1TB大。
原來的設想是將鏡像做成qcow2格式然后上傳到glance中,沒想到qcow2的鏡像在創建虛擬機的時候會臨時在計算節點上轉換成raw格式,這樣導致計算節點因為一下子多出了一個1TB文件,占滿了磁盤把信息隊列堵死了。
無奈在計算節點上將qcow轉換成raw的話,也無法放下一個1TB的文件。故此最后決定將鏡像上傳到存儲中去,然后在存儲中將qcow轉換成raw格式,然后再傳到glance中去。
由于這個情況非常復雜,情況特殊,所以我把操作的記錄寫下來。
?
參數:
在本文中會牽涉到一些參數,這個參數在實際的環境中會有變化故此在這里解釋一下。
<pool.name> ceph的池名,可以通過命令:ceph osd lspools查看到。
不知道為什么本環境中所有關于ceph的命令都需要加上--id cinder參數才能顯示。
<rbd.id> rbd的id,id是內容是隨機生成的,可以通過命令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
轉載于:https://blog.51cto.com/181647568/2174507
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的V-7 Openstack 在ceph中转换镜像格式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文件共享同步5种方式:NFS、NAS、r
- 下一篇: 09 numpy 聚合函数 - 极值,方