摘要
解决加载 nbd
模块时报错的问题,modprobe nbd Module nbd not found。
前置
安装 elfutils-libelf-devel
这个模块后面在编译内核时会使用。先给装上。1
yum install elfutils-libelf-devel
下载
查看操作系统版本和内核版本1
2
3
4
5[root@weilu_125 vctos7-1]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
[root@weilu_125 vctos7-1]# uname -r
3.10.0-862.el7.x86_64
查看 kernel-devel 和 kernel-headers 包,实际上已经安装了:1
2
3
4
5
6
7[root@weilu_125 vctos7-1]# yum list installed | grep kernel
abrt-addon-kerneloops.x86_64 2.1.11-50.el7.centos @anaconda
kernel.x86_64 3.10.0-862.el7 @anaconda
kernel-devel.x86_64 3.10.0-862.el7 @anaconda
kernel-headers.x86_64 3.10.0-862.el7 @anaconda
kernel-tools.x86_64 3.10.0-862.el7 @anaconda
kernel-tools-libs.x86_64 3.10.0-862.el7 @anaconda
根据操作系统和内核版本找到对应的源码,下载:1
wget http://vault.centos.org/7.5.1804/os/Source/SPackages/kernel-3.10.0-862.el7.src.rpm
使用命令安装这个包:1
rpm -ihv kernel-3.10.0-862.el7.src.rpm
这个包安装后,默认会在 /root/rpmbuild
目录下,同时还会在 /usr/src/kernel
下面生成一个目录,后面会用到。
解压其中的一个包:1
tar Jxvf /root/rpmbuild/SOURCES/linux-3.10.0-862.el7.tar.xz -C /usr/src/kernels/
完成上述步骤之后,可以看到如下两个文件夹:1
2[root@weilu_125 kernels]# ls
3.10.0-862.el7.x86_64 linux-3.10.0-862.el7
备份内核
这里首先将内核移动到后缀增加了“-old”的目录下,然后将我们刚刚解压出来的内核目录拷贝过去,并进入内核目录1
2
3
4[root@weilu_125 kernels]# mv $(uname -r) $(uname -r)-old
[root@weilu_125 kernels]# mv linux-3.10.0-862.el7 $(uname -r)
[root@weilu_125 kernels]# cd $(uname -r)
[root@weilu_125 3.10.0-862.el7.x86_64]#
然后在这个目录下依次执行以下命令:1
2
3
4
5
6make mrproper
cp ../$(uname -r)-old/Module.symvers ./
cp /boot/config-$(uname -r) ./.config
make oldconfig
make prepare
make scripts
执行到这里暂停一下,修改文件:1
/usr/src/kernels/3.10.0-862.el7.x86_64/drivers/block/nbd.c
修改如下配置:1
2// sreq.cmd_type = REQ_TYPE_SPECIAL;
sreq.cmd_type = 7;
将这个变量之间设置为7即可,然后继续执行以下命令1
2
3make CONFIG_BLK_DEV_NBD=m M=drivers/block
cp drivers/block/nbd.ko /lib/modules/$(uname -r)/kernel/drivers/block/
depmod -a
测试
1 | [root@weilu_125 block]# modinfo nbd |