CentOS 7 安装 nbd

半兽人 发表于: 2023-11-03   最后更新时间: 2023-11-03 16:48:37  
{{totalSubscript}} 订阅, 1,753 游览

在查看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)

大功告成。

更新于 2023-11-03

查看CentOS更多相关的文章或提一个关于CentOS的问题,也可以与我们一起分享文章