linux eth / ifconfig / network 查看网卡个数及速度

 # lspci | grep Ethernet
03:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5708 Gigabit Ethernet (rev 12)
07:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5708 Gigabit Ethernet (rev 12)

# dmesg |grep eth0 divert: allocating divert_blk for eth0 eth0: RealTek RTL8139 at 0xd800, 00:80:48:34:c2:84, IRQ 9 eth0: Identified 8139 chip type 'RTL-8100B/8139D' divert: freeing divert_blk for eth0 divert: allocating divert_blk for eth0 eth0: RealTek RTL8139 at 0xd800, 00:90:44:34:a5:33, IRQ 9 eth0: Identified 8139 chip type 'RTL-8100B/8139D' eth0: link up, 100Mbps, full-duplex, lpa 0x41E1 eth0: no IPv6 routers present ...
# mii-tool -v eth0
eth0: negotiated 100baseTx-FD, link ok
product info: vendor 00:00:00, model 0 rev 0
basic mode:   autonegotiation enabled
basic status: autonegotiation complete, link ok
capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD
            10baseT-HD
...

# ethtool eth0

Settings for eth0:
 Supported ports: [ TP MII ]
 Supported link modes:   10baseT/Half 10baseT/Full
                         100baseT/Half 100baseT/Full
 Supports auto-negotiation: Yes
 Advertised link modes:  10baseT/Half 10baseT/Full
                         100baseT/Half 100baseT/Full
 Advertised auto-negotiation: Yes
 Speed: 100Mb/s
 Duplex: Full
 Port: MII
 PHYAD: 32
 Transceiver: internal
 Auto-negotiation: on
 Supports Wake-on: pumbg
 Wake-on: p
 Current message level: 0x00000007 (7)
 Link detected: yes
#端口流量监控
yum install iptraf-ng
#网络接口流量监控
yum intall iftop
..
发表在 linux | linux eth / ifconfig / network 查看网卡个数及速度已关闭评论

文件系统介绍

简介

该篇blog只是存储系列科普文章中的第二篇,所有文章请参考:

在工程架构领域里,存储是一个非常重要的方向,这个方向从底至上,我分成了如下几个层次来介绍:

  1. 硬件层:讲解磁盘,SSD,SAS, NAS, RAID等硬件层的基本原理,以及其为操作系统提供的存储界面;
  2. 操作系统层:即文件系统,操作系统如何将各个硬件管理并对上提供更高层次接口;
  3. 单机引擎层:常见存储系统对应单机引擎原理大概介绍,利用文件系统接口提供更高级别的存储系统接口;
  4. 分布式层:如何将多个单机引擎组合成一个分布式存储系统;
  5. 查询层:用户典型的查询语义表达以及解析;

文件系统磁盘分配

在存储知识栈上提到文件系统, 大家首先就关心他是如何管理好硬件层提供的磁盘空间的。

本文开篇就先描述典型的几种文件系统管理磁盘的技术方案: 连续分配, 链式分配, 索引分配。

连续分配

顾名思义, 就是创建文件的时候, 给分配一组连续的块。在单独拿出一块地方存储各个文件的meta信息, meta信息也很简单, 包含文件名, 起始位置和长度即可, 这个存放meta信息的地方也叫做FAT(文档分配表)。

如下图:

该方案的优点:

  1. 简便, 适用于一次性写入操作;
  2. 所需磁盘寻道次数和寻道时间最少;

缺点也很明显:

  1. 文件不能动态增长, 因为后面的块可能已经分配给别人了;
  2. 不利于文件的插入和删除, 插入文件之前需要声明文件大小;
  3. 外部碎片问题;

为了克服连续分配的问题, 又进化出来了链式分配方案。

链式分配

链式分配即将文件块像链表一样管理起来, 每个块中放一个指针, 指针指向下一个文件块所在的位置。这样在FAT中存储也很简单, 只需要存储文件名, 起始块号和结束块号(都可以不存)。

如下图:

该方案的优点:

  1. 提高磁盘利用率, 没有碎片问题
  2. 有利于文件的插入, 删除

缺点:

  1. 存取速度慢, 需要移动的磁道次数多, 寻道时间长;
  2. 读写任何一个地方都需要沿着指针前进直到找到对应块为止;
  3. 链接占据了一定的磁盘空间, 数据不是严格按照块大小分配;

索引分配

这是一个折衷方案, 也是现在大部分文件系统采用的方案, 他综合了连续分配和链式分配的好处。

该方案会在FAT中保存所有文件块的位置, 各文件系统都有一套自己对应的细节分配策略, 会保证一个文件尽量连续的同时, 又避免出现大量的磁盘碎片。

如下图:

该方案的优点是:

  1. 能够保持好大部分文件的局部性
  2. 满足文件插入, 删除的高效
  3. 随机读写不需要沿着指针前进

缺点:

  1. 会有较多的磁盘寻道次数
  2. 索引表本身管理复杂, 也会带来额外的系统开销

ext文件系统

基本概念

  1. 块. 即Block, 数据存储的最小单元, 每个块都有一个唯一的地址, 从0开始, 起源于第一个可以用来存储数据的扇区;
  2. 超级块. 超级块保存了各种文件系统的meta信息, 比如块大小信息。他位于文件系统的2号和3号扇区(物理地址), 占用两个扇区大小;
  3. 块组. 所有的块会划分成多个块组, 每个块组包含同样多个块, 但是可能整个文件系统整个块数不是块组的整数倍, 所以最后一个块组包含的个数可能会小于其他块;

总体结构

一个ext文件系统分成多个块组, 每个块组的结构基本相同, 如下:

解释如下:

  1. 0~1号扇区: 引导扇区. 如果没有引导代码, 则这两个扇区为空, 全部用0填充;
  2. 2~3号扇区: 超级块, 超级块包含各种meta信息:
    1. 块大小, 每个块组包含块数, 总块数, 第一个块前保留块数, inode节点数, 每个块组的inode节点数
    2. 卷名, 最后挂载时间, 挂载路径, 文件系统是否干净, 是否要调用一致性检查标识
    3. 空间inode节点和空闲块的记录信息, 在分配inode节点和新块的时候使用
  3. 组描述符表:

    位于超级块后面的一个块, 注意在超级块之前只占用了4个扇区, 如果一个块大小超过4个扇区的话, 这里就会有空的扇区。

    组描述符表中包含了所有块组的描述信息, 每个块组占据32个字节(差不多是8个整数的大小)。如果格式化使用默认参数, 那么组描述符表不会超过一块块组。

    组描述符和超级块在每个块组中都有一个备份, 但是激活了稀疏超级块特征的情况除外。

    稀疏超级块即不是在所有块组中都存储超级块和组描述符的备份, 默认该策略被激活, 其策略类似当块组号是3,5,7的幂的块组才存副本。

  4. 块位图表

    每个块对应一个bit, 只包含了本块组的信息。而文件系统创建的时候, 默认每个块组包含的块数跟每个块包含的bit数是一样的, 这种情况下每个块位图表正好等于一个块的大小。

    而该位图表的块的起始位置会在组描述符表中指定, 大小则为块组中包含块数个bit。

  5. inode位图块

    跟块位图表类似, 通常情况他也只占用一个块。通常一个块组中的inode节点数会小于block数量, 所以其不会超过一个块大小。

  6. inode节点表

    每个inode都占用128位的一个描述信息, 起始位置在组描述符中表示, 大小为inode节点数*128。

  7. 数据区

    这就是真正存储数据的区域。

