我的探索和思考
Cloud Computing Architect
My Picture

在CentOS 7上编译nbd内核模块

标签: post centos kernel

为了修改qcow2格式的虚拟机镜像,需要编译nbd内核模块,因为CentOS发行版通常都不会编译这个模块,因此需要自己编译。

1, 安装编译软件和编译所需的软件包

$ yum install kernel-devel kernel-headers make gcc

2, 下载和安装源码包

$ wget ftp://ftp.redhat.com/pub/redhat/linux/enterprise/7ComputeNode/en/os/SRPMS/kernel-3.10.0-327.el7.src.rpm
$ rpm -ivh kernel-3.10.0-327.el7.src.rpm

3, 解压源码包

$ cd ~/rpmbuild/SOURCES
$ tar Jxf linux-3.10.0-327.el7.tar.xz -C /usr/src/kernels/
$ cd /usr/src/kernels
$ mv $(uname -r) $(uname -r)-old
$ mv linux-3.10.0-327.el7 $(uname -r)

4, 编译nbd内核模块

$ cd $(uname -r)
$ make mrproper
$ cp ../$(uname -r)-old/Module.symvers ./
$ cp /boot/config-$(uname -r) ./.config
$ make oldconfig
$ make prepare
$ make scripts
$ make CONFIG_BLK_DEV_NBD=m M=drivers/block
$ cp drivers/block/nbd.ko /lib/modules/$(uname -r)/kernel/drivers/block/
$ depmod -a

5, 加载内核模块

执行下面的命令,加载nbd内核模块:

$ modprobe nbd max_part=6

执行完成后,/dev目录下应该会多出一些nbd开头的设备。

$ ls /dev/nbd*
/dev/nbd0  /dev/nbd2  /dev/nbd4
/dev/nbd1  /dev/nbd3  /dev/nbd5

6, 修改qcow2镜像

加载好nbd模块之后,就可以将qcow2镜像和nbd块设备关联起来。关联起来之后,qcow2文件中有几个分区就好多出几个nbd块设备,这些块设备可以直接挂载到某个目录,然后就可以修改qcow2镜像了。示例如下:

$ qemu-nbd --connect=/dev/nbd0 /full/path/to/qcow2
$ ls /dev/nbd0p*
/dev/nbd0p1
$ mount /dev/nbd0p1 /mnt

修改完成之后,卸载目录,取消关联即可。

$ umount /mnt
$ qemu-nbd --disconnect /dev/nbd0
comments powered by Disqus