专栏首页磨磨谈rbd的image对象数与能写入文件数的关系

rbd的image对象数与能写入文件数的关系

一、前言

收到一个问题如下:

一个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层之上的写入的文件的个数与底层的对象数目是没有关系的,对象数目和对象大小是底层处理的,再上一层就是文件系统去处理的了,总空间占用上是一致的

本文分享自微信公众号 - 磨磨谈(momotan1987),作者:张鹏

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-01-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 从ceph对象中提取RBD中的指定文件

    之前有个想法,是不是有办法找到rbd中的文件与对象的关系,想了很久但是一直觉得文件系统比较复杂,在fs 层的东西对ceph来说是透明的,并且对象大小是4M,而文...

    用户2772802
  • RBD快速删除的方法分析与改进

    这个问题在很久以前就有一篇文章进行过讨论 remove-big-rbd,这个文章写的比较清楚了,并且对不同的方法做了分析,这里先把结论说下

    用户2772802
  • Cephfs的快照功能

    Cephfs的快照功能在官网都很少提及,因为即使开发了很多年,但是由于cephfs的复杂性,功能一直没能达到稳定,这里,只是介绍一下这个功能,怎么使用,并且建议...

    用户2772802
  • Linux系统实战——批量无人值守安装操作系统

    实际生产环境中肯定会有一次性安装多台服务器操作系统的工作,因此,光靠传统的一台台安装,很费时费力,数量不多的情况,还是比较好应付,如果一次是几十...

    民工哥
  • CentOS平台实现搭建rsync远程同步服务器的方法

    本文实例讲述了CentOS平台实现搭建rsync远程同步服务器的方法。分享给大家供大家参考,具体如下:

    砸漏
  • TP5.1中导入Excel表到数据库

    本文为北溟有鱼QAQ原创文章,转载无需和我联系,但请注明来自北溟有鱼QAQ https://www.umdzz.cn ...

    北溟有鱼QAQ
  • 两行代码修复了解析MySQL8.x binlog错位的问题!!

    作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。自开源半年多以来,已成功为十几家中小型企业提供了...

    冰河
  • Centos7环境搭建安装jdk、tomcat、nginx、redis、fastDFS

    centos7安装jdk,tomcat,nginx,redis,fastDFS的步骤

    挑战者
  • [Linux]正则表达式和grep使用

    可以看以前的博客[Regex]Get正则表达式:https://blog.csdn.net/humanking7/article/details/5117593...

    祥知道
  • 等保测评2.0之Centos安全审计

    在进行等级保护测评时,需要检查主机的安全审计功能,这里就以等级保护2.0来说一说centos6在这方面的检测,以下是安全计算环境的安全审计控制点中的测评项。

    FB客服

扫码关注云+社区

领取腾讯云代金券