块大小为4096的时候, 各部分和扇区对应关系如下图:

块大小为2048的时候, 各部分和扇区对应关系如下图:

超级块详细信息

超级块总是位于文件系统的第1024~2048字节处。

超级块中包含的信息如下:

偏移(16进制) 字节数 含义&解释
00~03 4 文件系统中总inode节点数
04~07 4 文件系统中总块数
08~0B 4 为文件系统预保留的块数
0C~0F 4 空闲块数
10~13 4 空间inode节点数
14~17 4 0号块组起始块号
18~1B 4 块大小(1024左移位数)
1C~1F 4 片段大小, 跟块大小一模一样
20~23 4 每个块组中包含的块数量
24~27 4 每个块组中包含的片段数量, 跟包含的快数量一致
28~2B 4 每个块组中包含的inode节点数量
2C~2F 4 文件系统最后挂载时间
30~33 4 文件系统最后写入时间
34~35 2 当前挂载数
36~37 2 最大挂载数
38~39 2 文件系统签名标识 53EF
3A~3B 2 文件系统状态, 正常, 错误, 恢复了孤立的inode节点
3C~3D 2 错误处理方式, 继续, 以只读方式挂载
3E~3F 2 辅版本号
40~43 4 最后进行一致性检查的时间
44~47 4 一致性检查的间隔时间
48~4B 4 创建本文件系统的操作系统
4C~4F 4 主版本号, 只有该值为1的时候, 偏移54之后的扩展超级块的一些动态属性值才是有意义的
50~51 2 默认为UID的保留块
52~53 2 默认为GID的保留块
54~57 2 第一个非保留的inode节点号, 即用户可以使用的第一个inode节点号
58~59 2 每个inode节点的大小字节数
5A~5B 2 本超级块所在的块组号
5C~5F 4 兼容标识特征
60~63 4 非兼容标识特征
64~67 4 只读兼容特征标识
68~77 16 文件系统ID号
78~87 16 卷名
88~C7 64 最后的挂载路径
C8~CB 4 位图使用的运算法则
CC~CC 1 文件再分配的块数
CD~CD 1 目录再分配的块数
CE~CF 2 未使用
D0~DF 16 日志ID
E0~E3 4 日志inode节点
E4~E7 4 日志设备
E8~EB 4 孤立的inode节点表
EC~3FF 788 未使用

块组描述符详细信息

每个块组描述符占用32个字节, 其数据结构如下:

偏移(16进制) 字节数 含义&解释
00~03 4 块位图起始地址(块号)
04~07 4 inode节点位图起始地址(块号)
08~0B 4 inode节点表起始地址(块号)
0C~0D 2 块组中空闲块数
0E~0F 2 块组中空闲inode节点数
10~11 2 块组中的目录数
12~1F - 未使用

inode信息

每个inode会被分配给一个目录或者一个文件, 每个inode包含了128个字节, 里面包含了这个文件的各种meta信息。

在所有inode中, 1~10号会用作保留给内核使用, 在这些保留节点中, 2号节点用于存储根目录信息, 1号表示坏块, 8号表示日志文件信息。

第一个用户可见的都是从11号inode开始, 11号节点一般用作lost+found目录, 当检查程序发现一个inode节点已经被分配, 但是没有文件名指向他的时候, 就会把他添加到lost+found目录中并赋予一个新的文件名。

inode通过三级指针的方式来找到文件数据最终存储的数据块, 见下图:

这种方式能保证小文件的读取效率的同时, 也支持大文件的读取。

目录项

在ext文件系统中, 每个目录也对应一个inode节点, 该inode节点对应的数据块里面会存储该目录下所有文件/目录的信息。

每个文件/目录对应的信息就叫目录项, 目录项包含的内容也很简单, 主要就是文件名和指向该文件名的inode指针, 详细信息如下:

偏移(16进制) 字节数 含义&解释
00~03 4 inode节点号
04~05 2 本目录项的长度字节数
06~06 1 名字长度字节数
07~07 1 文件类型
08~ 不定长度 名字的ascii码

当文件删除的时候, 不会真正删除文件, 会将该文件所属目录对应的目录项给删除, 同时将对应数据块在快位图表中标记为0。

链接

  1. 硬链接是指在另外一个目录对应的目录项中增加一个目录项。硬链接建立之后, 用户无法通过文件名来判断到底哪个是原文件名, 哪个是链接名;
  2. 软连接是一种文件类型, 该文件里面就存储源文件的完整路径, 如果源文件完整路径长度小于60个字节, 那么就将该值直接存储在inode节点表中, 避免浪费数据块;

分配策略

  1. 首先判断应该在哪个块组中分配
    1. 如果是为文件创建节点
      1. 默认会在其父目录所在的组中为其创建节点, 这样可以确保一个目录中所有文件都位于一个大致的区域中
      2. 如果父目录所在组没有空闲的节点或者空闲的块了, 就到别的块组中为该文件分配节点, 找寻别的块组的算法如下
        1. 每次讲当前组号加上2^N次方再求hash
        2. 如果上面的算法没找到, 就线性查找
    2. 如果是为目录创建节点
      1. 会将其分配到可用空间较多的块组中, 分配算法如下:
        1. 首先利用超级块中的剩余inode和剩余块数字算出每个块组的平均剩余数字, 然后依次找到一个大于平均值的块组
        2. 如果没找到, 就利用块组描述符表中的信息, 找到一个最空闲的块组
  2. 当一个数据块分配给某文件之后
    1. 该块原来的内容会被请出, inode节点对应的各种元信息会跟着做修改
    2. 如果是文件, 节点对应链接数会设置为1, 如果是目录, 链接数会被设置为2

实际创建/删除文件过程

我们创建一个/xuanku/file.txt, 该文件大小为10000字节, 文件块大小为4096, 那么下面来看一下过程:

  1. 读取文件系统的1024字节~2048字节, 即超级块信息。通过超级块得到快大小为4096, 每个块组含有8192个块以及2008个inode节点
  2. 读取文件系统中第1个块(即组描述符表), 得到所有块组布局信息
  3. 访问2号inode节点(即根节点), 通过读取根节点数据块信息, 假设读到其位于5号块
  4. 在第5号块所有目录项中从前往后遍历, 直到找到文件名为xuanku的目录项, 读到该inode节点为4724
  5. 每个块组有2008个inode, 用4724针对2008取模, 得到的结果是2号块组
  6. 通过组描述符表中得到第2个块组的inode节点表起始于16378号块
  7. 从16378号块读取inode节点表中查找4724号对应的inode节点(708号表项), 查询到该xuanku的目录内容位于17216号块
  8. 从17216块读取xuanku目录项内容, 将file.txt相关信息更新到该块的目录项当中
  9. 然后开始为文件分配inode节点, 默认会放到父目录所在块组, 即2号块组, 再次2号块组的inode节点表16378, 开始从4724往后找到第一个可用的inode节点分配给该文件, 假设找到的是4850号inode。
  10. 然后就给4850号的inode位图表设置为1, 组描述符的空闲inode节点数和超级块的总空闲inode节点数都减1, 将inode节点的地址写入file.txt对应的目录项当中, 然后写各种时间, 记录日志
  11. file.txt需要3个块的存储空间, 通过2号块组描述符找到块位图对应的块, 并从前往后找到可用的块。然后将对应的位设置为1, 并更新到inode节点当中
  12. 然后将文件的内容写入到对应的块中

