Monthly Archives: 3月 2016

(转LGC)整理的DBA常用脚本

整理的DBA常用脚本
oracle用户权限检查

1. 系统权限记录在 dba_sys_privs 视图中:
select grantee, privilege, admin_option
from dba_sys_privs
where grantee = ‘USERNAME’ ;

2. 角色权限记录在 dba_role_privs 视图中:
select grantee, granted_role, admin_option
from dba_role_privs
where grantee = ‘USERNAME’ ;

3. 对象权限记录在 dba_tab_privs 视图中,虽然视图名看起来像是表权限,但是实际包含了包,存储过程等等对象级的权限:
select grantee, owner || ‘.’ || table_name obj_name, privilege, grantable
from dba_tab_privs
where grantee = ‘USERNAME’;

4. 其他还有部分权限,如表空间的quota权限,记录在 dba_ts_quota中:
select username,
tablespace_name,
bytes / 1024 / 1024 “used space (m)”,
decode(decode(max_bytes, -1, 0, max_bytes) / 1024 / 1024,
0,
‘unlimited’,
max_bytes / 1024 / 1024) “max space(m)”,
blocks used_blocks,
max_blocks
from dba_ts_quotas
where username = ‘USERNAME’;
select * from session_privs; 当前用户拥有的权限
SELECT * FROM DBA_SYS_PRIVS; 查询每个用户的权限
锁的检查
select b.owner,
b.object_name,
l.SESSION_ID,
DECODE(L.LOCKED_MODE,
0,
‘None’,
1,
‘Null’,
2,
‘Row-S (SS)’,
3,
‘Row-X (SX)’,
4,
‘Share’,
5,
‘S/Row-X (SSX)’,
6,
‘Exclusive’,
TO_CHAR(L.LOCKED_MODE)) MODE_HELD,
s.USERNAME
from dba_objects b, v$locked_object l, V$SESSION S
where b.object_id = l.object_id
and l.SESSION_ID = s.SID
查看一个长查询的进度
SELECT *
FROM ( select username,opname,sid,serial#,
context,b.sql_text,sofar,totalwork,
round(sofar/totalwork*100,2) “% Complete”,
elapsed_seconds
from v$session_longops , v$sql b
where sql_hash_value=b.hash_value
and sql_address = address
and totalwork <> 0
)
WHERE “% Complete” <> 100 ;
查看ACTIVE SESSION的等待事件
select a.event,
sum(decode(wait_Time, 0, 0, 1)) “Prev”,
sum(decode(wait_Time, 0, 1, 0)) “Curr”,
count(*) “Tot”
from v$session_wait a, v$session b
where a.sid = b.sid
and b.status = ‘ACTIVE’
group by a.event
— having count(*) > 10
order by 4;

在某个用户下找所有的索引
select user_indexes.table_name, user_indexes.index_name,uniqueness, column_name
from user_ind_columns, user_indexes
where user_ind_columns.index_name = user_indexes.index_name
and user_ind_columns.table_name = user_indexes.table_name
order by user_indexes.table_type, user_indexes.table_name,
user_indexes.index_name, column_position;
通过DBMS_METADATA包得到对象的DLL语句
a.获取单个的建表和建索引的语法,其他对象类似:
select dbms_metadata.get_ddl(‘TABLE’,’TABLE_NAME’,’TABLE_OWNER’) from dual;
select dbms_metadata.get_ddl(‘INDEX’,’INDEX_NAME’,’INDEX_OWNER’) from dual;

b.获取一个SCHEMA下的所有建表的语法,以scott为例,其他对象类似:
SELECT DBMS_METADATA.GET_DDL(‘TABLE’, u.table_name, u.owner) || ‘;’
FROM DBA_TABLES u
where owner = ‘SCOTT’ ;
查看回滚段名称及大小
select segment_name,
tablespace_name,
r.status,
(initial_extent / 1024) InitialExtent,
(next_extent / 1024) NextExtent,
max_extents,
v.curext CurExtent
From dba_rollback_segs r, v$rollstat v
Where r.segment_id = v.usn(+)
order by segment_name;

查看表空间的名称及大小
select t.tablespace_name, round(sum(bytes / (1024 * 1024)), 0) ts_size
from dba_tablespaces t, dba_data_files d
where t.tablespace_name = d.tablespace_name
group by t.tablespace_name;

查看数据库的版本
Select version
FROM Product_component_version
Where SUBSTR(PRODUCT, 1, 6) = ‘Oracle’;

