1、nbd 模块未安装
[root@localhost ~]# modprobe nbd
modprobe: FATAL: Module nbd not found.
2、查看 linux 版本
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core) #查看系统版本
[root@localhost ~]# uname -r #查看linux的内核信息
3.10.0-957.el7.x86_64
3、安装相关包
yum install kernel-devel kernel-headers elfutils-libelf-devel gcc+ gcc-c++
4、下载内核包
http://vault.centos.org/7.6.1810/os/Source/SPackages/kernel-3.10.0-957.el7.src.rpm
#根据自己的系统版本去下载
#7.6.1810 为redhat-release 系统版本
#3.10.0-957.el7 为uname -r 内核信息
5、编译
rpm -ivh kernel-3.10.0-957.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/
drwxr-xr-x. 22 root root 4096 9月 6 08:07 3.10.0-957.27.2.el7.x86_64
drwxrwxr-x. 24 root root 4096 9月 6 08:17 linux-3.10.0-957.el7
编译
cd /usr/src/kernels/linux-3.10.0-957.el7
#删除所有编译生成文件,内核配置文件
make mrproper
cp /usr/src/kernels/3.10.0-957.27.2.el7.x86_64/Module.symvers ./
cp /boot/config-3.10.0-957.el7.x86_64 ./.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
7、复制文件
cp drivers/block/nbd.ko /lib/modules/3.10.0-957.el7.x86_64/kernel/drivers/block/
depmod -a
8、查看模块
[root@localhost linux-3.10.0-957.el7]# modinfo nbd
filename: /lib/modules/3.10.0-957.el7.x86_64/kernel/drivers/block/nbd.ko
license: GPL
description: Network Block Device
retpoline: Y
rhelversion: 7.6
srcversion: EDE909A294AC5FE08E81957
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)