下面再演示一下将该文件删除的过程:

  1. 读取文件系统的1024字节~2048字节, 即超级块信息。通过超级块得到快大小为4096, 每个块组含有8192个块以及2008个inode节点
  2. 读取文件系统中第1个块(即组描述符表), 得到所有块组布局信息
  3. 访问2号inode节点(即根节点), 通过读取根节点数据块信息, 假设读到其位于5号块
  4. 在第5号块所有目录项中从前往后遍历, 直到找到文件名为xuanku的目录项, 读到该inode节点为4724
  5. 每个块组有2008个inode, 用4724针对2008取模, 得到的结果是2号块组
  6. 通过组描述符表中得到第2个块组的inode节点表起始于16378号块
  7. 从16378号块读取inode节点表中查找4724号对应的inode节点(708号表项), 查询到该xuanku的目录内容位于17216号块
  8. 从17216块读取xuanku目录项内容, 读到file.txt的inode节点为4850
  9. 然后取消file.txt的目录项分配, 修改系列xuanku目录对应的目录项信息
  10. 取消inode节点信息, 修改2号块组对应的inode节点表信息, 将inode节点位设置为0, 更新块组描述符和超级块的空闲inode节点数加1
  11. 还要回收文件内容对应的6个块空间, 将块位图表中的bit设置为0, 清除inode节点的块指针, 更新块组描述符和超级块的空闲块数加1

参考

  1. 数据重新 文件系统原理精解与数据恢复最佳实践
  2. 磁盘分配方式. http://blog.csdn.net/liuqiyao_01/article/details/39156651
  3. ext在线调整大小. http://www.ibm.com/developerworks/cn/linux/l-cn-ext4resize/
..
发表在 linux | 文件系统介绍已关闭评论

密码保护:区块链:互联网新定义

此内容受密码保护。如需查阅,请在下列字段中输入您的密码。

发表在 block chain | 密码保护:区块链:互联网新定义已关闭评论

密码保护:比特币-挖矿

此内容受密码保护。如需查阅,请在下列字段中输入您的密码。

发表在 block chain | 密码保护:比特币-挖矿已关闭评论

密码保护:token 与 区块链

此内容受密码保护。如需查阅,请在下列字段中输入您的密码。

发表在 block chain | 密码保护:token 与 区块链已关闭评论

密码保护:区块链-积分产品

此内容受密码保护。如需查阅,请在下列字段中输入您的密码。

发表在 block chain | 密码保护:区块链-积分产品已关闭评论

密码保护:区块链-供应链金融产品

此内容受密码保护。如需查阅,请在下列字段中输入您的密码。

发表在 block chain | 密码保护:区块链-供应链金融产品已关闭评论

密码保护:区块链也并非万能药

此内容受密码保护。如需查阅,请在下列字段中输入您的密码。

发表在 block chain | 密码保护:区块链也并非万能药已关闭评论

密码保护:供应链金融的三个痛点

此内容受密码保护。如需查阅,请在下列字段中输入您的密码。

发表在 block chain | 密码保护:供应链金融的三个痛点已关闭评论

密码保护:区块链应用一例 block chain

此内容受密码保护。如需查阅,请在下列字段中输入您的密码。

发表在 block chain | 密码保护:区块链应用一例 block chain已关闭评论

virtio_net question

目标拓扑如下:

主机上tap0和eth1通过br0桥接在一起,tap0对应虚拟机的eth0。HOST上的br0配置地址192.168.1.2/24作为主机地址,虚拟机的eth0配置地址为192.168.1.5/24

虚拟机的启动命令如下:
qemu-system-aarch64 -machine virt -cpu cortex-a57 -nographic -smp 1 -m 4096 \
-global virtio-blk-device.scsi=off -device virtio-scsi-device,id=scsi \
-drive file=ubuntu-core-14.04.1-core-arm64.img,id=coreimg,cache=unsafe,if=none -device scsi-hd,drive=coreimg \
-kernel  vmlinuz-3.13.0-55-generic \
-initrd  initrd.img-3.13.0-55-generic  \
-netdev tap,id=mynet -device virtio-net-device,netdev=mynet \
--append "console=ttyAMA0 root=/dev/sda"

启动后在虚拟机里面可以看到eth0网卡,驱动位virtio_net

从虚拟机ping物理机,发现无法ping同

在虚拟机里面抓包,发现ARP请求没有收到响应

但是从物理机TAP0上抓包,发现物理机已经收到ARP请求,并且回应了报文

问题就是TAP0上有了ARP的回应报文,虚拟机的eth0口竟然没有ARP的回应报文,请问大侠们,我的配置是否有错?或启动命令是否有错?TAP0都收到响应报文了,为什么虚拟机eth0竟然没有,丢在哪里了?

【问题已经解决】
必须在使能VHOST的情况下,才可以进行正常的网络通信
vhost=on

 

 

 

..

 

发表在 virtual machine | virtio_net question已关闭评论

CDN provider

市面上有很多CDN供应商,常见的有:

Akamai (全球最大)
webluker
cloudflare
chinacache(蓝汛)
网宿CDN
帝联CDN
阿里CDN(web cache server 叫swift)
腾讯CDN

 

 

 

 

发表在 web server | CDN provider已关闭评论

HTTP Cache

头部

缓存控制头部:

  1. Last-Modified:表示文档的最后修改时间,当去服务器验证时会拿这个时间去;
  2. Expires:http/1.0规范定义,表示文档在浏览器中的过期时间,当缓存的内容超过这个时间则需要重新去服务器获取最新的内容;
  3. Cache-Control:http/1.1规范定义,表示浏览器缓存控制,max-age=3153600表示文档可以在浏览器中缓存一年。
  4. ETag:发送到服务端进行内容变更验证的,而Catch-Control是用于控制缓存时间的(浏览器、代理层等)。此处我们使用了弱实体W\”6124c”,弱实体(”6124c”)只要内容语义没变即可,比如内容的gzip版和非gzip版可以使用弱实体验证;而强实体指字节必须完全一致(gzip和非gzip情况是不一样的),因此建议首先选择使用弱实体。nginx在生成etag时使用的算法是Last-Modified + Content-Length计算的。

根据规范定义Cache-Control优先级高于Expires,实际使用时可以两个都用,或仅使用Cache-Control就可以了。一般情况下Expires=当前系统时间(Date) + 缓存时间(Cache-Control: max-age)。

请求一个已浏览器过的请求时,头部变化:

