资讯详情

转载ceph IO切割成对象和对象名的组成

看到很多关于oid-->pgid-->osdid映射文章。 但是 读写IO到-->oid但没有相关文章。

我认为一个完整的映射关系应该是这样的:read write IO---->oid---->pgid---->osdid 。下面我们重点研究一下read write IO---->oid映射关系。

一, 读写IO的组成

读写IO,最基本的元素是:

1,offset ##在磁盘上的偏移位置

2, length ##需要读写的长度

3, data #需要读取的数据

二、对象名的组成

对象文件名称由五部分组成

1, rbd\udata.102a2ae8944a

rbd镜像中块的前缀可以使用rbd info查看, 通过他,可以找属关系可以通过他找到

2,0000000000000000

每次读写对象的序号IO的 offset 除对象大小4外M,然后取整数生成。

比如:offset 假如为 4194035, 那么4194035/ 4194034 最后结果为1 ,那么这次IO写在对象序号为0000000000的对象上。

从上面可以看出,对象是4M,按顺序切割。

假如写一个20M大小IO 产生的对象序号如下:

可以发现对象的序列号非常有序,这些对象按序列号拼接,只是在镜像中形成数据。

3,__head_

指对象在head目录下

4,9577E02B

这是对象的哈希值,与文件夹的分层有关。比如对象多,容纳一个目录有点难,目录的分层性能更好

例如:

可以看象分层后缀为183,正好在/DIR_3/DIR_8/DIR_目录下,恰恰相反。pg目录分为三层。

5,__1

1表示 pool id

三、大的IO读写请求,如何划分为特定对象的读写请求

1,对象名称的生产

cur就是读写IO的 offset,su就是4M大小。 cur/su,得到的bockno即对象的序号,

stripe_count为1, stripes_per_object 为 1。 最后算出objectno,即最终序号。

最后,通过字符串拼接block_name_prefix objectno= oid

2.业务系统IO 长度和偏移值在对象中转换为IO长度和偏移值

按照4M业务系统的大小IO切割后,将对象的偏移值写入ObjectExtent类的对象ex。

3,根据ObjectExtent业务系统数据中的偏移值和长度buf,切割成碎片后,放入bufferlist里

四,一个读IO,分成几个读对象任务后返回

一个读取IO操作需要分为多个对象读取操作。当获得多个对象中的数据时,需要合并成一个大的返回值

1.首先,写下读取的每个对象的数据 Striper::StripedReadResult 这个类的partial这个过程叫收集。

2,把partial全部写入里面的值bufferlsit,合并成一个完整的返回值,称为合并

五, 读写IO对象文件中的表现形式

并非所有对象都是4M大小。即使对象的最大尺寸设置为4M

假如写一个1M数据的IO,落到对象里面,造成的对象文件大小,可能为1M,2M,3M,4M,等等,都有可能。关键取决于对象中数据的偏移值。

如果从业务系统写入1,下面做一个实验M偏移位置为2M

集群的大小如下

从4个对象到5个,从675个字节到3072K,也就是3M。

看对象文件的大小

对象文件也是3M大小。

为什么写入1M对象文件为3的数据M大小? 事实上,对象文件是根据偏移值填写的。当数据落入对象文件中确定位置时,在偏移位置之前填写所有位置NUL值

&bsp;  

 

          在文件2M的偏移位置,2M之前是NUL值,2M之后为写入的真实数据,字符串"aaaaaaa....."

 

        所以这就是为什么随机IO,对集群的存储空间占用非常大,因为随机IO在对象文件内造成了随机的落点位置

 

 

 

六,对象的名字,在数据恢复中的应用。

 

        通过以上结论,得出,rbd image下的所有对象,包含了image里的所有数据。

 

        当一个ceph集群死亡后,如果数据盘里的数据还完整。我们依然可以通过对象拼接出一个rbd image。用于数据的恢复

 

        方法为:

 

      1,收集想要恢复的image下的所有对象,通过rbd info中的block_name_prefix

 

      2,把对象,通过dd命令拼接出整个image的数据文件

 

      3,把恢复好的image数据文件导入新的ceph集群

 

      官网上给出命令和脚本

 

      官网:http://ceph.com/geen-categorie/ceph-recover-a-rbd-image-from-a-dead-cluster/

作者:620T 链接:https://www.jianshu.com/p/ee9dd36534a1 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签: 二极管620t6

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司