深入理解ceph-disk activate 源码逻辑
文章目录
- CEPH-DISK代码逻辑
- `Activate osd`的主要逻辑如下
- DEF main_activate激活osd的入口函数
- DEF mount_activate挂载临时目录,分配osd id并初始化osd
- DEF activate 分配osd_id以及初始化osd
CEPH-DISK代码逻辑
本文在上文 :深入理解ceph-disk prepare 源码逻辑基础上描述ceph-disk
的activate
代码逻辑
通过main
函数的子命令解析器,我这里激活osd主要那个用到的是如下解析结果
#对activate子命令进行解析,并设置参数的函数属性为main_activate
make_activate_parser(subparsers)
Activate osd
的主要逻辑如下
- 将已经prepare且格式化好的磁盘第一分区挂载到临时目录 ,默认为
/var/lib/ceph/tmp/mnt.xxx
- 根据
/var/lib/ceph/tmp/
文件夹下磁盘sdx的osd-lockbox.sdx
所在行号分配该磁盘的osd id编号 - 初始化osd
a. 将osd加入到monmap中,使用命令ceph --cluster ceph --name client.bootstrap-osd --keyring keyring mon getmap -o monmap
b. 初始化osd id的集群属性以及用户组,包括ceph-osd --cluster ceph --mkfs -i osd_id --monmap monmap --osd-data path --osd-uuid fsid --seruer ceph --setgroup ceph
- 挂载osd对应id的目录
/var/lib/ceph/osd/{cluster}-{osd_id}
- 启动osd进程
systemctl start ceph-osd@id
DEF main_activate激活osd的入口函数
def main_activate(args):...#获取到要激活的设备路径dev = str(args.path)[5:]dev = dev[:-1]osd_prepare_lock = ("%s.%s" %(OSD_PREPARE, dev))...#该函数功能主要是以上描述中的激活osd的前三步(cluster, osd_id) = mount_activate(dev=args.path,activate_key_template=args.activate_key_template,init=args.mark_init,dmcrypt=args.dmcrypt,dmcrypt_key_dir=args.dmcrypt_key_dir,reactivate=args.reactivate,)...#启动osd进程if (not args.no_start_daemon andargs.mark_init not in (None, 'none')):start_daemon(cluster=cluster,osd_id=osd_id,)
DEF mount_activate挂载临时目录,分配osd id并初始化osd
def mount_activate(dev,activate_key_template,init,dmcrypt,dmcrypt_key_dir,reactivate=False,
):...#使用ceph-conf命令从指定的ceph.conf中获取挂载属性(一般为挂载的文件系统类型)mount_options = get_mount_options(cluster='ceph', fs_type=fstype)#使用如上步骤中获取到的挂载属性进行挂载,将第一分区挂载到临时文件目录。#该挂载的目的是为了检查磁盘是否处于deactivate的状态,并查看分区所属用户组以及权限是否正确path = mount(dev=dev, fstype=fstype, options=mount_options)...#调用函数activate进行osd id的分配并初始化osd(osd_id, cluster) = activate(path, activate_key_template, init)...#初始化osd已经成功,卸载掉临时目录,挂载osd对应id的目录`/var/lib/ceph/osd/{cluster}-{osd_id}`if active:LOG.info('%s osd.%s already mounted in position; unmounting ours.'% (cluster, osd_id))unmount(path)elif other:raise Error('another %s osd.%s already mounted in position ''(old/different cluster instance?); unmounting ours.'% (cluster, osd_id))else:move_mount(dev=dev,path=path,cluster=cluster,osd_id=osd_id,fstype=fstype,mount_options=mount_options,)
DEF activate 分配osd_id以及初始化osd
def activate(path,activate_key_template,init,
):#检查当前路径是否是osd的data分区(第一分区),否则报错check_osd_magic(path)#从临时目录下获取从集群配置文件以及密钥文件中中获取到的集群相关属性:#ceph_fsid集群唯一标识#cluster集群名称#fsid bluestore唯一标识#keyring osd的启动密钥ceph_fsid = read_one_line(path, 'ceph_fsid')if ceph_fsid is None:raise Error('No cluster uuid assigned.')LOG.debug('Cluster uuid is %s', ceph_fsid)cluster = find_cluster_by_uuid(ceph_fsid)if cluster is None:raise Error('No cluster conf found in ' + SYSCONFDIR +' with fsid %s' % ceph_fsid)LOG.debug('Cluster name is %s', cluster)fsid = read_one_line(path, 'fsid')if fsid is None:raise Error('No OSD uuid assigned.')LOG.debug('OSD uuid is %s', fsid)keyring = activate_key_template.format(cluster=cluster,statedir=STATEDIR)#先从临时目录下/var/lib/ceph/tmp/mnt.xxx 的whoami文件中获取osd idosd_id = get_osd_id(path)#获取不到,则进行创建if osd_id is None:#创建osd_id依赖 /var/lib/ceph/tmp/osd-lockbox.sdx #该文件是prepare过程中为每个磁盘分配的锁文件ceph-osd-lockbox.sdx(sdx为磁盘符号)#osd编号是直接从该锁文件读取得到,该文件是在prepare时创建的osd_id = allocate_osd_id(cluster=cluster,fsid=fsid,keyring=keyring,path=path,)write_one_line(path, 'whoami', osd_id)LOG.debug('OSD id is %s', osd_id)...#通过mkfs初始化osd,设置osd在集群中的属性:#osd加入monmap,osd的数据分区路径,osd所在的bluestore标识,osd各个分区的用户权限以及用户组权限if not os.path.exists(os.path.join(path, 'ready')):LOG.debug('Initializing OSD...')# re-running mkfs is safe, so just run until it completesmkfs(path=path,cluster=cluster,osd_id=osd_id,fsid=fsid,keyring=keyring,)#移除初始化标记,防止其他方式需要初始化osd需要打标for other in INIT_SYSTEMS:if other != init:try:os.unlink(os.path.join(path, other))except OSError:pass#向文件夹中标记activate状态为okif not os.path.exists(os.path.join(path, 'active')):write_one_line(path, 'active', 'ok')
相关文章:

