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目录下存放着文件