1. Modified-Since请求头,其值是上次请求响应中的Last-Modified,即浏览器会拿这个时间去服务端验证内容是否发生了变更。
2. If-None-Match请求头,其值是上次请求响应中的ETag,即浏览器会拿这个时间去服务端验证内容是否发生了变更。

Last-Modified与ETag同时使用时,浏览器在验证时会同时发送If-Modified-Since和If-None-Match,按照http/1.1规范,如果同时使用If-Modified-Since和If-None-Match则服务端必须两个都验证通过后才能返回304;且nginx就是这样做的。因此实际使用时应该根据实际情况选择。

当我们按下cmd-F5强制刷新后:
浏览器在请求时不会带上If-Modified-Since,并带上Cache-Control:no-cache和Pragma:no-cache,这是为了告诉服务端说我请给我一份最新的内容。

相关状态码

  1. 304 Not Modified
    304表示服务器返回文档没有过期
  1. 200 (from cache)
    200 (from cache) 表示浏览器直接使用缓存数据

总结

  1. Last-Modified/Modified-Since 用于验证文档内容是否变更
  2. max-age/Expires 定义文档缓存时间,如在有效期内会返回 200(from cache)

 

 

 

 

发表在 web server | HTTP Cache已关闭评论

ceph – Ceph 管理工具

ceph – Ceph 管理工具

提纲

ceph auth [ add | caps | del | export | get | get-key | get-or-create | get-or-create-key | import | list | print-key | print_key ] ...
ceph compact
ceph config-key [ del | exists | get | list | put ] ...
ceph daemon <name> | <path> <command> ...
ceph daemonperf <name> | <path> [ interval [ count ] ]
ceph df {detail}
ceph fs [ ls | new | reset | rm ] ...
ceph fsid
ceph health {detail}
ceph heap [ dump | start_profiler | stop_profiler | release | stats ] ...
ceph injectargs <injectedargs> [ <injectedargs>... ]
ceph log <logtext> [ <logtext>... ]
ceph mds [ add_data_pool | cluster_down | cluster_up | compat | deactivate | dump | fail | getmap | newfs | remove_data_pool | rm | rmfailed | set | set_max_mds | set_state | setmap | stat | stop | tell ] ...
ceph mon [ add | dump | getmap | remove | stat ] ...
ceph mon_status
ceph osd [ blacklist | blocked-by | create | deep-scrub | df | down | dump | erasure-code-profile | find | getcrushmap | getmap | getmaxosd | in | lspools | map | metadata | out | pause | perf | pg-temp | primary-affinity | primary-temp | repair | reweight | reweight-by-pg | rm | scrub | set | setcrushmap | setmaxosd | stat | thrash | tree | unpause | unset ] ...
ceph osd crush [ add | add-bucket | create-or-move | dump | get-tunable | link | move | remove | rename-bucket | reweight | reweight-all | reweight-subtree | rm | rule | set | set-tunable | show-tunables | tunables | unlink ] ...
ceph osd pool [ create | delete | get | get-quota | ls | mksnap | rename | rmsnap | set | set-quota | stats ] ...
ceph osd tier [ add | add-cache | cache-mode | remove | remove-overlay | set-overlay ] ...
ceph pg [ debug | deep-scrub | dump | dump_json | dump_pools_json | dump_stuck | force_create_pg | getmap | ls | ls-by-osd | ls-by-pool | ls-by-primary | map | repair | scrub | set_full_ratio | set_nearfull_ratio | stat ] ...
ceph quorum [ enter | exit ]
ceph quorum_status
ceph report { <tags> [ <tags>... ] }
ceph scrub
ceph status
ceph sync force {–yes-i-really-mean-it} {–i-know-what-i-am-doing}
ceph tell <name (type.id)> <args> [<args>...]
ceph version

描述

ceph 是个控制工具,可用于手动部署和维护 Ceph 集群。它提供的多种工具可用于部署监视器、 OSD 、归置组、 MDS 和维护、管理整个集群。

命令

auth

管理认证密钥。用于给某个具体实体(如监视器或 OSD )增加、删除、导出或更新认证密钥。还需额外加子命令。

子命令 add 用于为特定实体增加认证信息,这些信息可从文件读入,若未在命令行指定密钥(和、或此密钥的能力)将生成随机密钥。

用法:

ceph auth add <entity> {<caps> [<caps>...]}

子命令 capsname 的能力更新为命令行中指定的。

用法:

ceph auth caps <entity> <caps> [<caps>...]

子命令 del 删除 name 的所有能力。

用法:

ceph auth del <entity>

子命令 export 把指定实体写入密钥环,若未指定则写入主密钥环。

用法:

ceph auth export {<entity>}

子命令 get 把请求到的密钥写入密钥环文件。

用法:

ceph auth get <entity>

子命令 get-key 显示所请求的密钥。

用法:

ceph auth get-key <entity>

子命令 get-or-create 用于为特定实体增加认证信息,这些信息可从文件读入,若未在命令行指定密钥(和、或此密钥的能力)将生成随机密钥。

用法:

ceph auth get-or-create <entity> {<caps> [<caps>...]}

子命令 get-or-create-key 根据命令行指定的系统、能力对,为 name 获取或创建密钥。若密钥已存在,任何指定的能力必须与当前已有能力一致。

用法:

ceph auth get-or-create-key <entity> {<caps> [<caps>...]}

子命令 import 从输入文件读入密钥环。

用法:

ceph auth import

子命令 list 罗列认证状态。

用法:

ceph auth list

子命令 print-key 显示请求的密钥。

用法:

ceph auth print-key <entity>

子命令 print_key 显示请求的密钥。

用法:

ceph auth print_key <entity>

compact

让监视器压缩其 leveldb 存储。

用法:

ceph compact

config-key

管理配置密钥。需额外指定子命令。

子命令 del 用于删除配置密钥。

用法:

ceph config-key del <key>

子命令 exists 用于检查配置密钥是否存在。

用法:

ceph config-key exists <key>

子命令 get 用于获取配置密钥。

用法:

ceph config-key get <key>

子命令 list 罗列配置密钥。

用法:

ceph config-key list

子命令 put 上传配置密钥及其内容。

用法:

ceph config-key put <key> {<val>}

df

显示集群空闲空间状态。

用法:

ceph df {detail}

fs

用于管理 cephfs 文件系统,需额外加子命令。

子命令 ls 用于罗列文件系统。

用法:

ceph fs ls

子命令 new 用指定的存储池 <metadata> 和 <data> 创建新文件系统。

用法:

ceph fs new <fs_name> <metadata> <data>

子命令 reset 仅适用于灾难恢复:重置成单 MDS 运行图。

用法:

ceph fs reset <fs_name> {--yes-i-really-mean-it}

子命令 rm 用于禁用指定文件系统。

用法:

ceph fs rm <fs_name> {--yes-i-really-mean-it}

fsid

显示集群的 FSID/UUID 。

用法:

ceph fsid

health

显示集群健康状况。

用法:

ceph health {detail}

heap

显示堆栈使用信息(编译时启用了 tcmalloc 支持才可用)