simple_html_dom meta,HTML DOM Meta content 属性
HTML DOM Meta content 属性Meta 对象定义和用法content 属性可设置或者返回 meta 元素 content 属性值。content 属性指定了 meta 信息的内容。注意: 这个属性可用的值依赖于name 和httpEquiv 属性的值。语法设置 content 属性:linkObject.content"…

struts2登录后返回登录前的页面
在Action中添加 String getUrl() { return ServletActionContext.getRequest().getHeader("referer"); } 然后配置struts的这个Action的result为:<result type"redirect">${url}</resu…

Exchange 2010 恢复误删除的邮箱账户及其邮箱
在误删除邮箱后,AD中相应的账号也会随之删除,此时该如何恢复? 先来模拟邮箱被误删除,在EMC控制台中删除别名为jqq的邮箱 打开ADUC,发现相应的jqq账号也被删除了: 1.恢复AD账号 下载运行ADRecycle Bin,点击【…

Python 函数初识 (1)
一、今日主要内容 认识函数 函数:对功能或者动作的封装(定义) 语法: def 函数名字(形参) 函数体 函数的调用格式:函数名(实参) 函数的返回值 关键字:return 终止函数的运行 1、函数内部不写return,默认函数末尾返回…

python的popen函数
最近了解了一下python的popen函数的使用,主要是用来执行linux命令 函数使用 使用之前需要导入import os模块 使用方式: os.popen(cmd)返回值: 返回一个文件句柄 import os cmd"/sbin/partx /dev/sdb" result_listos.popen(cmd) print result_list执行…

计算机竞赛CCC可以直接学吗,CCC 计算机竞赛到底有多牛!
加拿大计算机竞赛是什么?难度情况?加拿大计算机竞赛是由加拿大滑铁卢大学主办的,每年举办一次,是一场面向中学生的计算机程序设计比赛,CCC竞赛的一个目的是为广大中学生朋友们提供一个机会来测试自己分析、设计以及编程…

PHP basename() 函数
定义和用法 basename() 函数返回路径中的文件名部分。 语法 basename(path,suffix) 参数描述path必需。规定要检查的路径。suffix可选。规定文件扩展名。如果文件有 suffix,则不会输出这个扩展名。转载于:https://www.cnblogs.com/wuyou/p/3387079.html

