yum install kernel-devel kernel-headers
cd /tmp
#下载符合当前版本的kernel src 6.2或者6.4的切换一下目录即可
wget http://vault.centos.org/6.3/updates/Source/SPackages/kernel-2.6.32-279.22.1.el6.src.rpm
rpm -ivh kernel-2.6.32-279.22.1.el6.src.rpm
cd ~/rpmbuild/SOURCES
#解压tar包到kernel源码的位置
tar jxf linux-2.6.32-279.22.1.el6.tar.bz2 -C /usr/src/kernels/
cd /usr/src/kernels
#备份原有的kernel source
mv $(uname -r) $(uname -r)-old
#有时候不排除内核的版本与实际的source包不一致,所以应以实际为准
mv 2.6.32-431.3.1.el6.x86_64 2.6.32-431.3.1.el6.x86_64-old
#将新下载的kernel重命名
mv linux-2.6.32-279.22.1.el6 2.6.32-431.3.1.el6.x86_64
chown -R root:root 2.6.32-431.3.1.el6.x86_64
#开始进入编译阶段
cd /usr/src/kernels/2.6.32-431.3.1.el6.x86_64
#make mrproper去先删除之前编译所生成的文件和配置文件等
make mrproper
cd /usr/src/kernels/2.6.32-431.3.1.el6.x86_64-old
#Module.symvers文件用于:1.列出vmlinux和所有模块的导出函数 2.列出所有符号的CRC校验值
cp Module.symvers /usr/src/kernels/2.6.32-431.3.1.el6.x86_64
cd /usr/src/2.6.32-431.3.1.el6.x86_64
cp /boot/config-2.6.32-358.el6.x86_64 ./.config
#所有问题都基于已有的.config文件,只对新特性和新设定提出询问,避免需要重新设定整个内核的配置
make oldconfig
make prepare
make scripts
make CONFIG_BLK_DEV_NBD=m M=drivers/block
#在 /usr/src/kernels/2.6.32-431.3.1.el6.x86_64目录下
cp drivers/block/nbd.ko /lib/modules/$(uname -r)/kernel/drivers/block/
#Probe all modules
depmod -a
#加载模块,默认nbd的增加分区的功能是关闭的,需要指定max_part这个参数。这个参数指定了一个nbd设备可以有多少个分区。
modprobe nbd max_part=63
#是否加载可以用 lsmod 命令查看
#需要安装以下软件
rpm -ivh --replacefiles --nodeps seabios-bin-0.6.2-3.el6.noarch.rpm
rpm -ivh --replacefiles --nodeps seabios-0.6.2-3.el6.x86_64.rpm
rpm -ivh --replacefiles --nodeps qemu-common-0.12.3-8.el6.x86_64.rpm
rpm -ivh --replacefiles --nodeps qemu-img-0.12.3-8.el6.x86_64.rpm
rpm -ivh --replacefiles --nodeps qemu-kvm-0.12.3-8.el6.x86_64.rpm
rpm -ivh --replacefiles --nodeps qemu-system-x86-0.12.3-8.el6.x86_64.rpm
#查看当前与nbd相关的设备
ls /dev/ | grep nbd
#将文件链接到本地的NBD设备上
qemu-nbd -c /dev/nbd0 test01.img
#再次查看与nbd相关的设备,会发现在/nbd0 下多了三个分区nbd0p1 nbd0p2 nbd0p3,这是虚拟机img文件中的分区
ls /dev/ | grep nbd
#挂载到宿主机,就可以访问img的内部了,其中会有一个swapspace是不能挂载的
mount nbd0p1 /mnt/test