一、代码执行前准备

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参数不能太小,否则在创建快照的时候会产生错误。

基于go-ceph创建CEPH块设备及快照的更多相关文章

  1. 初试 Ceph 存储之块设备、文件系统、对象存储

    转载自:https://cloud.tencent.com/developer/article/1010543 1.Ceph 存储介绍 Ceph 是一个开源的分布式存储系统,包括对象存储.块设备.文件 ...

  2. linux 创建虚拟块设备,制作文件系统并挂载,用于测试lustre

    1.制作块文件 3 个 [root@localhost yaoxu]# [root@localhost yaoxu]# [root@localhost yaoxu]# 2.创建回环设备 [root@l ...

  3. 006 管理Ceph的RBD块设备

    一, Ceph RBD的特性 支持完整和增量的快照 自动精简配置 写时复制克隆 动态调整大小 二.RBD基本应用 2.1 创建RBD池 [root@ceph2 ceph]# ceph osd pool ...

  4. Ceph 块设备 - 命令,快照,镜像

    目录 一.Ceph 块设备 二.块设备 rbd 命令 三.操作内核模块 四.快照基础 rbd snap 五.分层快照 六.镜像 rbd mirror 七.QEMU 八.libvirt 九.Openst ...

  5. 7. Ceph 高级篇 - RBD块设备回收站、快照、克隆

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485298&idx=1&sn=b83fda07 ...

  6. Ceph 块设备 - 块设备快速入门

    目录 一.准备工作 二.安装 Ceph 三.使用块存储   一.准备工作 本文描述如何安装 ceph 客户端,使用 Ceph 块设备 创建文件系统并挂载使用. 必须先完成 ceph 存储集群的搭建,并 ...

  7. 一篇文章让你理解Ceph的三种存储接口(块设备、文件系统、对象存储)

    “Ceph是一个开源的.统一的.分布式的存储系统”,这是我们宣传Ceph时常说的一句话,其中“统一”是说Ceph可以一套存储系统同时提供块设备存储.文件系统存储和对象存储三种存储功能.一听这句话,具有 ...

  8. Linux 块设备驱动 (二)

    linux下Ramdisk驱动 1 什么是Ramdisk Ramdisk是一种模拟磁盘,其数据实际上是存储在RAM中,它使用一部分内存空间来模拟出一个磁盘设备,并以块设备的方式来组织和访问这片内存.对 ...

  9. Linux中块设备驱动程序分析

    基于<Linux设备驱动程序>书中的sbull程序以对Linux块设备驱动总结分析. 開始之前先来了解这个块设备中的核心数据结构: struct sbull_dev {         i ...

随机推荐

  1. 重新想象 Windows 8 Store Apps (36) - 通知: Tile 详解

    [源码下载] 重新想象 Windows 8 Store Apps (36) - 通知: Tile 详解 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 通知 Tile ...

  2. spring aop advice

    1.前置通知(BeforeAdvice): import java.lang.reflect.Method; import org.springframework.aop.MethodBeforeAd ...

  3. nginx服务器是怎么执行php脚本的?

    简单的说: fastCGI是nginx和php之间的一个通信接口,该接口实际处理过程通过启动php-fpm进程来解 析php脚本,即php-fpm相 当于一个动态应用服务器,从而实现nginx动态解析 ...

  4. bootstrap glyphicon图标无法显示

    如果不注意bootstrap引入css和fonts的规范,则可能会导致bootstrap 在显示glyphicon图标时无法正常显示,显示为方框. 此时可搜索bootstrap.css中的.glyph ...

  5. 微信jssdk,实现多图上传的一点心得

    一.首先在common.js里封装一个函数,在需要调用jsSDK的页面引用此方法即可实现微信的信息配置function signatureJSSDK() { var url = window.loca ...

  6. Google Developers中国网站

    正于北京举办的谷歌开发者大会上,谷歌宣布,Google Developers中国网站 (developers.google.cn) 正式发布! 谷歌表示,Google Developers中国网站是特 ...

  7. CKEditor与CKFinder的配置

    CKEditor与CKFinder的配置使用(一) 将CKEditor 与 CKFinder 的包含在项目中 从http://cksource.com网站上下载CKEditor与CKFinder,并将 ...

  8. Office版本差别引发的语法问题

    由于没有源代码,今天反编译了一个基于.NET的dll类库,再次遇到office版本差异问题,所以把它记录下来. 在反编译时,需要Aspose.Cells 5.3.1(Aspose是一套.NET类库,其 ...

  9. iOS触摸事件

    触摸常见的事件有以下几种,触摸事件一般写在view文件中,因为viewController文件有可能控制不止一个view,不适合写触摸事件 // 开始触摸 - (void)touchesBegan:( ...

  10. 【原/转】UITableview性能优化总结

    UITableView作为ios中使用最频繁的控件之一,其性能优化也是常常要面对的,尤其是当数据量偏大并且设备性能不足时.本文旨在总结tableview的几个性能优化tips,并且随着认识的深入,本文 ...