真实工作经验总结——案例解析企业选型操作步骤
这是一个融合了本人以前工作经验的案例,包含有多个企业的选型需求。选型的过程也参考了本人以前所经历的部分事实。展现的目的在于让PUBer看到一个相对真实的选型。企业介绍这是一家中型的电脑和周边设备生产企业,即一个典型的电子企业。企业有内贸和外贸…

Oracle Goldengate Windows平台Oracle-Oracle单向复制
实验目的 Goldengate最基本的从源端一对一的单向复制,注意其中Goldengate版本取决于Oracle的版本。单向复制一般适用于保持目标数据库的实时更新,且目标数据库用来检索,如报表或者分析使用。 Source DB 操作系统:Windows 10 64 Or…

C语言解析命令行函数:getopt系列
头文件:/usr/include/getopt.h 函数传入较长参数 函数getopt_long_only和getopt_long两者用法差不多,都可以用来解析命令行选项 函数出处 #include <getopt.h> //getopt_long()头文件位置 int getopt_long (int ___argc, char *const *___ar…

宁波大学计算机专业复试,2016年宁波大学信息科学与工程学院计算机专业考研复试题库. (1)...
2016年宁波大学信息科学与工程学院计算机专业考研复试题库(二)——————————————————————————————————————————一、选择题1.下列有关浮点数加减运算的叒述中,正确的是()。对阶操作丌会引起阶码上溢戒下溢右规和尾…

RedHat、CentOS设置静态IP、主机名、关闭防火墙(虚拟机VMware客户机)
设置静态IP、主机名 1. /etc/sysconfig/network [roothadoop ~]# vi /etc/sysconfig/network NETWORKINGyes HOSTNAMEhadoop #主机名 GATEWAY192.168.80.1 #网关 2. /etc/sysconfig/network-scripts/ifcfg-eth0 [roothadoop ~]# vi /etc/sysconfig/network-scripts/ifc…

关于box2d相关学习教程记录一下
Box2D 2.0.1版本 认识Box2D世界掉落的苹果——b2Body刚体创建圆形刚体创建静止不动的刚体在运行时创建刚体刚体的上衣——b2BodyDef.userDataBox2D能再简单点吗——LDEasyBox2D让刚体听我的——ApplyForce、ApplyImpulse、SetLinearVelocity创建多边形刚体创建圆角刚体给圆角刚…

韦东山网课https://edu.csdn.net/course/play/207/1117
接口讲解https://edu.csdn.net/course/play/207/1117转载于:https://www.cnblogs.com/chulin/p/9878555.html

使用dd查看磁盘前4个扇区的内容
想要获取磁盘前四个扇区的内容可以先将扇区内容从磁盘dd出来,使用如下命令 dd if/dev/sdb ofmbr.txt bs1 count2048 改命令将sdb磁盘的前2048个字节内容即4个扇区内容备份到文件mbr.txt里面。 其中bs为块大小1即为1个字节,count表示块个数,即…

在SharePoint 2010使用OWA查看自己邮箱的内容
在SharePoint 2010使用OWA 背景: 利用 Outlook Web Access Web 部件,可以在 SharePoint 网站中显示从 Microsoft Exchange Server 2003 至 2007 电子邮件帐户中的文件夹中选择的内容. 这些 Web 部件连接到您的组织的 Office Outlook Web Access 服务器,而…

北京大学深圳研究生院计算机学什么,2018年北京大学深圳研究生院408计算机学科专业基础综合之计算机操作系统考研核心题库...
一、选择题1. 下列选项中,降低进程优先权级的合理时机是( )。A. 进程的时间片用完B. 进程刚完成I/O操作,进入就绪列队C. 进程长期处于就绪列队D. 进程从就绪状态转为运行态【答案】A【解析】本题的解答关键在于找出哪个选项中的进程应当被赋予…

