RBD 使用容量查询及属性的添加,删除
在使用ceph块存储时,使用rbd创建image是不可避免的。不过由于一些操作系统内核不是最新的,对于一些rbd
的新属性不支持,所以在默认创建rbd的时候就需要指定启用其中某些属性。或者对于已经创建过的image进行修改属性。
在统计rbd使用容量时也有几种不同的方法。
1.计算RBD使用容量
1.1使用rbd du
例子:
[root@ceph-osd2 ~]# rbd du image01 -p rbd --image01是image名称,data是所属的pool名称 NAME PROVISIONED USED image01 51200M 0
#如果不指定iamge则查询该pool下所有iamge
[root@ceph-osd2 ~]# rbd du -p rbd NAME PROVISIONED USED image01@image01_snap 51200M 0 image01 51200M 0 image02 51200M 0 image03 51200M 0 <TOTAL> 150G 0
#如果出现这个warning,则需要启用这个image的fast-diff属性。下面会讲到如何启用。
[root@ceph-osd2 ~]# rbd du image01 -p rbd warning: fast-diff map is not enabled for test. operation may be slow. NAME PROVISIONED USED image01 10240M 0
1.2.rbd diff查看
[root@ceph-osd2 ~]# rbd diff rbd/image01 | awk '{ SUM += $2 } END { print SUM/1024/1024 " MB" }' 8.854 MB
1.3.根据对象统计的方法进行统计
这个是本篇着重介绍的一点,在集群非常大的时候,再去按上面的一个个的查询,需要花很长的时间,并且需要时不时的跟集群进行交互,这里采用的方法是把统计数据一次获取下来,然后进行数据的统计分析,从而获取结果,获取的粒度是以存储池为基准的
拿到所有对象的信息
for obj in `rados -p rbd ls`;do rados -p rbd stat $obj >> obj.txt;done;
这个获取的时间长短是根据对象的多少来的,如果担心出问题,可以换个终端查看进度
tail -f obj.txt
获取RBD的镜像列表
[root@lab8106 ~]# rbd -p rbd ls test1 zp
获取RBD的镜像的prefix
for a in `rbd -p rbd ls`;do echo $a ;rbd -p rbd info $a|grep prefix |awk '{print $2}' ;done
获取指定RBD镜像的大小
查询 test1 的镜像大小
[root@lab8106 ~]# cat obj.txt |grep rbd_data.3ac16b8b4567|awk '{ SUM += $6 } END { print SUM/1024/1024 " MB" }' 4014.27 MB
将上面的汇总,使用脚本一次查询出所有的
第一步获取:
for obj in `rados -p rbd ls`;do rados -p rbd stat $obj >> obj.txt;done;
第二步计算:
创建一个获取的脚本getused.sh
#! /bin/sh ##default pool name use rbd,you can change it ##default objfile is obj.txt,you can change it objfile=obj.txt Poolname=rbd for image in `rbd -p $Poolname ls` do Imagename=$image Prefix=`rbd -p $Poolname info $image|grep prefix |awk '{print $2}'` Used=`cat $objfile |grep $Prefix|awk '{ SUM += $6 } END { print SUM/1024/1024 " MB" }'` echo $Imagename $Prefix echo Used: $Used done
输出如下:
[root@lab8106 ~]# sh getused.sh test1 rbd_data.3ac16b8b4567 Used: 4014.27 MB zp rbd_data.11f66b8b4567 Used: 828.844 MB
注意这里只统计了image里面的真实容量,如果是用了快速clone的,存在容量复用的问题,需要自己看是否需要统计那一部分的对象,方法同上
2.RBD属性的启用
以上面情况作为例子。启用fast-diff属性。
2.1查看iamge详细信息
[root@ceph-osd2 ~]# rbd info rbd/image01 rbd image 'image01': size 51200 MB in 12800 objects order 22 (4096 kB objects) block_name_prefix: rbd_data.604e8238e1f29 format: 2 features: layering --可以看到这里没有fast-diff flags:
2.2启用fast-diff属性
首先启用这个属性之前,需要先启用其他两个属性分别是exclusive-lock和 object-map。
[root@ceph-osd2 ~]# rbd feature enable rbd/image01 exclusive-lock [root@ceph-osd2 ~]# rbd feature enable rbd/image01 object-map [root@ceph-osd2 ~]# rbd feature enable rbd/image01 fast-diff
2.3查看结果
[root@ceph-osd2 ~]# rbd info rbd/image01 rbd image 'image01': size 51200 MB in 12800 objects order 22 (4096 kB objects) block_name_prefix: rbd_data.604e8238e1f29 format: 2 features: layering, exclusive-lock, object-map, fast-diff --可以看到有了 flags: object map invalid, fast diff invalid --可以看到报错了,这个是因为是后开启object map,需要重建一下
[root@ceph-osd2 ~]# rbd object-map rebuild image01 Object Map Rebuild: 100% complete...done.
#再看一下,OK了
[root@ceph-osd2 ~]# rbd info rbd/image01 rbd image 'image01': size 51200 MB in 12800 objects order 22 (4096 kB objects) block_name_prefix: rbd_data.604e8238e1f29 format: 2 features: layering, exclusive-lock, object-map, fast-diff flags:
[root@ceph-osd2 ~]# rbd du rbd/image01 NAME PROVISIONED USED image01 51200M 0
3.RBD属性的禁用
语法和启用相似,只是把enable替换成disable
如:
rbd feature disable rbd/image01 fast-diff
4.题外话
如果想要修改为默认创建iamge的时候就启用fast-diff,可以修改参数达到效果
先查看当前的默认参数的值。
[root@ceph-osd2 ~]#ceph --show-config|grep rbd_default_features rbd_default_features = 61
61是某个特性对于的数字相加得到的。
下面是特性对应的BIT码:
属性 BIT码 layering 1 striping 2 exclusive-lock 4 object-map 8 fast-diff 16 deep-flatten 32
那么61就是1+4+8+16+32得到的,那么默认创建的iamge的属性除了没有striping,其他都有。
版权声明:本文为博主原创文章,未经博主允许不得转载。
RBD