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层之上的写入的文件的个数与底层的对象数目是没有关系的,对象数目和对象大小是底层处理的,再上一层就是文件系统去处理的了,总空间占用上是一致的
rbd的image对象数与能写入文件数的关系的更多相关文章
- c# 读取txt文档和写入文档的方法
StreamReader sr = new StreamReader(path); //path是要读取的文件的完整路径 String str_read = sr.ReadToEnd(); //从开始 ...
- 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 ...
- C#写入文本文档
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- [知识积累]python3使用xlwt时写入文档字体颜色和边框样式
可借鉴的网址:https://www.programcreek.com/python/example/39979/xlwt.Alignment 可以直接通过pip安装xlwt 个人理解: xlwt中对 ...
- linux 系统中将数据写入文档不能立即保存问题的解决方法
应用场景: 设备跑的是Linux系统,与PC上位机进行通信,上位机可以给Linux发送设备配置信息,Linux将配置信息写入文件中以备设备断电重启时使用. bug现象: 设备正常运行,设备配置信息为A ...
- hadoop2.2基准测试
<hadoop the definitive way>(third version)中的Benchmarking a Hadoop Cluster Test Cases的class在新的版 ...
- hadoop2.2编程:hadoop性能测试
<hadoop the definitive way>(third version)中的Benchmarking a Hadoop Cluster Test Cases 的class在新的 ...
- Hadoop基准测试(转载)
<hadoop the definitive way>(third version)中的Benchmarking a Hadoop Cluster Test Cases的class在新的版 ...
- 『TensorFlow』TFR数据预处理探究以及框架搭建
一.TFRecord文件书写效率对比(单线程和多线程对比) 1.准备工作 # Author : Hellcat # Time : 18-1-15 ''' import os os.environ[&q ...
随机推荐
- 资源管理神器Clover
开开心心地上班,这时你得打开我的电脑,点进D盘,打开某个项目;然后还得打开XX文档,还有.... 最后的最后,你的桌面便成了这个样子 每天你都得天打开多个文件夹,切换时找文件找的晕头转向而烦恼. 每天 ...
- spring boot:使用redis cluster集群作为分布式session(redis 6.0.5/spring boot 2.3.1)
一,为什么要使用分布式session? HpptSession默认使用内存来管理Session,如果将应用横向扩展将会出现Session共享问题, 所以我们在创建web集群时,把session保存到r ...
- docker的常用操作之二:docker内无法解析dns之firewalld设置等
一,如何启动一个已退出的容器? [root@localhost ~]# docker start storage4 说明:架构森林是一个专注架构的博客,地址:https://www.cnblogs.c ...
- centos8平台安装redis6.0.1
一,redis的官网: https://redis.io/ redis6于5月3日正式发布,它的新增功能: acl 多线程io cluster proxy resp3协议 本文演示redis6.0.1 ...
- java-类和数组
java内存划分 Java的内存划分为5个部分: 1.栈 (Stack) : 存放的都是方法中的局部变量,方法的运行一定要在栈当中 局部变量: 方法的参数,或者是方法()内部的变量 作用域: 一旦超出 ...
- oracle统计同一字段0和1
SELECT 班级表.班级编号,班级表.班级名称,SUM(DECODE(性别, '1', 1)) 女生人数,SUM(DECODE(性别, '0', 1)) 男生人数FROM 学生表, 班级表WHERE ...
- SOAP调用Web Service
SOAP调用Web Service (示例位置:光盘\code\ch07\ WebAppClient\ JsService4.htm) <html xmlns="http://www. ...
- HTML5/HTML 4.01/XHTML 元素和有效的 DTD
HTML5/HTML 4.01/XHTML 元素和有效的 DTD 下面的表格列出了所有的 HTML5/HTML 4.01/XHTML 元素,以及它们会出现在什么文档类型 (DTD) 中: 标签 HTM ...
- Linux基础命令cp之拷贝隐藏文件
创建一个用户名为test211的普通用户 [23:35:09 root@C8[ ~]#useradd test211 [23:37:37 root@C8[ ~]#getent passwd test2 ...
- LoadRunner接口脚本编写过程中遇到的问题及分享
工作中需要接口测试,报文编辑器一条条手工发费时费力,因此考虑利用web_submit_data函数POST方法进行报文编辑.在报文编辑中主要遇到了三个问题,其中一个问题耗时两天查到问题所在,在这里与大 ...