用法:

ceph heap dump|start_profiler|stop_profiler|release|stats

injectargs

向监视器注入配置参数。

用法:

ceph injectargs <injected_args> [<injected_args>...]

log

把指定文本记录到监视器日志中。

用法:

ceph log <logtext> [<logtext>...]

mds

用于元数据服务器的配置和管理,需额外指定子命令。

子命令 add_data_pool 用于增加数据存储池。

用法:

ceph mds add_data_pool <pool>

子命令 cluster_down 关闭 mds 集群。

用法:

ceph mds cluster_down

子命令 cluster_up 启动 mds 集群。

用法:

ceph mds cluster_up

子命令 compat 管理兼容功能,需额外指定子命令。

子命令 rm_compat 可删除兼容功能。

用法:

ceph mds compat rm_compat <int[0-]>

子命令 rm_incompat 可删除不兼容的功能。

用法:

ceph mds compat rm_incompat <int[0-]>

子命令 show 可查看 mds 的兼容性选项。

用法:

ceph mds compat show

子命令 deactivate 可停止 mds 。

用法:

ceph mds deactivate <who>

子命令 dump 用于转储信息, epoch 号为可选。

用法:

ceph mds dump {<int[0-]>}

子命令 fail 强制把 mds 状态设置为失效。

用法:

ceph mds fail <who>

子命令 getmap 获取 MDS 图, epoch 号可选。

用法:

ceph mds getmap {<int[0-]>}

子命令 newfs 可用 <metadata> 和 <data> 存储池新建文件系统。

用法:

ceph mds newfs <int[0-]> <int[0-]> {--yes-i-really-mean-it}

子命令 remove_data_pool 用于删除数据存储池。

用法:

ceph mds remove_data_pool <pool>

子命令 rm 用于删除不活跃的 mds 。

用法:

ceph mds rm <int[0-]> <name> (type.id)>

子命令 rmfailed 用于删除失效的 mds 。

用法:

ceph mds rmfailed <int[0-]>

子命令 set 用于设置参数,把 <var> 的值设置为 <val> 。

用法:

ceph mds set max_mds|max_file_size|allow_new_snaps|inline_data <va> {<confirm>}

子命令 set_max_mds 用于设置 MDS 的最大索引号。

用法:

ceph mds set_max_mds <int[0-]>

子命令 set_state 把 mds 状态从 <gid> 改为 <numeric-state> 。

用法:

ceph mds set_state <int[0-]> <int[0-20]>

子命令 setmap 设置 mds 图,必须提供正确的 epoch 号。

用法:

ceph mds setmap <int[0-]>

子命令 stat 显示 MDS 状态。

用法:

ceph mds stat

子命令 stop 停止指定 mds 。

用法:

ceph mds stop <who>

子命令 tell 用于向某个 mds 发送命令。

用法:

ceph mds tell <who> <args> [<args>...]

mon

用于监视器的配置和管理,需额外指定子命令。

子命令 add 新增名为 <name> 的监视器,地址为 <addr> 。

用法:

ceph mon add <name> <IPaddr[:port]>

子命令 dump 转储格式化的 monmap , epoch 号可选。

用法:

ceph mon dump {<int[0-]>}

子命令 getmap 用于获取 monmap 。

用法:

ceph mon getmap {<int[0-]>}

子命令 remove 用于删除名为 <name> 的监视器。

用法:

ceph mon remove <name>

子命令 stat 汇总监视器状态。

用法:

ceph mon stat

mon_status

报告监视器状态。

用法:

ceph mon_status

osd

用于配置和管理 OSD ,需额外指定子命令。

子命令 blacklist 用于管理客户端黑名单,需额外加子命令。

子命令 add 用于把 <addr> 加入黑名单(可指定时间,从现在起 <expire> 秒)。

用法:

ceph osd blacklist add <EntityAddr> {<float[0.0-]>}

子命令 ls 列出进黑名单的客户端。

用法:

ceph osd blacklist ls

子命令 rm 从黑名单里删除 <addr> 。

用法:

ceph osd blacklist rm <EntityAddr>

子命令 blocked-by 用于罗列哪些 OSD 在阻塞互联。

用法:

ceph osd blocked-by

子命令 create 用于新建 OSD , UUID 和 ID 是可选的。

用法:

ceph osd create {<uuid>} {<id>}

子命令 crush 用于 CRUSH 管理,需额外指定子命令。

子命令 add 可用于新增或更新 <name> 的 crushmap 位置及权重,权重改为 <weight> 、位置为 <args> 。

用法:

ceph osd crush add <osdname (id|osd.id)> <float[0.0-]> <args> [<args>...]

子命令 add-bucket 可新增没有父级(可能是 root )、类型为 <type> 、名为 <name> 的 crush 桶。

用法:

ceph osd crush add-bucket <name> <type>

子命令 create-or-move 用于创建名为 <name> 、权重为 <weight> 的条目并放置到 <args> ,若已存在则移动到指定位置 <args> 。

用法:

ceph osd crush create-or-move <osdname (id|osd.id)> <float[0.0-]>
<args> [<args>...]

子命令 dump 用于转储 crush 图。

用法:

ceph osd crush dump

子命令 get-tunable 用于获取 CRUSH 可调值 straw_calc_version 。

用法:

ceph osd crush get-tunable straw_calc_version

子命令 link 用于把已存在条目 <name> 链接到 <args> 位置下。

用法:

ceph osd crush link <name> <args> [<args>...]

子命令 move 可把已有条目 <name> 移动到 <args> 位置。

用法:

ceph osd crush move <name> <args> [<args>...]

子命令 remove 把 crush 图中(任意位置,或 <ancestor> 之下的)的 <name> 删掉。

用法:

ceph osd crush remove <name> {<ancestor>}

子命令 rename-bucket 可把桶 <srcname> 重命名为 <dstname> 。

用法:

ceph osd crush rename-bucket <srcname> <dstname>

子命令 reweight 把 crush 图中 <name> 的权重改为 <weight> 。

用法:

ceph osd crush reweight <name> <float[0.0-]>

子命令 reweight-all 重新计算树的权重,以确保权重之和没算错。

用法:

ceph osd crush reweight-all

子命令 reweight-subtree 用于把 CRUSH 图内 <name> 之下的所有叶子条目的权重改为 <weight> 。

用法:

ceph osd crush reweight-subtree <name> <weight>

子命令 rm 把 crush 图中(任意位置,或 <ancestor> 之下的)的 <name> 删掉。

用法:

ceph osd crush rm <name> {<ancestor>}

子命令 rule 用于创建 crush 规则,需额外加子命令。

子命令 create-erasure 可为纠删码存储池(用 <profile> 创建的))创建名为 <name> 的 crush 规则,默认为 default 。

用法:

ceph osd crush rule create-erasure <name> {<profile>}

子命令 create-simple 创建从 <root> 开始、名为 <name> 的 crush 规则,副本将跨 <type> 类型进行散布,选择模式为 <firstn|indep> (默认 firstn ,indep 更适合纠删码存储池)。

用法:

ceph osd crush rule create-simple <name> <root> <type> {firstn|indep}

