在查看ceph一直不成功的时候,发现如下错误:
FATAL: Module nbd not found in directory /lib/modules/3.10.0-1160.102.1.el7.x86_64
发现 nbd模块
未安装:
# modprobe nbd
modprobe: FATAL: Module nbd not found.
安装nbd模块
1、查看 linux 版本
# 查看系统版本
# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
# Linux的内核信息
# uname -r
3.10.0-1160.102.1.el7.x86_64
2、安装相关包
升级一下kernel及安装kernel-devel,保持它俩统一:
yum install kernel-devel kernel-headers elfutils-libelf-devel gcc+ gcc-c++
3、下载内核包
找对应的kernel源码包,一般yum都是升级到最新的,因此到 http://vault.centos.org/ 的整个7系列的最新版本目录下去找:
wget https://vault.centos.org/7.9.2009/os/Source/SPackages/kernel-3.10.0-1160.el7.src.rpm
# 根据自己的系统版本去下载
# 7.9.2009 为 redhat-release 系统版本
# 3.10.0-1160.102.1.el7 为 uname -r 内核信息
4、编译
rpm -ivh kernel-3.10.0-1160.el7.src.rpm
cd ~/rpmbuild/SOURCES/
# 解压 -C 指定目录 /usr/src/kernels
tar jxvf linux-3.10.0-957.el7.tar.xz -C /usr/src/kernels/
# 解压后生成两个文件
ll /usr/src/kernels/
drwxrwxr-x 24 root root 4096 Nov 3 11:59 3.10.0-1160.102.1.el7.x86_64
drwxr-xr-x 22 root root 4096 Nov 3 11:55 3.10.0-1160.102.1.el7.x86_64-old
5、编译
cd /usr/src/kernels/
mv $(uname -r) $(uname -r)-old
mv linux-3.10.0-1160.102.1.el7.x86_64 $(uname -r)
# 删除所有编译生成文件,内核配置文件
cd $(uname -r)
make mrproper
cp ../$(uname -r)-old/Module.symvers ./
cp /boot/config-$(uname -r) ./.config
# 备份当前 .config文件为.config.old
make oldconfig
make prepare
make scripts
6、编译
make CONFIG_BLK_DEV_NBD=m M=drivers/block
错误:
drivers/block/nbd.c: 在函数‘__nbd_ioctl’中:
drivers/block/nbd.c:619:19: 错误:‘REQ_TYPE_SPECIAL’未声明(在此函数内第一次使用)
sreq.cmd_type = REQ_TYPE_SPECIAL;
^
drivers/block/nbd.c:619:19: 附注:每个未声明的标识符在其出现的函数内只报告一次
make[1]: *** [drivers/block/nbd.o] 错误 1
make: *** [_module_drivers/block] 错误 2
解决:
vi drivers/block/nbd.c
// sreq.cmd_type = REQ_TYPE_SPECIAL;
sreq.cmd_type = 7; #修改为7
重新执行一次
make CONFIG_BLK_DEV_NBD=m M=drivers/block
如果报以下错误:
make[1]: *** No rule to make target tools/objtool/objtool', needed bydrivers/block/floppy.o'. Stop.
则执行:
make CONFIG_BLK_DEV_NBD=m M=drivers/block CONFIG_STACK_VALIDATION=
7、复制文件
cp drivers/block/nbd.ko /lib/modules/$(uname -r)/kernel/drivers/block/
depmod -a
8、验证
modinfo nbd
输出:
filename: /lib/modules/3.10.0-1160.102.1.el7.x86_64/kernel/drivers/block/nbd.ko
license: GPL
description: Network Block Device
retpoline: Y
rhelversion: 7.9
srcversion: 171F87FBEBE350C33C34226
depends:
vermagic: 3.10.0 SMP mod_unload modversions
parm: nbds_max:number of network block devices to initialize (default: 16) (int)
parm: max_part:number of partitions per device (default: 0) (int)
parm: debugflags:flags for controlling debug output (int)
大功告成。