ceph中如何查找一个对象的位置

ceph同时提供对象存储、块存储、文件存储三种接口,但本质上其实是对象存储,也就是说一个rbd image实际上包含了多个对象(默认情况下是image_size/4M),这里我们首先介绍一下如何查找一个对象的实际存储位置,然后介绍如何查找rbd image。

ceph中查找一个对象的位置

1、上传一个文件到pool(示例中叫做test)中

rados -p  test put cirros cirros-0.3.2-x86_64-disk.img

2、查看pool中刚才上传的对象

rados -p test ls | grep cirros

3、 查看对象的位置信息

ceph osd map test cirros

输出结果:

osdmap e20062 pool 'test' (13) object 'cirros' -> pg 13.9576dc54 (13.54) -> up ([5,3], p5) acting ([5,3], p5)

这代表pool test中的cirros这个对象位于13.54这个pg中,并且位于osd5和osd3上(两个副本)。

4、进入到对应osd的存储目录,找到对应文件即可。

cd /var/lib/ceph/osd/ceph-3/current/13.54_head; ls

这个目录下存放了13.54这个pg中所有的object,可以根据指纹9576dc54来定位到具体的文件。

ceph中查找一个rbd image的存储位置

正如文章开头提到,一个rbd image其实包含了多个obejct,因此我们只需找到这个image包含了哪些object,然后按照上面的方法找出每个object的位置即可。

1、在pool test中创建一个image1

rbd create test/image1 --size 100 --image-format 2

2、查看这个image,找到指纹信息

rbd info test/image1

命令输出

rbd image 'image1':

size 102400 kB in 25 objects

order 22 (4096 kB objects)

block_name_prefix: rbd_data.4eed912ae8944a

format: 2

features: layering, exclusive

指纹就是4eed912ae8944a

3、根据指纹找到这个image的object

rados -p test ls | grep 4eed912ae8944a

这个命令的输出就是这个image的所有object

4、按照上面的方法即可找到每个object对应的实际存储位置

你可能感兴趣的:(ceph中如何查找一个对象的位置)