一、代码执行前准备

1、系统中安装了CEPH集群

2、GOPATH目录下存在src/github.com/noahdesu/go-ceph代码库

3、在ubuntu 14.04下还需apt-get librados-dev和librbd-dev两个包

二、代码示例

package main 

import (
"fmt"
"github.com/noahdesu/go-ceph/rados"
"github.com/noahdesu/go-ceph/rbd"
) const (
DefaultRadosConfigFile = "/etc/ceph/ceph.conf"
DefaultBaseImageSize = 10 * 1024 * 1024 * 1024
DefaultPoolName = "rbd"
) func main() {
// connect to the cluster
conn,_ := rados.NewConn()
if err := conn.ReadConfigFile(DefaultRadosConfigFile); err != nil {
fmt.Printf("Rbd read config failed: %v",err)
return
}
if err := conn.Connect(); err != nil {
fmt.Printf("Rbd connect failed: %v",err)
return
} // connect to the pool
ioctx,err := conn.OpenIOContext(DefaultPoolName)
if err != nil {
fmt.Printf("Rbd open pool failed: %v",err)
return
} // create base image
baseImageName := "test"
_,err = rbd.Create(ioctx,baseImageName,DefaultBaseImageSize,rbd.RbdFeatureLayering)
if err != nil {
fmt.Printf("Rbd create image failed: %v",err)
return
} img := rbd.GetImage(ioctx,baseImageName) // we should open base image first
if err := img.Open(); err != nil {
fmt.Printf("Rbd open image failed: %v",err)
return
} defer img.Close() // create snapshot
snapName := "test-snap"
snapshot,err := img.CreateSnapshot(snapName)
if err != nil {
fmt.Printf("Rbd create snapshot failed: %v",err)
return
} // protect snapshot
if err := snapshot.Protect(); err != nil {
fmt.Printf("Rbd create snapshot failed: %v",err)
return
} // make a clone image based on the snap shot
cloneImageName := "clone-test"
_,err = img.Clone(snapName,ioctx,cloneImageName,rbd.RbdFeatureLayering)
if err != nil {
fmt.Printf("Rbd clone snapshot failed: %v",err)
return
} return
}

  

三、最终会生成一个名为"test"的基础image,以及一个基于"test"的名为"test-snap"的snapshot,最后还有一个基于快照"test-snap"的clone。

  注:在创建"test"时,size参数不能太小,否则在创建快照的时候会产生错误。

最新文章

  1. JQuery 实现两列等高并自适应高度
  2. python操作mysql总结
  3. Native VS React Native VS 微信小程序
  4. [10]APUE:信号
  5. UIDatePicker 日期/时间选取器(滚轮)—IOS开发
  6. Python中super函数的用法
  7. 使用js使某个按钮在5秒内不能重复点击
  8. Android init.rc文件格式解析
  9. C#程序员整理的Unity 3D笔记(十):Unity3D的位移、旋转的3D数学模型
  10. Logging in Java
  11. UESTC_秋实大哥与连锁快餐店 2015 UESTC Training for Graph Theory<Problem A>
  12. 在ubuntu16.04中一键创建LAMP环境
  13. 运放的PID电路
  14. Android简易实战教程--第二十五话《网络图片查看器》
  15. Python——逻辑运算(or,and)
  16. Hadoop记录-JMX参数
  17. C#数组--(Array类的属性和方法)
  18. 使用引用计数和copy-on_write实现String类
  19. #6284. 数列分块入门 8(区间询问等于一个数 cc 的元素,并将这个区间的所有元素改为 c)
  20. solr实现动态加载分词

热门文章

  1. x3dom 1.6 发布
  2. jquery 拓展
  3. 【洛谷 P3385】模板-负环(图论--spfa)
  4. 常见的几种RuntimeException
  5. java入门基础知识点总结
  6. redis 慢日志 slowlog
  7. APP落地页开发中的一些小经验~
  8. .NET的内存限制
  9. Sharepoint学习笔记—习题系列--70-573习题解析 -(Q60-Q62)
  10. dict和set