CentOS 6内核升级到Kernel 3.x中出现的两个问题

问题:

之前制作的openstack CentOS6.5模板镜像,其内核为2.6.xx,现需要制作一个内核为3.x的centos6镜像,使用rpm包kernel-ml-3.18.3-1.el6.elrepo.x86_64.rpm升级内核,重启虚拟机出现错误:

FATAL: Module scsi_wait_scan not found.

如果你再进一步测试,就会发现,在物理机上升级内核,一切ok!

注:以下操作都是在kvm虚拟机内进行,物理机升级内核不存在这个问题

分析:

1.这个错误的出现是因为KVM中的虚拟机使用了virtio这个半虚拟化驱动来是虚拟机支持scsi设备,而物理机升级时用不到virtio驱动,自然不会有问题

2.centos6系统中使用Dracut这个程序生成系统的initramfs.img ,在内核安装过程中,Dracut识别内核模块virtio_blk.ko是通过”

“文件中给出的函数识别的,如下

在kernel3.13版本以前,Dracut是通过”blk_init_queue”这个函数安装virtio_blk.ko模块,而在kernel3.13版本之后,安装virtio_blk.ko模块需要新函数”blk_mq_init_queue”,但是centos6系统中的Dracut程序依然使用旧的函数”blk_init_queue”,因此就无法安装virtio_blk.ko 解决问题的关键在于要确保virtio_blk.ko能够被安装

第一种解决方法:

编辑文件/usr/share/dracut/modules.d/90kernel-modules/installkernel

vim /usr/share/dracut/modules.d/90kernel-modules/installkernel#第四行中的”blk_init_queue” 替换为”blk_mq_init_queue”

然后使用正常的rpm -ivh 方式安装内核包即可

注:另一种解决方案:

这种解决方案虚拟机也能够成功启动,但是不能够进行硬盘的热拔插,比如在宿主机上使用virsh attach/detach 动态为一台虚拟机加载硬盘,必须重启虚拟机才能生效,而第一种解决方法能够进行以后ing盘的hotplug,即热拔插

1.下载安装新版本内核rpm包(3.18)

这里是下载地址

rpm -ivh kernel-ml-3.18.3-1.el6.elrepo.x86_64.rpm

2.解决virtio驱动问题

#添加virtio_blk支持(新建conf文件)echo ‘add_drivers+=”virtio_blk”‘ >/etc/dracut.conf.d/force-vitio_blk-to-ensure-boot.conf#备份initramfscp /boot/initramfs-3.18.3-1.el6.elrepo.x86_64.img /boot/initramfs-3.18.3-1.el6.elrepo.x86_64.img.bak#重新编译生成initramfsdracut -f /boot/initramfs-3.18.3-1.el6.elrepo.x86_64.img 3.18.3-1.el6.elrepo.x86_64

3.修改grub.conf

default=0 #default为新内核timeout=5splashimage=(hd0,0)/grub/splash.xpm.gzhiddenmenutitle Red Hat Enterprise Linux Server (3.18.3-1.el6.elrepo.x86_64) root (hd0,0) kernel /vmlinuz-3.18.3-1.el6.elrepo.x86_64 …

Ubuntu 13.10 (Saucy Salamander) 内核已升级至 Linux Kernel 3.10 RC5

Linux Kernel 3.4.62 LTS 现已经提供下载

如何在Ubuntu 13.10上安装Linux内核 3.12

如何在Ubuntu 14.10,Ubuntu 14.04及其衍生版本安装 3.16.7 CKT2内核

Linux Kernel 的详细介绍:请点这里 Linux Kernel 的下载地址:请点这里

本文永久更新链接地址:

,所有欺骗中,自欺是最为严重的

CentOS 6内核升级到Kernel 3.x中出现的两个问题

相关文章:

你感兴趣的文章:

标签云: