内核模块已打开,但开机未加载

本文介绍从VMware格式转换为qcow2格式的KVM镜像过程中遇到的问题及解决方案,包括内核配置、模块加载等关键技术点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境:

系   统: 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。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值