# ceph pg分布相关的脚本 转

```#获取指定pool id的pg在osd上的分布情况
ceph pg dump pgs|grep ^0|awk '{print \$1,\$2,\$15}'

#获取所有pool在每个osd上的Pg统计分布结果
ceph pg dump | awk '
/^pg_stat/ { col=1; while(\$col!="up") {col++}; col++ }
/^[0-9a-f]+\.[0-9a-f]+/ { match(\$0,/^[0-9a-f]+/); pool=substr(\$0, RSTART, RLENGTH); poollist[pool]=0;
up=\$col; i=0; RSTART=0; RLENGTH=0; delete osds; while(match(up,/[0-9]+/)>0) { osds[++i]=substr(up,RSTART,RLENGTH); up = substr(up, RSTART+RLENGTH) }
for(i in osds) {array[osds[i],pool]++; osdlist[osds[i]];}
}
END {
printf("\n");
slen=asorti(poollist,newpoollist);
printf("pool :\t");for (i=1;i<=slen;i++) {printf("%s\t", newpoollist[i])}; printf("| SUM \n");
for (i in poollist) printf("--------"); printf("----------------\n");
slen1=asorti(osdlist,newosdlist)
delete poollist;
for (j=1;j<=slen;j++) {maxpoolosd[j]=0};
for (j=1;j<=slen;j++) {for (i=1;i<=slen1;i++){if (array[newosdlist[i],newpoollist[j]] >0  ){minpoolosd[j]=array[newosdlist[i],newpoollist[j]] ;break } }};
for (i=1;i<=slen1;i++) { printf("osd.%i\t", newosdlist[i]); sum=0;
for (j=1;j<=slen;j++)  { printf("%i\t", array[newosdlist[i],newpoollist[j]]); sum+=array[newosdlist[i],newpoollist[j]]; poollist[j]+=array[newosdlist[i],newpoollist[j]];if(array[newosdlist[i],newpoollist[j]] != 0){poolhasid[j]+=1 };if(array[newosdlist[i],newpoollist[j]]>maxpoolosd[j]){maxpoolosd[j]=array[newosdlist[i],newpoollist[j]];maxosdid[j]=newosdlist[i]};if(array[newosdlist[i],newpoollist[j]] != 0){if(array[newosdlist[i],newpoollist[j]]<=minpoolosd[j]){minpoolosd[j]=array[newosdlist[i],newpoollist[j]];minosdid[j]=newosdlist[i]}}}; printf("| %i\n",sum)} for (i in poollist) printf("--------"); printf("----------------\n");
slen2=asorti(poollist,newpoollist);
printf("SUM :\t"); for (i=1;i<=slen;i++) printf("%s\t",poollist[i]); printf("|\n");
printf("Osd :\t"); for (i=1;i<=slen;i++) printf("%s\t",poolhasid[i]); printf("|\n");
printf("AVE :\t"); for (i=1;i<=slen;i++) printf("%.2f\t",poollist[i]/poolhasid[i]); printf("|\n");
printf("Max :\t"); for (i=1;i<=slen;i++) printf("%s\t",maxpoolosd[i]); printf("|\n");
printf("Osdid :\t"); for (i=1;i<=slen;i++) printf("osd.%s\t",maxosdid[i]); printf("|\n");
printf("per:\t"); for (i=1;i<=slen;i++) printf("%.1f%\t",100*(maxpoolosd[i]-poollist[i]/poolhasid[i])/(poollist[i]/poolhasid[i])); printf("|\n");
for (i=1;i<=slen2;i++) printf("--------");printf("----------------\n");
printf("min :\t"); for (i=1;i<=slen;i++) printf("%s\t",minpoolosd[i]); printf("|\n");
printf("osdid :\t"); for (i=1;i<=slen;i++) printf("osd.%s\t",minosdid[i]); printf("|\n");
printf("per:\t"); for (i=1;i<=slen;i++) printf("%.1f%\t",100*(minpoolosd[i]-poollist[i]/poolhasid[i])/(poollist[i]/poolhasid[i])); printf("|\n");
}'```

0 条评论

• ### ETCD的基本使用 转

原文地址： http://www.csdn.net/article/2015-01-22/2823659

• ### ceph关闭同步之后的故障记录 原

碰到一个场景 ceph集群中有一个机器坏了，一下掉了4块硬盘，考虑到容量的问题，加了一个新机器进去，等待数据同步中，同时对外正常提供服务 第二天发现同步还没有结...

• ### kubernetes 下实现socket.io 的集群模式

socket.io 单节点模式是很容易部署的，但是往往在生产环境一个节点不能满足业务需求，况且还要保证节点挂掉的情况仍能正常提供服务，所以多节点模式就成为了生成...

• ### 什么是真正的程序员

这篇文章的原文来自：A Little Printf Story 作者仿照《小王子》中的情节，通过小printf遇见的不同类型的程序员，最后悟出什么才是真正的程序...

• ### 打印矩阵、机器人、菜单

int main(void) { printf("n"); printf("1 2 3 4n5 6 7 8n9 10 11 12n13 14 15 16n...

• ### 基础知识 | 每日一练（110）

士人有百折不回之真心，才有万变不穷之妙用。立业建功，事事要从实地着脚，若少慕声闻，便成伪果；讲道修德，念念要从虚处立基，若稍计功效，便落尘情。 ...

• ### C语言 第四章 分支结构练习

一、输入语文，数学成绩，根据平均分分3档 #include "stdio.h" void main() { //接受用户输入 float chi...

• ### C++解决常胜将军问题

现有21根火柴，两人轮流取，每人每次可以取走1至4根，不可多取，也不能不取，谁取最后一根火柴谁输。请编写一个程序进行人机对弈，要求人先取，计算机后取；计算机一方...