zoukankan      html  css  js  c++  java
  • 基于go-ceph创建CEPH块设备及快照

    一、代码执行前准备

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

  • 相关阅读:
    新闻发布系统之 登陆注销
    readonly和const的区别
    c#中文件流的读写
    解决jsp两种提交方式乱码 的方法
    B/S 和 C/S两种架构
    App.config的典型应用
    接口实现多态
    Spring概念
    在Spring的核心配置文件applicationContext.xml中配置事务,主要配置三大方面:事务管理器、事务通知和定义事务性切面。
    乱码问题解决方案
  • 原文地址:https://www.cnblogs.com/YaoDD/p/5278395.html
Copyright © 2011-2022 走看看