查看数据库的创建日期和归档方式
Select Created, Log_Mode From V$Database;

查看还没提交的事务
select * from v$locked_object;
select * from v$transaction;
查找object为哪些进程
select p.spid,
s.sid,
s.serial# serial_num,
s.username user_name,
a.type object_type,
s.osuser os_user_name,
a.owner,
a.object object_name,
decode(sign(48 – command),
1,
to_char(command),
‘Action Code #’ || to_char(command)) action,
p.program oracle_process,
s.terminal terminal,
s.program program,
s.status session_status
from v$session s, v$access a, v$process p
where s.paddr = p.addr
and s.type = ‘USER’
and a.sid = s.sid
and a.object = ‘EMP’
order by s.username, s.osuser
怎样计算一个表占用的空间的大小?
select owner,
table_name,
NUM_ROWS,
BLOCKS * AAA / 1024 / 1024 “Size M”,
EMPTY_BLOCKS,
LAST_ANALYZED
from dba_tables
where table_name = ‘XXX’;

注意:执行以上语句前要先对表做统计分析

select sum(a.bytes) / 1024 * 1024 “size”
from dba_extents a
where a.segment_name = ‘GOV_FDDBR’
select a.bytes / 1024 * 1024 “size”, (a.blocks * 8192) / 1024 * 1024 “da”
from dba_segments a
where a.segment_name = ‘GOV_FDDBR’
如何查看最大会话数
SELECT * FROM V$PARAMETER WHERE NAME LIKE ‘proc%’;
SQL>
SQL> show parameter processes

NAME TYPE VALUE
———————————— ——- ——————————
aq_tm_processes integer 1
db_writer_processes integer 1
job_queue_processes integer 4
log_archive_max_processes integer 1
processes integer 200

这里为200个用户。

select * from v$license;
其中sessions_highwater纪录曾经到达的最大会话数
如何在Oracle服务器上通过SQLPLUS查看本机IP地址

select sys_context(‘userenv’,’ip_address’) from dual;

如何将表、索引移动表空间
ALTER TABLE TABLE_NAME MOVE TABLESPACE_NAME;
ALTER INDEX INDEX_NAME REBUILD TABLESPACE TABLESPACE_NAME;
如何才能得知系统当前的SCN号
select max(ktuxescnw * power(2, 32) + ktuxescnb) from x$ktuxe;
如何在字符串里加回车
select ‘Welcome to visit’||chr(10)||’www.CSDN.NET’ from dual;
如何将小表放入keep池中
alter table xxx storage(buffer_pool keep);
如何查询做比较大的排序的进程?
SELECT b.tablespace,
b.segfile#,
b.segblk#,
b.blocks,
a.sid,
a.serial#,
?? a.username,
a.osuser,
a.status ??
FROM v$session a, v$sort_usage b ??
WHERE a.saddr = b.session_addr ??
ORDER BY b.tablespace, b.segfile#, b.segblk#, b.blocks;

如何删除重复记录?
DELETE FROM TABLE_NAME
WHERE ROWID != (SELECT MAX(ROWID)
FROM TABLE_NAME D
WHERE TABLE_NAME.COL1 = D.COL1
AND TABLE_NAME.COL2 = D.COL2);
如何回滚段的争用情况
select name, waits, gets, waits / gets “Ratio”
from v$rollstat C, v$rollname D
where C.usn = D.usn;
如何监控表空间的 I/O 比例
select B.tablespace_name name,
B.file_name “file”,
A.phyrds pyr,
A.phyblkrd pbr,
A.phywrts pyw,
A.phyblkwrt pbw
from v$filestat A, dba_data_files B
where A.file# = B.file_id
order by B.tablespace_name;

如何监控文件系统的 I/O 比例
Select substr(C.file#, 1, 2) “#”,
substr(C.name, 1, 30) “Name”,
C.status,
C.bytes,
D.phyrds,
D.phywrts
from v$datafile C, v$filestat D
where C.file# = D.file#;
如何在某个用户下找所有的索引
select user_indexes.table_name,
user_indexes.index_name,
uniqueness,
column_name
from user_ind_columns, user_indexes
where user_ind_columns.index_name = user_indexes.index_name
and user_ind_columns.table_name = user_indexes.table_name
order by user_indexes.table_type,
user_indexes.table_name,
user_indexes.index_name,
column_position;
如何监控 SGA 中字典缓冲区的命中率
select parameter,
gets,
Getmisses,
getmisses / (gets + getmisses) * 100 “miss ratio”,
(1 – (sum(getmisses) / (sum(gets) + sum(getmisses)))) * 100 “Hit ratio”
from v$rowcache
where gets + getmisses <> 0
group by parameter, gets, getmisses;
如何监控 SGA 中共享缓存区的命中率,应该小于1%
select sum(pins) “Total Pins”,
sum(reloads) “Total Reloads”,
sum(reloads) / sum(pins) * 100 libcache
from v$librarycache;

select sum(pinhits – reloads) / sum(pins) “hit radio”,
sum(reloads) / sum(pins) ????”reload percent” ??
from v$librarycache;
监控 SGA 中重做日志缓存区的命中率,应该小于1%
SELECT name,
gets,
misses,
immediate_gets,
immediate_misses,
Decode(gets, 0, 0, misses / gets * 100) ratio1,
Decode(immediate_gets+immediate_misses,0,0, immediate_misses / (immediate_gets + immediate_misses) * 100) ratio2
FROM v$latch
WHERE name IN (‘redo allocation’, ‘redo copy’);

监控内存和硬盘的排序比率,最好使它小于 .10,增加 sort_area_size
SELECT name, value
FROM v$sysstat
WHERE name IN (‘sorts (memory)’, ‘sorts(disk)’);
如何监控当前数据库谁在运行什幺SQL语句?
SELECT osuser, username, sql_text
from v$session a, v$sqltext b
where a.sql_address = b.address
order by address, piece;
如何查看碎片程度高的表?
SELECT segment_name table_name, COUNT(*) extents
FROM dba_segments
WHERE owner NOT IN (‘SYS’, ‘SYSTEM’)
GROUP BY segment_name
HAVING COUNT(*) = (SELECT MAX(COUNT(*))
FROM dba_segments
GROUP BY segment_name);
如何知道表在表空间中的存储情况?
select segment_name, sum(bytes), count(*) ext_quan
from dba_extents
where tablespace_name = ‘&tablespace_name’
and segment_type = ‘TABLE’
group by tablespace_name, segment_name;
如何知道索引在表空间中的存储情况?
select segment_name, count(*)
from dba_extents
where segment_type = ‘INDEX’
and owner = ‘&owner’
group by segment_name;

如何知道使用CPU多的用户session?
Select a.sid,spid,status,
substr(a.program,1,40)
prog,a.terminal,osuser,value/60/100 value
from v$session a,v$process b,v$sesstat c
where c.statistic#=11 and c.sid=a.sid and a.paddr=b.addr
order by value desc;
物理读和内存读较高SQL
SELECT t.HASH_VALUE,
t.EXECUTIONS,
t.DISK_READS,
round(t.DISK_READS / t.EXECUTIONS) AS perDiskReads,
t.BUFFER_GETS,
round(t.BUFFER_GETS / t.EXECUTIONS) AS perBufferReads,
t.ELAPSED_TIME,
round(t.ELAPSED_TIME / t.EXECUTIONS) AS perElayTime,
t.CPU_TIME,
round(t.CPU_TIME / t.EXECUTIONS) AS perCpuTime,
t.FIRST_LOAD_TIME,
t.SQL_TEXT
FROM v$sql t
WHERE (t.DISK_READS / t.EXECUTIONS > 500 OR
t.BUFFER_GETS / t.EXECUTIONS > 20000)
AND t.EXECUTIONS > 0
ORDER BY 6 DESC;
查看低效率的SQL语句
SELECT EXECUTIONS,
DISK_READS,
BUFFER_GETS,
ROUND((BUFFER_GETS – DISK_READS) / BUFFER_GETS, 2) Hit_radio,
ROUND(DISK_READS / EXECUTIONS, 2) Reads_per_run,
SQL_TEXT
FROM  V$SQLAREA
WHERE EXECUTIONS > 0
AND  BUFFER_GETS > 0
AND (BUFFER_GETS – DISK_READS) / BUFFER_GETS < 0.8    ORDER BY EXECUTIONS DESC 或者 select executions exec, loads loads, parse_calls parse, disk_reads reads, buffer_gets gets, rows_processed rows_proc, sorts sorts, sql_text from v$sqlarea order by &sortkey desc; 找出oracle中从没有使用的索引 set pages 999; set heading off; spool run_monitor.sql select ‘alter index ‘||owner||’.’||index_name||’ monitoring usage;’ from dba_indexes where owner not in (‘SYS’,’SYSTEM’,’PERFSTAT’) spool off; @run_monitor 等待一段时间直到在数据库上运行了足够多的SQL语句以后,然后你就可以查询新的V$OBJECT_USAGE视图。 Select index_name,table_name,mon,used from v$object_usage; 在V$OBJECT_USAGE有一列被称作USED,它的值是YES或者NO。不幸的是,它不会告诉你Oracle使用了这个索引多少次,但是这个工具对于找出没有使用的索引还是很有用的。 自己编写的脚本 select c.SID,c.STATUS,s.NAME,b.VALUE from v$statname s, v$sesstat b, v$session c where s.STATISTIC# = b.STATISTIC# and b.SID = c.SID and b.sid=&sid and s.NAME in (‘consistent gets’,’physical reads’,’parse count (total)’,’parse count (hard)’) V$sql:查询一条sql执行时间及消耗的cpu时间,被执行及被分析的次数 Parse_calls, Executions Cpu_time, Elapsed_time Alter system flush shared_pool 清空共享池

(转)FLASH 卡的寿命问题

FLASH 卡的寿命问题
l  可用性
•         本身自保护:存储模块之间有类似Raid5+hotspare保护,如果有有存储模块损坏,hotspare进行顶替。如果再坏一个模块,整块卡会置成readonly,将卡保护起来。并且所有过程都有日志输出,我们可以监控起来。
•         擦写次数:MLC类型,每个block 10000次擦写。数据修改,是将需要修改的block的数据先读取到内存中,修改完成后,通过一个均衡算法,将数据写回到写入寿命相对较小的block。所以不会存在某些block损坏的情况,要坏是整个卡同时坏。
按照这个算法,一块400G的flash卡,需要写入400*10000G,即4PB数据才会整体写坏。我们测算过,按照淘宝双11一天的写入量,每天都这样写入,要写7年时间。淘宝用了5年这款产品,从来没有出现自然寿命损坏的问题。
•         稳定性:受PC服务器影响,稳定性

(转张乐奕)深入内核:从Oracle ASM自动备份头块到ASMFD

深入内核:从Oracle ASM自动备份头块到ASMFD

 

在 Oracle 10.2.0.5 之前,ASM 磁盘的头块并没有自己的备份,因此一旦头块损坏,如果没有以前 kfed read 备份出来的信息,也就没有办法使用 kfed merge来作头块恢复,特别是如果一个磁盘组中所有的磁盘头块都出现问题(比如被人为地创建了 PV ),恢复 ASM 磁盘头块的操作就会非常麻烦。

但是从 Oracle 10.2.0.5 之后,ASM 磁盘的头块会自动备份在另外一个块中,这实际上是 Oracle 11g 出现的功能,不过经过测试,在 Oracle 10.2.0.5 版本中,这个备份也是存在的

正是因为存在这个备份,所以 Oracle 10.2.0.5 之后的 kfed 程序才有了新的 repair 命令,该命令将备份块直接覆盖到磁盘头块,完成修复工作。

在 Oracle 10.2.0.4 中,如果尝试执行 kfed repair ,则会报错说命令行参数不正确,此报错说明并不存在 repair 命令:

但是在 Oracle 10.2.0.5 中,执行 kfed repair ,则会说无法打开文件空,而这正说明 repair 命令是存在的,报错是因为还需要明确指定要修复哪块磁盘:

那么这个备份块具体存在哪里呢?在 Solaris 下的测试,我们使用truss来进行跟踪。

在 trace 文件中,找到下面这段,可以明确地看到 kfed 程序从第 510 个块中读出 4096 字节,然后再写回到第 0 个块中。

同样如果是在 Linux 下用裸设备作为 ASM 磁盘,并且用 strace 进行 repair 命令的跟踪,也可以得到类似结果。

那么通过 kfed 命令再来验证一下这两个块是否都标志为头块。验证结果表示块类型都为 DISKHEAD 。

那么下一个疑问是,在 11gR2 以后,ASM 磁盘组的 AU Size 可以指定不同的大小,是不是不同的 AU Size 下的磁盘头块备份都是在第 510个 块呢?还是用  truss 来跟踪一下,这里的 vdisk3 属于一个 AU Size=8M 的磁盘组,此时repair命令需要明确指定 aus,否则会报 KFED-00320 错误。

在 trace 文件中,可以发现已经不再是去读第 510 个块,而是改为读第 4094 个块。

用 kfed 验证第 4094 个块,确实标志为 DISKHEAD。

那么也就是 AU 1M 的磁盘组头块备份在第 510 个块上,而 AU 8M 的磁盘组头块备份在第 4094 个块上,备份块的存储位置有规律吗?有的,始终保存在第   2个AU 的倒数第 2 个块上。下面来验证这个观点。

对于默认的磁盘组, AU Size=1M ,每个 AU 中可以存储 256 个块,块号为  0-255 。第 1 个 AU 存储 256 个块,第 2 个 AU 最后 1 个块号为 255,倒数第 2 个块号是 254,也就是整体的第 510 个块(从第 1 个 AU 的第 1 个块往后算起)。

对于 AU Size=8M 的磁盘组,每个 AU 可以存储 2048 个块,块号为 0-2047 。第 1 个 AU 存储 2048 个块,第 2 个 AU 最后 1 个块号为 2047 ,倒数第 2 个块号是 2046 ,也就是整体的第 4094 个块(从第 1 个 AU 的第 1 个块往后算起)。

对于其它 AU Size 磁盘组的验证,看到文章的朋友有兴趣可以自己做一下。

结论

从 Oracle 10.2.0.5 开始, ASM 磁盘已经开始自动将头块进行备份,备份块的位置在第 2 个 AU 的倒数第 2 个块上(对于默认 1M 的 AU 来说,是第 510 个块),如果头块损坏,可以用 kfed repair 命令来修复。因此对于选用 ASM 存储作为生产环境的用户来说,尽快升级到 10.2.0.5 是明智的选择。

在 Oracle 12c 中,Oracle更是推出了 ASMFD 新特性,防止ASM磁盘收到意外的伤害,具体请参考文章:Oracle 12c ASM 防火防盗新特性揭秘 。

 

在明和电子 新三板上市启动仪式上的讲话

在明和电子 新三板上市启动仪式上的讲话

明和  梁芝刚  2016年1月18日

尊敬的各位来宾、女士们、先生们、朋友们,

大家上午好!

很高兴和大家相聚于 杭州,参加 杭州明和新三板启动仪式。在此,我谨代表明和公司,向 明和公司同事和提供优质服务的券商、律师、会计师 表示诚挚的谢意!

我是2003年4月 开这个 明和电子公司,04年7月 开始研发 NETPRO备份产品,一直做到了现在 呵呵,开公司10多年的艰难困苦无以言表,10年开始算是相对顺利一些了,在 明和人的艰苦努力浴血奋战下 把 NETPRO容灾备份产品从2010年100多万 一直做到2015年 2000万,在浙江省也算是有一定知名度  国产自有品牌销售额排名第二 ,也算是做了 一点点微小微小的成绩;但是这是远远远远不够的!!!

我的大学同学说我比较有韧性 , 认准一个方向就会坚持不懈地做下去 。而我觉得我们的时间是最最宝贵的 所以要不断聚焦 ,我们做企业的人都是跟时间在赛跑 , 所以要认清自己的优势劣势 然后不断聚焦 不断打磨产品 ,坚持不懈的人 与 半途而废的人 , 1-2年时间是看不到区别 ,但是 5年后 区别就会很大 。

LOSER (美国人叫 LOSER )  ,总是归结为 自己的运气不够好  命相不够好,其实这个都是给自己的借口 。 而赢家(WINNER ) ,就是在正确的方向上不断思考不断努力不断坚持的结果 。我是从信雅达做研发出来的,在技术产品方向(眼光)上,我还是很自信的 。我们公司目前是 3个产品线 ( NETPRO容灾备份,MAXData 数据库一体机,超融合计算还在梦想中)和 1个服务 (ORACLE服务),市场空间足够支撑我们做到 几个亿到10个亿的销售额 。

2016年,随着我们 3000万融资的顺利进行 ,我们会拓展到 北京,辽宁,山东 , 上海,江苏 ( 代国超 ),安徽 ,江西 ,福建 ,广东,广西 ,云南,贵州,四川 ,到中国最美丽的地方去。我们的计划是,在浙江省 我们会招聘 3个销售小分队 ( 每个小分队完成 1500- 2000万销售额),在外省 每个省 1-2个大销售 ,每2个邻近省份   高级售前工程师 。

胡雪岩说过 ”做生意关键是你的眼光,你的眼光看到一个省,你做一个省的生意,你的眼光看到全中国,你做的是全中国的生意,你的眼光看到全世界,你就有机会做全世界的生意,你的眼光看到今天,你做今天的生意,你的眼光看到3年以后,你就做3年以后的生意。“  这是我们学习的榜样  。我们第一步先要做 12个省份的生意,16年目标是外省做到不亏钱 赚1分钱,呵呵。。。。。

最后,以毛主席的诗句作为结尾  “ 红军不怕远征难,万水千山若等闲;更喜岷山千里雪,三军过后尽开颜。“  新三板上市启动是新征程的开始,16年我们要大踏步地走向 12个省份 要完成 6000万的生意 ,17年我们要走向全国  ,以后还要把 产品卖到香港 新加坡 世界各地去 ,梦想是要有的,否则人活着跟咸鱼有什么分别呢?

 

Ceph 源代码目录结构详解(转载自:6沙鱼的博客)

从GitHub上Clone的Ceph项目,其目录下主要文件夹和文件的内容为: 
1 根目录 
[src]:各功能某块的源代码 
[qa]:各个模块的功能测试(测试脚本和测试代码) 
[wireshark]:#wireshark的ceph插件。 
[admin]:管理工具,用于架设文档服务器等 
[debian]:用于制作debian(Ubuntu)安装包的相关脚本和文件

[doc]:用于生成项目文档,生成结果参考http://ceph.com/docs/master/ 
[man]:ceph各命令行工具的man文件 
configure.ac:用于生成configure的脚本 
Makefile.am:用于生成Makefile的脚本 
autogen.sh:负责生成configure。 
do_autogen.sh:生成configure的脚本,实际上通过调用autogen.sh实现 
ceph.spec.in:RPM包制作文件

2 src目录

[include]:头文件,包含各种基本类型的定义,简单通用功能等。 
[common]:共有模块,包含各类共有机制的实现,例如线程池、管理端口、节流阀等。 
[log]:日志模块,主要负责记录本地log信息(默认/var/log/ceph/目录) 
[global]:全局模块,主要是声明和初始化各类全局变量(全局上下文)、构建驻留进程、信号处理等。 
[auth]:授权模块,实现了三方认知机制。 
[crush]:Crush模块,Ceph的数据分布算法 
[msg]:消息通讯模块,包括用于定义通讯功能的抽象类Messenger以及目前的实现SimpleMessager 
[messages]:消息模块,定义了Ceph各节点之间消息通讯中用到的消息类型。 
[os]:对象(Object Store)模块,用于实现本地的对象存储功能, 
[osdc]:OSD客户端(OSD Client),封装了各类访问OSD的方法。 
[mon]:mon模块 
[osd]:osd部分 
[mds]:mds模块 
[rgw]:rgw模块的 
[librados]:rados库模块的代码 
[librdb]:libbd库模块的代码 
[client]:client模块,实现了用户态的CephFS客户端 
[mount]:mount模块 
[tools]:各类工具 
[test]:单元测试 
[perfglue]:与性能优化相关的源代码 
[json_spirit]:外部项目json_spirit 
[leveldb]:外部项目leveldb from google 
[gtest]:gtest单元测试框架 
[doc]:关于代码的一些说明文档 
[bash_completion]:部分bash脚本的实现 
[pybind]:python的包装器 
[script]:各种python脚本 
[upstart]:各种配置文件

ceph_mds.cc:驻留程序mds 
ceph_mon.cc:驻留程序mon 
ceph_osd.cc:驻留程序osd 
libcephfs.cc:cephfs库 
librdb.cc:rdb库 
ceph_authtool.cc:工具ceph_authtool 
ceph_conf.cc:工具ceph_conf 
ceph_fuse.cc:工具ceph_fuse 
ceph_syn.cc:工具ceph_syn 
cephfs.cc:工具cephfs 
crushtool.cc:工具crushtool 
dupstore.cc:工具dupstore 
librados-config.cc:rados库配置工具 
monmaptool.cc:工具monmap 
osdmaptool.cc:工具osdmap 
psim.cc:工具psim 
rados.cc:工具rados 
rdb.cc:工具rdb 
rados_export.cc:rados工具相关类 
rados_import.cc:rados工具相关类 
rados_sync.cc:rados工具相关类 
rados_sync.h:rados工具相关类 
sample.ceph.conf:配置文件样例 
ceph.conf.twoosds:配置文件样例 
Makefile.am:makefile的源文件 
valgrind.supp:内存检查工具valgrind的配置文件 
init-ceph.in:启动和停止ceph的脚本 
mkcephfs.in:cephfs部署脚本