前言

收到一个问题如下:

一个300TB 的RBD,只有7800万的objects,如果存储小文件的话,感觉不够用

对于这个问题,我原来的理解是:对象默认设置的大小是4M一个,存储下去的数据,如果小于4M,就会占用一个小于4M的对象,如果超过4M,那么存储的数据就会进行拆分成多个4M,这个地方其实是不严谨的

对于rados接口来说,数据是多大对象put进去就是多大的对象,并没有进行拆分,进行拆分的是再上一层的应用,比如rbd,比如cephfs

那么对于rbd的image显示的对象数目和文件数目有什么关系呢?本篇将来看看这个问题,到底会不会出现上面的问题

实践过程

创建一个image

[root@lab8106 ~]# rbd create --image zpsize --size 100M
[root@lab8106 ~]# rbd info zpsize
rbd image 'zpsize':
size 102400 kB in 25 objects
order 22 (4096 kB objects)
block_name_prefix: rbd_data.85c66b8b4567
format: 2
features: layering
flags:

可以看到,这个image从集群中分配到了25个对象,每个对象的大小为4M,假如我们写入1000个小文件看下会是什么情况

映射到本地并且格式化xfs文件系统

[root@lab8106 ~]# rbd map zpsize
/dev/rbd0
[root@lab8106 ~]# mkfs.xfs -f /dev/rbd0
meta-data=/dev/rbd0 isize=256 agcount=4, agsize=6144 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=24576, imaxpct=25
= sunit=1024 swidth=1024 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=624, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0

挂载到本地

[root@lab8106 ~]# mount /dev/rbd0 /mnt

写入1000个1K小文件

[root@lab8106 ~]# seq 1000|xargs -i dd if=/dev/zero of=/mnt/a{} bs=1K count=1

没有报错提示,正常写入了,我们看下写入了多少对象

[root@lab8106 ~]# rados  -p rbd ls|grep rbd_data.85c66b8b4567
rbd_data.85c66b8b4567.0000000000000018
rbd_data.85c66b8b4567.0000000000000000
rbd_data.85c66b8b4567.0000000000000006
rbd_data.85c66b8b4567.0000000000000001
rbd_data.85c66b8b4567.0000000000000017
rbd_data.85c66b8b4567.000000000000000c
rbd_data.85c66b8b4567.0000000000000012
rbd_data.85c66b8b4567.0000000000000002

只写入了少量的对象,我们尝试下载下来看看

[root@lab8106 ~]# ll -hl rbd_data.85c66b8b4567.0000000000000018
-rw-r--r-- 1 root root 4.0M Jan 3 14:27 rbd_data.85c66b8b4567.0000000000000018
[root@lab8106 ~]# rados -p rbd get rbd_data.85c66b8b4567.0000000000000000 rbd_data.85c66b8b4567.0000000000000000
[root@lab8106 ~]# ll -hl rbd_data.85c66b8b4567.0000000000000000
-rw-r--r-- 1 root root 4.0M Jan 3 14:27 rbd_data.85c66b8b4567.0000000000000000

可以看到还是4M的对象,实际上写入的小文件已经进行了合并了,在底层已经是一个4M的对象文件了

总结

本篇的结论就是,rbd层之上的写入的文件的个数与底层的对象数目是没有关系的,对象数目和对象大小是底层处理的,再上一层就是文件系统去处理的了,总空间占用上是一致的

