ceph存储pg、object、pool、osd、image对应存储位置查询

pg, osd, pool 之间的一些查找方法

1. pg --> osd: 通过 pg 查找 osd

ceph pg map {pgid}

2. osd --> pg: 通过 osd 查找 pg

ceph pg ls-by-osd osd.{osdid}

3. pg --> pool: 通过 pg 查找 pool

ceph pg dump | grep "^{poolid}\."

4. pool --> pg: 通过 pool 查找 pg

ceph pg ls-by-pool {poolname}
ceph pg ls {poolid}

5. object --> osd: 通过 object 查找 osd

ceph osd map {poolname} {objectname}

image对象存储位置

1、首先查看一个pool中的image的指纹信息,目的是该image的所有的object文件都是以这个指纹命名的。比如我这里创建了一个pool rbd,该pool下有一个image dbd image : 

$rados -p rbd ls 
rbd_data.ff3fceeb8376.0000000000000e12
rbd_data.ff3fceeb8376.0000000000001d04
rbd_data.ff33b491db6b9.0000000000000f26


这里ff3fceeb8376就是这个image的指纹。所有这个image相关的object 4M对象都会以这个指纹命名来当文件存放在filestore后端文件系统上,比如XFS文件系统上。

2、查看这个pool下该image所有对象信息 

rados -p rbd ls |grep ff3fceeb8376
rbd_data.ff3fceeb8376.0000000000000055
rbd_data.ff3fceeb8376.0000000000000554


如这里都是以指纹ff3fceeb8376对应的4M文件。

3、比如我们这里以rbd_data.ff3fceeb8376.0000000000000055这个4M对象文件为例来查找这个文件的位置。首先找到这个文件对应的pg和OSD集合。 

 ceph osd map rbd  rbd_data.ff3fceeb8376.0000000000000055
osdmap e223 pool 'rbd' (2) object 'rbd_data.ff3fceeb8376.0000000000000055' -> pg 
2.afdb9000 (2.0) -> up ([0,5], p0) acting ([0,5], p0)


从而指导这个对象对应的pg是2.f,osd集合是[2,0],其中osd.2是主OSD。

3、在查看这个主OSD在那台OSD节点上,比如查看180主OSD在那台节点上。此时需要执行ceph osd tree查看整个map,从而得到该OSD归属那个节点 
$ceph osd tree

0.36386             osd.2          up  1.00000 1.00000
0.36386             osd.3          up  1.00000 1.00000
4、从而得到OSD.2是在主机名:xxx上,因此这里需要登录着台机器.xxx.然后查看OSD目录: 
$sudo ls -l /var/lib/ceph/osd 

5、发现ceph-180目录。该目录下存放和这个OSD所对应的pg,因此也存放这个这些pg对应的image的对象文件。在current目录下查看上面pg id对应的文件: 
$sudo ls -l /var/lib/ceph/osd/ceph2/current |grep 2.f
。。。

6、在/var/lib/ceph/osd/ceph-180/current/2.f_head目录下存放着文件


 

猜你喜欢

转载自blog.csdn.net/pansaky/article/details/89317110