网络瓶颈、线程死锁、内存泄露溢出、栈堆、ajax
网络瓶颈:网络传输性能及稳定性的一些相关元素 线程死锁:多个线程因竞争资源造成的一种僵局 下面我们通过一些实例来说明死锁现象。 先看生活中的一个实例,2个人一起吃饭但是只有一双筷子,2人轮流吃(同时拥有2只筷子才…

g-gdb调试core文件
文章目录core文件判读是否为core文件打开系统 core dump修改core文件的保存路径gdb调试core文件最近初步了解了一下core 文件,已经如何将gdb工具与core文件结合调试出现段错误的程序core文件 core是指操作系的程序统核心。当我们的程序在操作系统上运行异常崩溃时&…

信息整合的讨论案例
我所在的公司是广州的一个大型国有企业,目前所用的信息管理系统包括企业管理的方方面面,大约有7到8个互相独立的信息系统,这些系统都是在7、8年前就已经投入使用了,完全自主开发和维护,所用的工具是delphi+…

html中sprite标签,Three.js模型标签
Three.js模型标签在很多的实际的项目中,你可能需要给一个Three.js的模型添加标签,标签可以通过一个包含文字图形信息的HTML元素或者一个three.js的精灵模型来表示。层级模型复杂的项目,一个three.js场景往往包含包含多个模型对象,…

D3D11中的硬件反锯齿 SSAA/MSAA/EQAA/CSAA(3)
五 、EQAA/CSAA EQAA(enhanced quality AA)和CSAA(coverage sample AA)其实是同样的采样技术,EQAA是AMD的实现,CSAA是NV的实现,下面我以EQAA为例看看这两种AA的原理: 在MSAA中,每个采样都有一个sample color缓冲相对应…

[ python ] 类的组合
首先,使用面向对象是一个人狗大战的实例: class Person:def __init__(self, name, hp, aggr, sex):self.name nameself.hp hpself.aggr aggrself.sex sexdef hit(self, dog):dog.hp - self.aggrprint(\033[31;1m%s被打,掉了%s的血.\033[0…

ceph nautilus相对于minic的主要改动
改动信息 详情可以查看ceph官网nautilus Dashboard功能 增加的新功能 支持多用户使用SSO的用户验证模式支持审计模式新的登录页,可以展示更多的集群健康指标使用swagger api的rest api文档 增加的新的管理特性 对于OSD的管理(将osd标记为down,out,修…

word2003计算机应用考试,2017职称计算机考试Word2003操作练习题
2017职称计算机考试Word2003操作练习题实验操作能力是计算机考试考查的一项基本能力,下面是小编给大家提供的职称计算机考试Word2003操作练习题,大家可以参考练习,更多习题练习请关注应届毕业生考试网。1. 将所选文本的字体设置为“华文彩云”…

虚拟化及云厂商聚焦
虚拟化及云厂商聚焦转载于:https://blog.51cto.com/itcn001/1069736

题解:无线通讯网
qwq 跑最小生成树 一共n个电话,所以相当于最小生成树里删去最大的n-1的边 所以答案即为最小生成树的第n大边 prim或者kruskal都行 这是prim 1 #include<iostream>2 #include<cstdio>3 #include<algorithm>4 #include<cmath>5 using namespa…

linux常用操作指令—— 查看磁盘、内存使用情况(df、du、free、top)
显示指定磁盘文件的可用空间。如果没有文件名被指定,则所有当前被挂载的文件系统的可用空间将被显示。默认情况下,磁盘空间将以 1KB为单位进行显示,除非环境变量 POSIXLY_CORRECT 被指定,那样将以512字节为单位进行显示。free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。当文件系统也确定删除了该文件后,这时候du与df就一致了。实例4:显示目前磁盘空间和使用情况 (最常用)top:“实时查看” ,按。退出 (实时动态显示)

广东电网计算机考试,考点爆料!2019广东电网计算机专业居然考这些!
原标题:考点爆料!2019广东电网计算机专业居然考这些!本文由广东中公国企为您整理:2019广东电网校园招聘预计于2018年10~11月份开启,计算机类也是其中一个招聘大类,那么2019广东电网校园招聘计算机类专业考什…

修改ceph crush map,并指定到资源池
版本:ceph L 版本 12.2.1 环境:单节点 15 osd -1 0 root default -3 94.53119 host node1 0 hdd 5.37108 osd.0 up 1.00000 1.00000 1 hdd 5.37108 osd.1 …