返回介绍

第三部分:Ceph 进阶 - 8. 查看 RBD 镜像的实际大小

发布于 2020-08-30 11:37:28 字数 5048 浏览 1419 评论 0 收藏 0


本篇内容来自 zphj1987 —— 如何统计 Ceph 的 RBD 真实使用容量

Ceph 的 rbd 一直有个问题就是无法清楚的知道这个分配的空间里面到底使用了多少,使用 rbd info 命令查询出来的容量是预分配的总容量而非实际使用容量。在 Jewel 版中提供了一个新的接口去查询,对于老版本来说可能同样有这个需求,本篇将详细介绍如何解决这个问题。

目前已知的有三种查询方法:

  1. 使用 rbd du 查询(Jewel 版才支持)
  2. 使用 rbd diff
  3. 根据对象统计的方法进行统计

方法一:使用 rbd du 查询

此命令在 Jewel 版中可用。

  1. root@mon:~# rbd du rbd/mysql-img
  2. NAME PROVISIONED USED
  3. test 52.8047M 0

不过需要注意,执行此命令要求开启 rbd image 的如下属性:

  1. layering, exclusive-lock, object-map, fast-diff

具体使用可参考 这篇文章

方法二:使用 rbd diff

  1. root@mon:~# rbd diff rbd/mysql-img | awk '{ SUM += $2 } END { print SUM/1024/1024 " MB" }'
  2. 52.8047 MB

方法三:根据对象统计的方法进行统计

在集群非常大的时候,再按上面的方法一个个查询,需要花很长的时间,并且需要时不时的跟集群进行交互。方法三是把统计数据一次获取下来,然后进行数据的统计分析,从而获取结果,获取的粒度是以存储池为基准的。

拿到所有对象的信息:

  1. for obj in `rados -p rbd ls`;do rados -p rbd stat $obj >> obj.txt;done

这个获取的时间长短是根据对象的多少来的,如果担心出问题,可以换个终端查看进度:

  1. tail -f obj.txt

获取 RBD 的镜像列表:

  1. rbd -p rbd ls
  2. img2
  3. mysql-img
  4. volume-e5376906-7a95-48bb-a1c6-bb694b4f4813.backup.base

获取 RBD 的镜像的 prefix :

  1. root@mon:~# for a in `rbd -p rbd ls`;do echo $a ;rbd -p rbd info $a|grep prefix |awk '{print $2}' ;done
  2. img2
  3. rb.0.f4730.2ae8944a
  4. mysql-img
  5. rb.0.f4652.2ae8944a
  6. volume-e5376906-7a95-48bb-a1c6-bb694b4f4813.backup.base
  7. rbd_data.23a53c28fb938f

获取指定RBD镜像的大小:

  1. root@mon:~# cat obj.txt |grep rb.0.f4652.2ae8944a |awk '{ SUM += $6 } END { print SUM/1024/1024 " MB" }'
  2. 52.8047 MB

将上面的汇总,使用脚本一次查询出指定存储池中所有镜像的大小:

  1. #!/bin/bash
  2. # USAGE:./get_used.sh <poolname>
  3. objfile=obj.txt
  4. Poolname=${1}
  5. echo "In the pool ${Poolname}":
  6. for obj in `rados -p $Poolname ls`
  7. do
  8. rados -p $Poolname stat $obj >> $objfile
  9. done
  10. for image in `rbd -p $Poolname ls`
  11. do
  12. Imagename=$image
  13. Prefix=`rbd -p $Poolname info $image|grep prefix |awk '{print $2}'`
  14. Used=`cat $objfile |grep $Prefix|awk '{ SUM += $6 } END { print SUM/1024/1024 " MB" }'`
  15. echo $Imagename $Prefix
  16. echo Used: $Used
  17. done

执行的效果如下:

  1. root@mon:~# ./get_used.sh rbd
  2. In the pool rbd:
  3. img2 rb.0.f4730.2ae8944a
  4. Used: 3076 MB
  5. mysql-img rb.0.f4652.2ae8944a
  6. Used: 158.414 MB
  7. volume-e5376906-7a95-48bb-a1c6-bb694b4f4813.backup.base rbd_data.23a53c28fb938f
  8. Used: 96 MB

注意这里只统计了 image 里面的真实容量,如果是用了链接 clone 的,存在容量复用的问题,需要自己看是否需要统计那一部分的对象,方法同上。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文