子命令 dump 转储名为 <name> 的 crush 规则,默认全部转储。

用法:

ceph osd crush rule dump {<name>}

子命令 list 罗列 crush 规则。

用法:

ceph osd crush rule list

子命令 ls 罗列 crush 规则。

用法:

ceph osd crush rule ls

子命令 rm 删除 crush 规则 <name> 。

用法:

ceph osd crush rule rm <name>

子命令 set 单独使用,把输入文件设置为 crush 图。

用法:

ceph osd crush set

子命令 set 为 osdname 或 osd.id 更新 crush 图的位置和权重信息,把名为 <name> 的 OSD 权重设置为 <weight> 、位置设置为 <args> 。

用法:

ceph osd crush set <osdname (id|osd.id)> <float[0.0-]> <args> [<args>...]

子命令 set-tunable 把可调值 <tunable> 设置为 <value> 。唯一能设置的可调值是 straw_calc_version 。

用法:

ceph osd crush set-tunable straw_calc_version <value>

子命令 show-tunables 显示当前的 crush 可调值。

用法:

ceph osd crush show-tunables

子命令 tree 用树状视图显示各 crush 桶、及各条目。

用法:

ceph osd crush tree

子命令 tunables 设置 <profile> 中的 crush 可调值。

用法:

ceph osd crush tunables legacy|argonaut|bobtail|firefly|hammer|optimal|default

子命令 unlink 从 crush 图中解链接出 <name> (任意位置,或 <ancestor> 之下的)。

用法:

ceph osd crush unlink <name> {<ancestor>}

子命令 df 用于显示 OSD 利用率。

用法:

ceph osd df {plain|tree}

子命令 deep-scrub 可启动指定 OSD 的深度洗刷。

用法:

ceph osd deep-scrub <who>

子命令 down 把 osd(s) <id> [<id>...] 状态设置为 down 。

用法:

ceph osd down <ids> [<ids>...]

子命令 dump 打印 OSD 图汇总。

用法:

ceph osd dump {<int[0-]>}

子命令 erasure-code-profile 用于管理纠删码配置,需额外加子命令。

子命令 get 读取纠删码配置 <name> 。

用法:

ceph osd erasure-code-profile get <name>

子命令 ls 罗列所有纠删码配置。

用法:

ceph osd erasure-code-profile ls

子命令 rm 删除纠删码配置 <name> 。

用法:

ceph osd erasure-code-profile rm <name>

子命令 set 用给定的参数 [<key[=value]> ...] 创建纠删码配置 <name> 。末尾加 –force 可覆盖已有配置(慎用)。

用法:

ceph osd erasure-code-profile set <name> {<profile> [<profile>...]}

子命令 find 从 CRUSH 图中找到 osd <id> 并显示其位置。

用法:

ceph osd find <int[0-]>

子命令 getcrushmap 获取 CRUSH 图。

用法:

ceph osd getcrushmap {<int[0-]>}

子命令 getmap 获取 OSD 图。

用法:

ceph osd getmap {<int[0-]>}

子命令 getmaxosd 显示最大 OSD 惟一标识符。

用法:

ceph osd getmaxosd

子命令 in 把给出的 OSD <id> [<id>...] 标识为 in 状态。

用法:

ceph osd in <ids> [<ids>...]

子命令 lost 把 OSD 标识为永久丢失。如果没有多个副本,此命令会导致数据丢失,慎用。

用法:

ceph osd lost <int[0-]> {--yes-i-really-mean-it}

子命令 ls 显示所有 OSD 的惟一标识符。

用法:

ceph osd ls {<int[0-]>}

子命令 lspools 罗列存储池。

用法:

ceph osd lspools {<int>}

子命令 map 在 <pool> 存储池中找 <object> 对象所在的归置组号码。

用法:

ceph osd map <poolname> <objectname>

子命令 metadata 为 osd <id> 取出元数据。

用法:

ceph osd metadata {int[0-]} (default all)

子命令 out 把指定 OSD <id> [<id>...] 的状态设置为 out 。

用法:

ceph osd out <ids> [<ids>...]

子命令 pause 暂停 osd 。

用法:

ceph osd pause

子命令 perf 打印 OSD 的性能统计摘要。

用法:

ceph osd perf

子命令 pg-temp 设置 pg_temp 映射 pgid:[<id> [<id>...]] ,适用于开发者。

用法:

ceph osd pg-temp <pgid> {<id> [<id>...]}

子命令 pool 用于管理数据存储池,需额外加子命令。

子命令 create 创建存储池。

用法:

ceph osd pool create <poolname> <int[0-]> {<int[0-]>} {replicated|erasure}
{<erasure_code_profile>} {<ruleset>} {<int>}

子命令 delete 删除存储池。

用法:

ceph osd pool delete <poolname> {<poolname>} {--yes-i-really-really-mean-it}

子命令 get 获取存储池参数 <var> 。

用法:

ceph osd pool get <poolname> size|min_size|crash_replay_interval|pg_num|
pgp_num|crush_ruleset|auid|write_fadvise_dontneed

以下命令只适用于分层存储池:

ceph osd pool get <poolname> hit_set_type|hit_set_period|hit_set_count|hit_set_fpp|
target_max_objects|target_max_bytes|cache_target_dirty_ratio|cache_target_dirty_high_ratio|
cache_target_full_ratio|cache_min_flush_age|cache_min_evict_age|
min_read_recency_for_promote|hit_set_grade_decay_rate|hit_set_search_last_n

以下命令只适用于纠删码存储池:

ceph osd pool get <poolname> erasure_code_profile

子命令 get-quota 获取存储池的对象或字节数限额。

用法:

ceph osd pool get-quota <poolname>

子命令 ls 用于罗列存储池。

用法:

ceph osd pool ls {detail}

子命令 mksnap 拍下存储池 <pool> 的快照 <snap> 。

用法:

ceph osd pool mksnap <poolname> <snap>

子命令 rename 把存储池 <srcpool> 重命名为 <destpool> 。

用法:

ceph osd pool rename <poolname> <poolname>

子命令 rmsnap 删除存储池 <pool> 的快照 <snap> 。

用法:

ceph osd pool rmsnap <poolname> <snap>

子命令 set 把存储池参数 <var> 的值设置为 <val> 。

用法:

ceph osd pool set <poolname> size|min_size|crash_replay_interval|pg_num|
pgp_num|crush_ruleset|hashpspool|nodelete|nopgchange|nosizechange|
hit_set_type|hit_set_period|hit_set_count|hit_set_fpp|debug_fake_ec_pool|
target_max_bytes|target_max_objects|cache_target_dirty_ratio|
cache_target_dirty_high_ratio|
cache_target_full_ratio|cache_min_flush_age|cache_min_evict_age|auid|
min_read_recency_for_promote|write_fadvise_dontneed|hit_set_grade_decay_rate|
hit_set_search_last_n
<val> {--yes-i-really-mean-it}

子命令 set-quota 设置存储池的对象或字节数限额。

用法:

ceph osd pool set-quota <poolname> max_objects|max_bytes <val>

子命令 stats 获取所有或指定存储池的统计信息。

