一、准備工作
需要准備一個Ubuntu16.04的ISO文件上傳至服務器,如下圖所示
二、操作步驟
2.1:創建操作目錄
創建一個/var/tmp/cloud_image目錄,把Ubuntu16.04 OS的iso鏡像上傳到該目錄,接下來的操作也會在這個目錄下面執行
2.2:創建一個OS磁盤鏡像
利用命令:qemu-img create -f qcow2 ubuntu1604.img 10G
創建一個空的磁盤鏡像。如下圖所示
需要注意的是:
-f 指定鏡像的格式為qcow2 是一種可壓縮的格式比較省空間
2.3:創建磁盤鏡像的注冊配置文件
該文件的作用是為了更方便的把磁盤鏡像注冊到OpenNebula的one服務中,需要創建兩種類型的磁盤鏡像注冊文件,OS和CDROM類型,我們首先創建一個OS類型
的鏡像注冊配置文件,touch一個ubuntu1604-os-img.one,vi內容如下
NAME = "Ubuntu1604-OS" PATH = "/var/tmp/cloud_image/ubuntu1604.img" TYPE = "OS" DESCRIPTION = "Ubuntu Server for company"
其次,創建一個CDROM類型的鏡像注冊配置文件,touch一個ubuntu1604-cdrom-img.one,vi內容如下
NAME = "Ubuntu1604-CDROM" PATH = "/var/tmp/cloud_image/ubuntu-16.04.2-server-amd64.iso" TYPE = "CDROM" DESCRIPTION = "Ubuntu Server for company"
截止到這里,所有的准備工作基本OK,我們來看一下工作目錄的結果
2.4:注冊磁盤鏡像到OpenNebula
首先說一下注冊方式有兩種:
- 通過OpenNebula的SunStone服務界面進行注冊
- 通過命令行進行注冊
1)通過OpenNebula進行磁盤鏡像的注冊
進入OpenNebula的管理界面點擊存儲-鏡像-添加鏡像如下圖所示,可以從OpenNebula Server的方式寫入鏡像的URL或者上傳本地鏡像進行注冊
2)通過命令行進行磁盤鏡像的注冊
執行命令 : oneimage create ubuntu1604-cdrom-img.one -d 1
語法 : oneimage create 鏡像注冊配置文件 -d 倉庫ID
執行結果如下圖所示:通過oneimage list命令可以查看我們剛剛注冊的鏡像,狀態為rdy,創建成功
備注:可以執行 onedatastore list 查看倉庫的ID,如下圖所示
3)通過OpenNebula服務查看注冊的鏡像
OS類型的磁盤鏡像加入以下屬性,因為我們創建的時候格式是qcow2,否則安裝系統的時候讀取不到10G的磁盤空間
三、重點分析
在執行oneimage create命令的時候遇到過Not allowed to copy image 的錯誤,錯誤信息如下

root@KingServer3:/var/tmp/cloud_image# onedatastore show 1 DATASTORE 1 INFORMATION ID : 1 NAME : default USER : oneadmin GROUP : oneadmin CLUSTERS : 0 TYPE : IMAGE DS_MAD : fs TM_MAD : ssh BASE PATH : /var/lib/one//datastores/1 DISK_TYPE : FILE STATE : READY DATASTORE CAPACITY TOTAL: : 30.9G FREE: : 25.2G USED: : 4.1G LIMIT: : - PERMISSIONS OWNER : um- GROUP : u-- OTHER : --- DATASTORE TEMPLATE CLONE_TARGET="SYSTEM" DISK_TYPE="FILE" DS_MAD="fs" LN_TARGET="SYSTEM" RESTRICTED_DIRS="/" SAFE_DIRS="/var/tmp" TM_MAD="ssh" TYPE="IMAGE_DS" IMAGES 0 1 root@KingServer3:/var/tmp/cloud_image#
通過上面的操作,我們可以看到SAFE_DIRS="/var/tmp"這一行,所以我的工作空間是建在這個目錄下面的,默認就是安全目錄,所以不會出現那個問題
3)更改指定倉庫的安全目錄onedatastore update 1
這個操作就如同vi一個文件一樣,如下圖,我們修改里面的SAFE_DIRS的值為我們自定義的目錄即可