ceph内核模块编译及调试

本文介绍了在CentOS 7系统中编译和调试Ceph内核模块的过程,包括krbd的依赖、内核模块编译注意事项、模块签名、单独编译模块的方法以及Ceph内核模块的编译步骤。同时,讲解了如何进行内核调试,如启用dynamic_debug功能、调整printk日志级别和使用sysrq-trigger。
摘要由CSDN通过智能技术生成

虽然librbd和librados可以满足大部分ceph的使用需求,但是在实际使用中(特别是ceph与kubernetes结合),仍需krbd模块。当然,rbd-nbd也是一种解决方案,在这不多说。
显然,krbd依赖linux的内核版本,而普遍地,生产环境下的系统很少会升级到最新的内核(毕竟稳定性还是第一位)。这就会造成krbd的代码跟不上社区版本,有些bug即使修复了也难以应用起来。
因此,本文基于centos7的发行版,简单介绍如何使用ceph进行修改模块的编译和问题调式定位。
同时,如果使用过centos7.0的朋友们应该知道,在kernel-3.10.0-123版本,rbd模块默认是不安装的,即只能通过模块编译加载的方式来使用ceph的rbd,否则执行rbd map操作是会失败的。

linux模块编译

linux的模块编译在网上很多地方都能够找到,这里不描述详细细节,只说一下需要注意的事情。

  1. 如果不打算升级内核,那么模块编译时的kernel源码一定要与当前发行版本的内核一致。比如,centos7.0对应内核版本为kernel-3.10.0-123,如果不确定,可以使用uname -r来查询到(针对rhel系的系统)。一般地,内核源码可以在rpmsearch中找到。千万不要将发行版的linux内核和torvalds/linux搞混了。
  2. 手动编译的内核模块一般是没有签名的(module signing),一般情况是不影响使用的。但如果有特殊需求的环境,比如需要验证签名才能加载内核模块的系统安全设定,则需要手动为模块增加签名。详细的可以参考红帽的官方说明:signing secure module for secure boot
  3. 当内核源码包缺少symvers文件,手动编译的modules在加载时报no symbol version for module_layout错误.此时,需要做如下操作:locate symvers,将symvers文件拷贝到对应-C目录下

那么,我们假设已经从网上或者其它途径上拿到了linux某个发行版本的内核源码(这里使用的是centos7.1 即 kernel-3.10.0-229.el7.src.rpm或者kernel.tar.bz包)。如果是src.rpm包,则还需要yum install xxx.src.rpm进行安装,成功后在/root目录下会多出一个rpmbuild目录,该源码包位置在/root/rpmbuild/SOURCES/linux-3.10.0-514.el7.tar.xz。

如果要编译整个内核,可以这样:
1. 通过解压tar包,获取源码tar xvf kernel.tar.xz
2. make mrproper # 清除上次残留项
3. make menuconfig # 需要安装ncurses 和 ncurses-devel库,选择内核需要的模块
4. make & make modules_install
5. 在对应的模块目录下找到特定的ko文件

静静等待几个小时编译即可完成。幸运的是,内核模块是可以单独编译的。通过以下步骤,可以编译某个模块,而不用等待所有代码编译完成,非常节省时间:
1. make oldconfig
2. make prepare
3. make scripts
4. make <MODULE>=m -C /usr/src/kernels/{linux-version}/ M=/{src-dir}/{modules_path}/ modules -C $(KDIR) 指明跳转到内核源码目录下读取那里的Makefile,M=$(PWD) 表明然后返回到当前目录继续读入、执行当前的Makefile
5. 然后再{module_path}路径中找到对应的ko文件即可

ceph模块编译

ceph的内核模块主要有三个,包含rbd-nbd的话就有四个,其路径及模块名分别是:
1. cephfs内核模块ceph.ko:CONFIG_CEPH_FS=m,模块路径:./fs/ceph/
2. rbd内核模块rbd.ko:CONFIG_BLK_DEV_RBD=m,模块路径:./drivers/block
3. 通用模块libceph.ko:CONFIG_CEPH_LIB=m,模块路径:./net/ceph/ ./include/linux/ceph/ ./include/linux/crush/
4. nbd模块nbd.ko: CONFIG_BLK_DEV_NBD=m,模块路径:./drivers/block

以rbd内核模块编译为例子,其步骤如下:
1. make CONFIG_BLK_DEV_RBD=m -C /usr/src/kernels/3.10.0-229.el7.x86_64/ M=/root/linux-3.10.0-229/ modules
2. 在/root/linux-3.10.0-229/drivers/block目录下找到rbd.ko文件
3. 放置到/usr/lib/modules/3.10.0-229.el7.x86_64/kernel/drivers/block/rbd.ko位置。
4. depmod -a 更新所有模块依赖,也可以执行 rmmod rbd,然后modprobe rbd 或者 insmod rbd

PS: cephfs放置到/usr/lib/modules/3.10.0-229.el7.x86_64/kernel/fs/ceph/ceph.ko, libceph放置到/usr/lib/modules/3.10.0-229.el7.x86_64/kernel/net/ceph/libceph.ko

ceph内核模块调试

ceph的内核调试其实就是linux的内核日志输出调试吧。其所有的输出一般会打印在kern.log上,使

Ceph是一个分布式存储系统,可以提供高性能、可靠性和可扩展性的存储解决方案。Ceph的文件系统(CephFS)是其核心组件之一,可以提供类似传统文件系统的访问方式。 要搭建CephFS,首先需要从源码编译Ceph。以下是一个大致的步骤: 1. 下载Ceph源码:可以从Ceph官方网站上获取源码的压缩包,也可以通过Git从Ceph的代码仓库中克隆最新的源码。 2. 安装依赖项:编译Ceph需要一些依赖项,如CMake、GCC、Python等。确保这些依赖项已经安装在系统中。 3. 配置编译选项:进入Ceph源码目录,运行命令"CMake ."来生成编译脚本。可以根据需要配置编译选项,例如启用CephFS支持。 4. 编译源码:运行命令"make -j"进行编译,"-j"选项可以并行编译以加快编译时间。 5. 安装二进制文件:编译完成后,运行命令"sudo make install"将二进制文件安装到系统路径中。 6. 配置Ceph集群:在搭建CephFS之前,需要先配置一个Ceph集群。这包括设置监视器(Monitor)和存储后端(OSD),以及创建认证密钥等。 7. 创建CephFS:在Ceph集群配置完成后,可以通过命令"ceph fs new cephfs_data metadata"来创建一个名为cephfs_data的CephFS。这将在集群中的一个数据池中创建CephFS的元数据。 8. 挂载CephFS:在创建CephFS后,可以使用命令"sudo mount -t ceph <MONITOR_IP>:6789:/ /path/to/mount"将CephFS挂载到本地文件系统中。将<MONITOR_IP>替换为Ceph监视器的IP地址。 通过以上步骤,您应该能够成功编译和搭建CephFS。然后,您可以通过CephFS提供的类似传统文件系统的API和工具来管理和访问分布式存储。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值