用法:

ceph osd pool stats {<name>}

子命令 primary-affinity 设置主 OSD 亲和性,有效值范围 0.0 <= <weight> <= 1.0

用法:

ceph osd primary-affinity <osdname (id|osd.id)> <float[0.0-1.0]>

子命令 primary-temp 设置 primary_temp 映射 pgid:<id>|-1 ,适用于开发者。

用法:

ceph osd primary-temp <pgid> <id>

子命令 repair 让指定 OSD 开始修复。

用法:

ceph osd repair <who>

子命令 reweight 把 OSD 权重改为 0.0 < <weight> < 1.0 之间的值。

用法:

osd reweight <int[0-]> <float[0.0-1.0]>

子命令 reweight-by-pg 按归置组分布情况调整 OSD 的权重(考虑的过载百分比,默认 120 )。

用法:

ceph osd reweight-by-pg {<int[100-]>} {<poolname> [<poolname...]}

子命令 reweight-by-utilization 按利用率调整 OSD 的权重,还需考虑负载比率,默认 120 。

用法:

ceph osd reweight-by-utilization {<int[100-]>}

子命令 rm 删除集群中的 OSD ,其编号为 <id> [<id>...] 。

用法:

ceph osd rm <ids> [<ids>...]

子命令 scrub 让指定 OSD 开始洗刷。

用法:

ceph osd scrub <who>

子命令 set 设置关键字 <key> 。

用法:

ceph osd set full|pause|noup|nodown|noout|noin|nobackfill|
norebalance|norecover|noscrub|nodeep-scrub|notieragent

子命令 setcrushmap 把输入文件设置为 CRUSH 图。

用法:

ceph osd setcrushmap

子命令 setmaxosd 设置最大 OSD 数值。

用法:

ceph osd setmaxosd <int[0-]>

子命令 stat 打印 OSD 图摘要。

用法:

ceph osd stat

子命令 thrash 把 OSD 元版本回滚到 <num_epochs> 。

用法:

ceph osd thrash <int[0-]>

子命令 tier 用于管理(存储池)分级,需额外加子命令。

子命令 add 把 <tierpool> (第二个)加到基础存储池 <pool> (第一个)之前。

用法:

ceph osd tier add <poolname> <poolname> {--force-nonempty}

子命令 add-cache 把尺寸为 <size> 的缓存存储池 <tierpool> (第二个)加到现有存储池 <pool> (第一个)之前。

用法:

ceph osd tier add-cache <poolname> <poolname> <int[0-]>

子命令 cache-mode 设置缓存存储池 <pool> 的缓存模式。

用法:

ceph osd tier cache-mode <poolname> none|writeback|forward|readonly|
readforward|readproxy

子命令 remove 删掉基础存储池 <pool> (第一个)的马甲存储池 <tierpool> (第二个)。

用法:

ceph osd tier remove <poolname> <poolname>

子命令 remove-overlay 删除基础存储池 <pool> 的马甲存储池。

用法:

ceph osd tier remove-overlay <poolname>

子命令 set-overlay 把 <overlaypool> 设置为基础存储池 <pool> 的马甲存储池。

用法:

ceph osd tier set-overlay <poolname> <poolname>

子命令 tree 打印 OSD 树。

用法:

ceph osd tree {<int[0-]>}

子命令 unpause 取消 osd 暂停。

用法:

ceph osd unpause

子命令 unset 取消设置的关键字 <key> 。

用法:

ceph osd unset full|pause|noup|nodown|noout|noin|nobackfill|
norebalance|norecover|noscrub|nodeep-scrub|notieragent

pg

用于管理 OSD 内的归置组,需额外加子命令。

子命令 debug 可显示归置组的调试信息。

用法:

ceph pg debug unfound_objects_exist|degraded_pgs_exist

子命令 deep-scrub 开始深度洗刷归置组 <pgid> 。

用法:

ceph pg deep-scrub <pgid>

子命令 dump 可显示归置组图的人类可读版本(显示为纯文本时只有 ‘all’ 合法)。

用法:

ceph pg dump {all|summary|sum|delta|pools|osds|pgs|pgs_brief} [{all|summary|sum|delta|pools|osds|pgs|pgs_brief...]}

子命令 dump_json 只以 json 格式显示归置组图的人类可读版本。

用法:

ceph pg dump_json {all|summary|sum|delta|pools|osds|pgs|pgs_brief} [{all|summary|sum|delta|pools|osds|pgs|pgs_brief...]}

子命令 dump_pools_json 只以 json 格式显示归置组存储池信息[译者:存疑]。

用法:

ceph pg dump_pools_json

子命令 dump_stuck 显示卡顿归置组的信息。

用法:

ceph pg dump_stuck {inactive|unclean|stale|undersized|degraded [inactive|unclean|stale|undersized|degraded...]}
{<int>}

子命令 force_create_pg 强制创建归置组 <pgid> 。

用法:

ceph pg force_create_pg <pgid>

子命令 getmap 获取二进制归置组图,保存到 -o/stdout 。

用法:

ceph pg getmap

子命令 ls 可根据指定存储池、 OSD 、状态罗列对应的归置组。

用法:

ceph pg ls {<int>} {active|clean|down|replay|splitting|
scrubbing|scrubq|degraded|inconsistent|peering|repair|
recovery|backfill_wait|incomplete|stale| remapped|
deep_scrub|backfill|backfill_toofull|recovery_wait|
undersized [active|clean|down|replay|splitting|
scrubbing|scrubq|degraded|inconsistent|peering|repair|
recovery|backfill_wait|incomplete|stale|remapped|
deep_scrub|backfill|backfill_toofull|recovery_wait|
undersized...]}

子命令 ls-by-osd 用于罗列指定 OSD 上的归置组。

用法:

ceph pg ls-by-osd <osdname (id|osd.id)> {<int>}
{active|clean|down|replay|splitting|
scrubbing|scrubq|degraded|inconsistent|peering|repair|
recovery|backfill_wait|incomplete|stale| remapped|
deep_scrub|backfill|backfill_toofull|recovery_wait|
undersized [active|clean|down|replay|splitting|
scrubbing|scrubq|degraded|inconsistent|peering|repair|
recovery|backfill_wait|incomplete|stale|remapped|
deep_scrub|backfill|backfill_toofull|recovery_wait|
undersized...]}

子命令 ls-by-pool 用于罗列存储池 [poolname | poolid] 内的归置组。

用法:

ceph pg ls-by-pool <poolstr> {<int>} {active|
clean|down|replay|splitting|
scrubbing|scrubq|degraded|inconsistent|peering|repair|
recovery|backfill_wait|incomplete|stale| remapped|
deep_scrub|backfill|backfill_toofull|recovery_wait|
undersized [active|clean|down|replay|splitting|
scrubbing|scrubq|degraded|inconsistent|peering|repair|
recovery|backfill_wait|incomplete|stale|remapped|
deep_scrub|backfill|backfill_toofull|recovery_wait|
undersized...]}

子命令 ls-by-primary 可罗列主 OSD 为 [osd] 的归置组。

用法:

