Ceph集群管理之块存储(RBD)

命令描述

rbd是对RBD镜像进行管理的工具。其通常被Linux rbd驱动或则Qemu/KVM存储驱动使用。RBD镜像是一个简单的块设备,其分布在多个对象上。并且数据存储在RADOS对象中。

命令摘要

       rbd [ -c ceph.conf ] [ -m monaddr ] [ -p | –pool pool ] [

       –size size ] [ –order bits ] [ command … ]

命令详述

ls

显示存储池中的RBD镜像列表。使用参数-l可以获取更详细的信息。

     ls [-l | –long] [pool-name]

info

显示某个特定镜像的信息,如果镜像是一个克隆,则会显示其父节点的相关信息。

      info [image-name]

create

创建一个新的rbd镜像。必须通过-size参数定义该镜像的大小。–stripe-unit 和 –stripe-count参数是可选的,但必须同时使用。

create [image-name]

clone

创建一个父快照的克隆(写时拷贝)。如果没有特殊定义,对象的顺序将与父镜像保证一致,大小也与父镜像保持一致。–stripe-unit 和 –stripe-count参数是可选的,但必须同时使用。父镜像必须是被保护的。需要镜像格式2(?)。

clone [parent-snapname] [image-name]

             

 flatten

如果镜像是一个克隆,该命令将从父快照拷贝共享的数据块到依赖其的子快照中,并将切断父快照与子快照的关系。如果没有依赖的克隆,父快照可以被删除掉。

  flatten [image-name]

 

children

罗列镜像的给定快照的克隆。该命令将检查每个存储池,并且输出存储池名/镜像名列表。

       children [image-name]

resize

更改一个镜像的大小。需要定义大小参数,可以通过–allow-shrink参数减少空间。

   resize [image-name] [–allow-shrink]

rm

删除一个镜像。如果镜像存在快照,该命令将执行失败,并且不会有内容被删除。

       rm [image-name]           

export

导出一个镜像到指定目录。

       export [image-name] [dest-path]

import

创建一个新的镜像,并且从一个指定路径将数据导入。如果可能的话,导入操作会试图创建一个rbd稀疏镜像。对于从标准输入导入的情况,稀疏单元是目的镜像的数据块的大小(1<<order)。

       import [path] [dest-image]

export-diff

将一个镜像的增量差异导出到指定路径。如果定义了起始快照,仅仅导出自此的差异数据。否则包含数据的所有区域都会被导出。该命令可以指定差异的结尾快照,结尾快照可以通过–snap参数定义,或者通过@snap语法定义(具体参考下文介绍)。镜像差异的格式包含镜像大小改变的元数据,快照的起止。其有效的表示镜像的差异或者空白区域。

export-diff [image-name] [dest-path] [–from-snap snapname]

merge-diff

合并两个连续的增量差异文件为一个。第一个差异文件的结尾快照必须是第二个差异文件的首快照(起始快照)。第一个差异文件可以是标准输入(stdin),并且第二个差异文件可以是标准输出(stdout)。这样,这样就可以使用如下可以进行多个差异文件的合并。

rbd merge-diff first second – | rbd merge-diff – third result

另外,目前该命令只支持源增量差异条带为1的情况(stripe_count == 1)。命令格式如下:

merge-diff [first-diff-path] [second-diff-path] [merged-diff-path]

import-diff

将一个增量差异导入到一个镜像中。如果差异文件与起始快照关联,将在继续之前检查该快照是否已经存在。如果差异文件中有结尾快照,在进行数据恢复前会进行检查该快照是否存在,没有则会被创建。

 import-diff [src-path] [image-name]

diff

将某个镜像从某个快照开始或者镜像创建时开始的数据,以字节的形式dump出来。每个输出行包含起始偏移(以字节为单位)、区域长度及‘zero’或者‘data’的标示,该标识符用于指示相关区域是零(空)还是有某些数据。

    diff [image-name] [–from-snap snapname]

cp

复制源镜像中的内容到一个新建的目的镜像(复制时被自动创建)。目的镜像将与源镜像有相同的格式。

 cp [src-image] [dest-image]

mv

更改一个镜像的名称。

 mv [src-image] [dest-image]

snap ls

显示某个镜像下的快照列表。

       snap ls [image-name]

snap create

创建一个镜像的快照,需要指定快照的名称。

 snap create [image-name]

示例:

rbd -p zsn snap create img_test –snap snap_test

snap rollback

将镜像的内容回滚到某个快照。该命令将遍历整个块序列,更新镜像的数据到指定的快照版本。

snap rollback [image-name]

snap rm

删除某个快照。

 snap rm [image-name] 

snap purge

删除某个镜像下面的所有快照。      

 snap purge [image-name]

    

snap protect

保护一个快照,防止其被删除。快照被保护之后,就可以在其上做克隆操作(请参考rbd克隆相关内容)。在做克隆的时候,快照必须被保护起来。保护意味着存在克隆数据与该快照的依赖关系。如果在一个没有被保护的快照上做克隆,将会失败。

  snap protect [image-name]

           

snap unprotect

取消快照保护,如果克隆没有完成,则会失败。

       snap unprotect [image-name]

map

由内核的rbd模块,将镜像映射为一个块设备。

   map [image-name] [-o | –options map-options ] [–read-only]

 

unmap

取消块设备的映射。

       unmap [device-path]             

showmapped

显示已经映射的镜像。

status

显示使用该镜像的客户端。

       status [image-name]

示例:

rbd status img_test -p zsn

lock list

显示某个镜像的锁列表。

       lock list [image-name]

lock add

给一个镜像加锁。锁ID是一个用户定义的任意的名称。默认情况下,锁是独占的,也就是说,如果在已经加锁的镜像上再次加锁将会失败。使用–shared选项可以改变这种行为。需要注意的是,锁除了影响加锁操作之外,不会影响其它操作。其并不会保护一个镜像,使其不被删除。

  lock add [image-name] [lock-id]

lock remove

释放一个镜像上的锁。锁的ID和名称可以通过lock ls获取。

       lock remove [image-name] [lock-id] [locker]

bench-write

向某个镜像进行连续写操作,测试其带宽和延时。默认参数是–io-size 4096, –io-threads 16, –io-total 1GB。

bench-write [image-name] –io-size [io-size-in-bytes] –io-threads [num-ios-in-flight] –io-total [total-bytes-to-write]   

如果引用本站的原创文章,请注明原文链接:,本站保留追究责任的权利!