为了修改qcow2格式的虚拟机镜像,需要编译nbd内核模块,因为CentOS发行版通常都不会编译这个模块,因此需要自己编译。
安装编译软件和编译所需的软件包
1
|
$ yum install kernel-devel kernel-headers make gcc
|
下载和安装源码包
1
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
|
解压源码包
1
2
3
4
5
|
$ 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)
|
编译nbd内核模块
1
2
3
4
5
6
7
8
9
10
|
$ 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
|
加载内核模块
执行下面的命令,加载nbd内核模块:
1
|
$ modprobe nbd max_part=6
|
执行完成后,/dev
目录下应该会多出一些nbd
开头的设备。
1
2
3
|
$ ls /dev/nbd*
/dev/nbd0 /dev/nbd2 /dev/nbd4
/dev/nbd1 /dev/nbd3 /dev/nbd5
|
修改qcow2镜像
加载好nbd模块之后,就可以将qcow2镜像和nbd块设备关联起来。关联起来之后,qcow2文件中有几个分区就好多出几个nbd块设备,这些块设备可以直接挂载到某个目录,然后就可以修改qcow2镜像了。示例如下:
1
2
3
4
|
$ qemu-nbd --connect=/dev/nbd0 /full/path/to/qcow2
$ ls /dev/nbd0p*
/dev/nbd0p1
$ mount /dev/nbd0p1 /mnt
|
修改完成之后,卸载目录,取消关联即可。
1
2
|
$ umount /mnt
$ qemu-nbd --disconnect /dev/nbd0
|