查看RBD镜像的实际大小

摘要:
本文来自zphj1987-如何计算Ceph RBD的实际使用容量Ceph的RBD一直是一个问题,即不清楚在分配的空间中使用了多少。使用rbdinfo命令查询的容量是预分配的总容量,而不是实际使用容量。Jewel版本中提供了一个新的查询界面。对于旧版本,它可能也有此要求。本文将详细介绍如何解决这个问题。目前已知的查询方法有三种:使用rbddu进行查询。使用rbddiff根据对象统计信息进行统计。方法1:使用rbddu进行查询。此命令在Jewel版本中可用。

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

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

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

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

方法一:使用 rbd du 查询

此命令在 Jewel 版中可用。

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

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

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

具体使用可参考 这篇文章 。

方法二:使用 rbd diff

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

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

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

拿到所有对象的信息:

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

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

tail -f obj.txt

获取 RBD 的镜像列表:

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

获取 RBD 的镜像的 prefix :

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

获取指定RBD镜像的大小:

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

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

#!/bin/bash
# USAGE:./get_used.sh <poolname>
 
objfile=obj.txt
Poolname=${1}
echo "In the pool ${Poolname}":
 
for obj in `rados -p $Poolname ls`
do
rados -p $Poolname stat $obj >> $objfile
done
 
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@mon:~# ./get_used.sh rbd
In the pool rbd:
img2 rb.0.f4730.2ae8944a
Used: 3076 MB
mysql-img rb.0.f4652.2ae8944a
Used: 158.414 MB
volume-e5376906-7a95-48bb-a1c6-bb694b4f4813.backup.base rbd_data.23a53c28fb938f
Used: 96 MB

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

 

免责声明:文章转载自《查看RBD镜像的实际大小》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇002-zookeeper 基本配置、安装启动 windows环境Spring Boot 学习心得下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【Devops】 发布一个Python项目(Flask服务后端)到K8S环境

前言: 有一段时间没有更新博客了,今天给大家分享一下如何将一个python项目成功部署并运行到K8S环境,特做一个记录 准备工作 1. 编写一个python项目,我这边提供的一个Flask服务,提供接口的mock能力。(项目里面编写如下文件) dockerfile jenkinsfile deploy文件夹(内含: deploy.yaml   servi...

Docker安装Redis,让宿主机可以访问

一、拉取镜像 docker pull redis #后面可以带上tag号, 默认拉取最新版本 二、查看镜像 docker images #查看容器中的镜像 三、启动并做映射(以配置文件方式启动) 1、创建配置文件目录存放redis.conf,文件从官网下载:http://download.redis.io/redis-stable/redis.conf...

修改python的pip镜像源

1、如果只是暂时使用的话 pip install [模块] -i https://pypi.douban.com/simple 2、Mac永久修改镜像地址: 需要修改 ~/.pip/pip.conf 的内容操作 进入根目录:cd ~/ 进入.pip目录 cd .pip如果不存在文件夹就新建mkdir .pip 进入 cd .pip创建pip.conf文...

centeros 下 docker 安装

关键字      镜像   容器   仓库 centerOs条件: 必须是 64 位操作系统 建议内核在 3.8 以上 查看内核版本 uname -r  安装     rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm  yum -...

镜像的各种版本区别

1 DVD版:这个是常用版本,就是普通安装版了,推荐大家安装。里面包含大量的常用软件,大部分情况下安装时无需再在线下载,体积为4G。 2 Everything版:顾名思义,包含了所有软件组件,当然体积也庞大,高达7G。 3 LiveCD版:就是一个光盘CentOS系统,可通过光盘启动电脑,启动出CentOS系统,也有图形界面,也有终端。也可以安装到计算机,...

mac os系统下制作u盘启动的Windows的系统镜像

教你如何在安了黑苹果想在黑苹果下安回windows 安装过程出现问题:使用mac自带的启动转换助手,提示u盘无法格式化等问题 所以没办法只好查询资料,然后经过我实验过后,终于成功的从黑苹果安装回windows了,所以发表一下,给需要的同学。 支持: windows7、8、10 需要的文件与设备: 1. windows ISO镜像(系统镜像不能超5G大小(w...