rbd的image对象数与能写入文件数的关系的更多相关文章

  1. c# 读取txt文档和写入文档的方法

    StreamReader sr = new StreamReader(path); //path是要读取的文件的完整路径 String str_read = sr.ReadToEnd(); //从开始 ...

  2. python写入文本报错TypeError: expected a string or other character buffer object

    今天用python写入文本, file_object2 = open('result.txt', 'w') file_object2.write(bookid_list) file_object2.c ...

  3. C#写入文本文档

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  4. [知识积累]python3使用xlwt时写入文档字体颜色和边框样式

    可借鉴的网址:https://www.programcreek.com/python/example/39979/xlwt.Alignment 可以直接通过pip安装xlwt 个人理解: xlwt中对 ...

  5. linux 系统中将数据写入文档不能立即保存问题的解决方法

    应用场景: 设备跑的是Linux系统,与PC上位机进行通信,上位机可以给Linux发送设备配置信息,Linux将配置信息写入文件中以备设备断电重启时使用. bug现象: 设备正常运行,设备配置信息为A ...

  6. hadoop2.2基准测试

    <hadoop the definitive way>(third version)中的Benchmarking a Hadoop Cluster Test Cases的class在新的版 ...

  7. hadoop2.2编程:hadoop性能测试

    <hadoop the definitive way>(third version)中的Benchmarking a Hadoop Cluster Test Cases 的class在新的 ...

  8. Hadoop基准测试(转载)

    <hadoop the definitive way>(third version)中的Benchmarking a Hadoop Cluster Test Cases的class在新的版 ...

  9. 『TensorFlow』TFR数据预处理探究以及框架搭建

    一.TFRecord文件书写效率对比(单线程和多线程对比) 1.准备工作 # Author : Hellcat # Time : 18-1-15 ''' import os os.environ[&q ...

随机推荐

  1. SpringBoot+MongoDB实现物流订单系统

    码字不易,点赞收藏,养成习惯!原创作者公众号:bigsai.更多精彩期待与您分享!项目收录在github的MongoDB案例中,文章收录在回车课堂中如果没基础请看看前两篇(墙裂推荐)MongoDB从立 ...

  2. 接口管理平台Yapi

    1.介绍 YApi 是由去哪儿移动架构组推出的一款开源项目,是高效.易用.功能强大的 api 管理平台,旨在为开发.产品.测试人员提供更优雅的接口管理服务. 官网:https://yapi.ymfe. ...

  3. 超简单集成HMS ML Kit文字超分能力,一键提升文本分辨率

    前言 大家有没有遇到过这种情况,在浏览微博或者公众号时看到一段有趣的文字,于是截图发到朋友圈想和好友分享.但是在发布图片时,软件会对图片强制进行压缩,导致图片分辨率下降,文字变得模糊难以阅读.那么有没 ...

  4. Java POST请求案例

    <<<<<<<<<<<<<<<<<<<<<<<<< ...

  5. 使用Socket通信(二)

    这个socket有梗,主要是服务器端有梗,可能大家会碰到同样的问题,网上查了好久,这里分享一下解决办法.首先在第一个module建一个类SimpleServer,这个类就是服务端,建好之后在代码左边有 ...

  6. 给 Mac 添加右键菜单「使用 VSCode 打开」

    最终的实现效果是在文件 / 文件夹上右击时,会出现菜单项「用 VSCode 打开」,点击后会启动 Visual Studio Code 打开对应的文件 / 文件夹. 实现步骤 打开「自动操作.app」 ...

  7. PHP对接微信扫码登录

    1.PC端扫码登录 如果你将微信小程序和公众账号绑定同一个微信开放平台,那么他们各自的接口返回有一个参数unionid是相同的(没有绑定微信公众账号就没有):那么你就可以使用这个unionid来做业务 ...

  8. Luogu P5072 [Ynoi2015]盼君勿忘

    题意 给定一个长度为 \(n\) 的序列 \(a\) 和 \(m\) 次询问,第 \(i\) 次询问需要求出 \([l_i,r_i]\) 内所有子序列去重之后的和,对 \(p_i\) 取模. \(\t ...

  9. 4G DTU采用的4G通信模块介绍

      4g通信模块一种基于4G网络进行数据传输的工业级通讯终端,其主要作用是将采集到的传感器数据.仪表数据,传输至服务器/上位机.监控中心.众山研发生产的4g无线通讯设备--4G DTU是一款物联网数据 ...

  10. 2018-12-8 论文翻译+hdoj+git+python

    今天干的事不多,明天得把实验写了. 论文翻译了摘要.0.5h hdoj 五道水题.注意while(cin>>char&&char != '\n')没用.可用ch = cin ...