ceph中如何查找一个对象或者rbd image 的实际存储位置

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,openstack)