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

时间: 2024-10-07 01:46:15

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

Ceph集群块设备使用-创建和使用OSD

创建Ceph块设备 [[email protected] ~]# rbd create block-device4 --size 5G --image-format 1 rbd: image format 1 is deprecated 查看块设备信息 [[email protected] ~]# rbd --image block-device4 info rbd image 'block-device4': size 5120 MB in 1280 objects order 22 (409

006 管理Ceph的RBD块设备

一, Ceph RBD的特性 支持完整和增量的快照 自动精简配置 写时复制克隆 动态调整大小 二.RBD基本应用 2.1 创建RBD池 [root@ceph2 ceph]# ceph osd pool create rbd 64 pool 'rbd' created [root@ceph2 ceph]# ceph osd pool application enable rbd rbd enabled application 'rbd' on pool 'rbd' 2.2 客户端验证 [root@

Ceph 块设备

块是一个字节序列(例如,一个 512 字节的数据块).基于块的存储接口是最常见的存储数据方法,它们基于旋转介质,像硬盘. CD .软盘.甚至传统的 9 磁道磁带.无处不在的块设备接口使虚拟块设备成为与 Ceph 这样的海量存储系统交互的理想之选. Ceph 块设备是精简配置的.大小可调且将数据条带化存储到集群内的多个 OSD . Ceph 块设备利用 RADOS 的多种能力,如快照.复制和一致性. Ceph 的 RADOS 块设备( RBD )使用内核模块或 librbd 库与 OSD 交互.

Ceph块设备介绍与安装配置

一:rbd介绍 块是字节序列(例如,一个512字节的数据块).基于块的存储接口是使用旋转介质(例如硬盘,CD,软盘甚至传统的9-track tape)存储数据的最常用方法.块设备接口的无处不在,使虚拟块设备成为与海量数据存储系统(如Ceph)进行交互的理想候选者. Ceph块设备经过精简配置,可调整大小,并在Ceph集群中的多个OSD上存储条带化数据,ceph块设备利用了RADOS功能,例如快照,复制和一致性. Ceph的RADOS块设备(RBD)使用内核模块或librbd库与OSD进行交互.'

Centos7.4部署ceph块设备

在部署块设备前必须保证Ceph存储集群处于active+clean状态. 一. 环境准备 IP 主机名 角色 10.10.10.20 admin-node ceph-deploy 10.10.10.24 ceph-client client 二.  安装CEPH 在管理节点上,通过 ceph-deploy 把 Ceph 安装到 ceph-client 节点. [[email protected] ceph]# ceph-deploy install ceph-client 在管理节点上,用 ce

Ceph实践总结之:Centos 下RBD块设备客户端的配置

在进行本章的操作之前,要先完成基本集群的搭建,请参考http://blog.csdn.net/eric_sunah/article/details/40862215 Ceph的块设备又称为 RBD 或是RADOS. 块设备 实验的过程中,可以用虚拟机来作为ceph-client的节点,但是为了保证集群的稳定,不要在集群的节点上做下面的操作 安装Ceph 通过 OS Recommendations 判断你的客户端的OS是否满足基本的要求. 在管理节点使用 ceph-deploy 在ceph-cli

Linux中块设备驱动程序分析

基于<Linux设备驱动程序>书中的sbull程序以对Linux块设备驱动总结分析. 开始之前先来了解这个块设备中的核心数据结构: struct sbull_dev { int size;                       /* Device size in sectors */ u8 *data;                       /* The data array */ short users;                    /* How many users

块设备驱动程序设计

一.块设备简介 1.块设备 块设备将数据存储在固定大小的块中,每个块的大小通常在512字节到32768字节之间.磁盘.SD卡都是常见的块设备. 2.块设备VS字符设备 # 块设备和字符设备最大的区别在于读写数据的基本单元不同.块设备读写数据的基本单元为块,例如磁盘通常为一个sector,而字符设备的基本单元为字节. # 块设备能够随机访问,而字符设备则只能顺序访问. 块设备体系架构: VFS是对各种具体文件系统的一种封装,为用户程序访问文件提供统一的接口. Disk Cache 当用户发起文件访

linux一切皆文件之块设备文件(四)

一.知识准备 1.在linux中,一切皆为文件,所有不同种类的类型都被抽象成文件(比如:块设备,socket套接字,pipe队列) 2.操作这些不同的类型就像操作文件一样,比如增删改查等 3.块设备是将信息存储在大小固定的块中,每一个块都有自己的地址,块设备支持随机访问.典型的块设备比如我们使用的硬盘 二.环境准备 组件 版本 OS Ubuntu 16.04.4 LTS 三.主设备号(major)与次设备号(minor) ● 当一块磁盘被注册到操作系统的时候,会被分配主设备号与次设备号 ● 其中