环境:
系 统: Centos 6.6
内核版本: linux-2.6.32
1.vmware转qcow2格式,内核崩溃
最近做一个kvm的镜像,尽力裁小内核大小,从VMware格式转qcow2格式后发现内核进不去:
发现内核模块‘VIRTIO’相关选项都去掉了,重新设为‘y’编译。
转了格式后,发现可以正常打开了。主要原因是:内核未开启'VIRTIO'相关选项。
2.kvm环境下,宿主机获取不到客户机的内存和cpu
一开始以为内核选项问题,还缺少相关模块,查了很多的资料,都说是virtio驱动问题,想方设法的去找遗漏的选项,但是白费力气,说的选项都选了,还都为‘y’直接编译进内核,更保险才对。但并没什么用。
又用另一种方法:把模块加入开机启动,可以查看文件:
#cat /etc/rc.sysinit里面说道有2种方式开机加载模块:
a. /etc/sysconfig/modules/*.modules
b. /etc/rc.modules
按照套路,在/etc/sysconfig/modules/目录下建立一个*.modules文件把模块丢进去。发现qcow2开机后还是不行,相关模块还是没起来。
终极解决办法:
查看内核里面有没加进相关模块,若没有,直接加进去:
#lsinitrd /boot/initramfs-$(uname -r).img | grep virtio
发现真的没有,无论怎么编译内核,没加进这里都是白干。那就想办法加进去,找到以下方式加载进去:
#mkinitrd --preload=virtio --preload=virtio_pci --preload=virtio_blk --preload=virtio_net -f /boot/initramfs-$(uname -r).img $(uname -r)
参数简单说明下:
a.initrd与内核绑定在一起,并作为内核引导过程的一部分进行加载。内核然后会将这个 initrd文件作为其两阶段引导过程的一部分来加载模块,这样才能稍后使用真正的文件系统,并挂载实际的根文件系统。
b.mkinitrd命令建立要载入ramdisk的映像文件,以供Linux开机时载入ramdisk.
例如你自己修改了一个设备的驱动,如果这个驱动要加入核心级别的话,就需要对核心进行重新封包,把新加的配置编译到核心内部去。
选项说明:
-f:若指定的映像问家名称与现有文件重复,则覆盖现有的文件;
-v:执行时显示详细的信息;
--omit-scsi-modules:不要载入SCSI模块;
--preload=<模块名称>:指定要载入的模块;
--with=<模块名称>:指定要载入的模块;
--version:显示版本信息。
!!!--preload与--with 的区别:
--preload:该模块将在所有 scsi 模块被加载之前先被加载。
--with:同时该模块将在所有 scsi 模块加载后被加载。
查看结果:
vmware转了qcow2格式后,能够正常运行,并能获取相应信息。耗时长,但幸好结局完美。
总结:
加载模块有3种方式:
1.在/etc/syscofig/modules/目录下建立*.modules文件,相应模块加进去;
2.编辑/etc/rc.modules文件,按照其它模块规则;
3.直接加进initramfs。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)