ceph pg ls-by-primary <osdname (id|osd.id)> {<int>}
{active|clean|down|replay|splitting|
scrubbing|scrubq|degraded|inconsistent|peering|repair|
recovery|backfill_wait|incomplete|stale| remapped|
deep_scrub|backfill|backfill_toofull|recovery_wait|
undersized [active|clean|down|replay|splitting|
scrubbing|scrubq|degraded|inconsistent|peering|repair|
recovery|backfill_wait|incomplete|stale|remapped|
deep_scrub|backfill|backfill_toofull|recovery_wait|
undersized...]}

子命令 map 显示归置组到 OSD 的映射关系。

用法:

ceph pg map <pgid>

子命令 repair 开始修复归置组 <pgid> 。

用法:

ceph pg repair <pgid>

子命令 scrub 开始洗刷归置组 <pgid> 。

用法:

ceph pg scrub <pgid>

子命令 set_full_ratio 设置认为归置组占满的比率。

用法:

ceph pg set_full_ratio <float[0.0-1.0]>

子命令 set_nearfull_ratio 设置认为归置组将要占满的比率。

用法:

ceph pg set_nearfull_ratio <float[0.0-1.0]>

子命令 stat 显示归置组状态。

用法:

ceph pg stat

quorum

进入或退出法定人数。

用法:

ceph quorum enter|exit

quorum_status

报告监视器法定人数状态。

用法:

ceph quorum_status

report

报告集群的全部状态,标签字符串可选。 Reports full status of cluster, optional title tag strings.

用法:

ceph report {<tags> [<tags>...]}

scrub

洗刷监视器的存储。

用法:

ceph scrub

status

显示集群状态。

用法:

ceph status

sync force

强制监视器进行同步、并清除存储。

用法:

ceph sync force {--yes-i-really-mean-it} {--i-know-what-i-am-doing}

tell

发命令给指定守护进程。

用法:

ceph tell <name (type.id)> <args> [<args>...]

version

显示监视器守护进程的版本。

用法:

ceph version

选项

-i infile
指定一个输入文件,它将作为载荷与命令一起传递给监视器集群。仅用于某些特定的监视器命令。
-o outfile
把响应中监视器集群返回的载荷写入 outfile 文件。只有某些特定的监视器命令(如 psd getmap )会返回载荷。
-c ceph.conf, --conf=ceph.conf
用 ceph.conf 配置文件而非默认的 /etc/ceph/ceph.conf 来确定启动时所用的监视器地址。
--id CLIENT_ID, --user CLIENT_ID
用于认证的客户端 ID 。
--name CLIENT_NAME, -n CLIENT_NAME
用于认证的客户端名字。
--cluster CLUSTER
Ceph 集群名字。
--admin-socket ADMIN_SOCKET, --admin-socket DAEMON_NAME
提交管理套接字命令。
--admin-socket ADMIN_SOCKET_NOPE
你也许想要的是 –admin-daemon 。
-s, --status
显示集群状态。
-w, --watch
盯着集群的实时状态变更。
--watch-debug
盯着调试事件。
--watch-info
盯着一般信息事件。
--watch-sec
盯着安全事件。
--watch-warn
盯着告警事件。
--watch-error
盯着错误事件。
--version, -v
显示版本号。
--verbose
使输出更详细。
--concise
使输出简洁些。
-f {json,json-pretty,xml,xml-pretty,plain}, --format
输出格式。
--connect-timeout CLUSTER_TIMEOUT
设置连接集群的超时值。

使用范围

ceph 是 Ceph 的一部分,这是个伸缩力强、开源、分布式的存储系统

 

文章来源:

http://docs.ceph.org.cn/man/8/ceph/

 

..

发表在 storage | ceph – Ceph 管理工具已关闭评论

PHP call_user_func & call_user_func_array

对比范围

  • 直接调用
  • 变量函数调用
  • call_user_func 调用
  • call_user_func_array 调用

测试结果

call_user_func_array 所用时间为:1.1608240604401s

测试代码:

<?php error_reporting(E_ALL | E_STRICT); define('ITERATIONS', 2000000); class Bench { private $bench_name; private $start_time; private $end_time; public function start($name) { $this->bench_name = $name;
        $this->start_time = microtime(true);
    }

    public function end()
    {
        $this->end_time = microtime(true);
        echo "Call style: " . $this->bench_name . '; ' . ($this->end_time - $this->start_time) . " seconds". PHP_EOL;
    }
}

class Test
{
    public function test($a, $b, $c)
    {
        return;
    }
}


$bench = new Bench();
$test = new Test();
$arg = [1, 2, 3];
$func_name = 'test';

$bench->start('normal');
for ($i=0; $i < ITERATIONS; ++$i) { $test->test($arg[0], $arg[1], $arg[2]);
}
$bench->end();

$bench->start('var_function');
for ($i=0; $i < ITERATIONS; ++$i) { $test->$func_name($arg[0], $arg[1], $arg[2]);
}
$bench->end();

$bench->start('call_user_func');
for ($i=0; $i < ITERATIONS; ++$i) { call_user_func([$test, $func_name], $arg[0], $arg[1], $arg[2]); } $bench->end();

$bench->start('call_user_func_array');
for ($i=0; $i < ITERATIONS; ++$i) { call_user_func_array([$test, $func_name], $arg); } $bench->end();

 


Iterations: 100 000
Averaged over: 10
PHP 5.6.30 (cli) (built: Jan 18 2017 19:47:28)

Overall Average
Invocation Time (s) Delta (s) %
directFunction 0.0089 -0.0211 -70.19
directStatic 0.0098 -0.0202 -67.39
directLambda 0.0109 -0.0191 -63.52
directInstance 0.0116 -0.0184 -61.31
directClosure 0.0150 -0.0150 -50.15
Invoke 0.0282 -0.0018 -6.13
call_user_func 0.0300
ClosureFactory 0.0316 +0.0016 +5.20
assignedClosureFactory 0.0328 +0.0028 +9.28
call_user_func_array 0.0399 +0.0099 +33.02
InvokeCallUserFunc 0.0418 +0.0118 +39.17
directImplementation 0.0475 +0.0175 +58.28

 


Iterations: 100 000
Averaged over: 10
PHP 7.1.2 (cli) (built: Feb 14 2017 21:24:45)

Overall Average
Invocation Time (s) Delta (s) %
directFunction 0.0043 -0.0096 -68.92
directStatic 0.0050 -0.0089 -64.04
directInstance 0.0058 -0.0081 -58.22
directLambda 0.0063 -0.0075 -54.44
directClosure 0.0081 -0.0058 -41.57
call_user_func 0.0139
call_user_func_array 0.0147 +0.0008 +5.84
Invoke 0.0187 +0.0048 +34.61
ClosureFactory 0.0207 +0.0069 +49.43
assignedClosureFactory 0.0219 +0.0080 +57.75
directImplementation 0.0232 +0.0094 +67.53
InvokeCallUserFunc 0.0264 +0.0126 +90.67

.

资料来源:

https://segmentfault.com/q/1010000012081290

 

 

发表在 php | PHP call_user_func & call_user_func_array已关闭评论