1、首先查看服务器的centos版本

cat /etc/centos-release

2、查看服务器的内核版本

uname -r

发现服务器的内核版本确实比较低。

3、导入public key

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

4、 安装ELRePo到centos-6.5中

这里有个需要注意的是elrepo-release-6-8.el6.elrepo.noarch.rpm这是针对centos6.0+版本的,很多博客写的都是elrepo-release-6-6.el6.elrepo.noarch.rpm。现在6-6的版本已经下载不到,只有6-8的版本是可以下载的,这个版本就是针对centos6.x的

rpm -Uvh http://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm

5、安装kernel-lt(lt=long-term)

yum --enablerepo=elrepo-kernel install kernel-lt -y

或者安装kernel-ml(ml=main line)

yum --enablerepo=elrepo-kernel install kernel-ml -y

6、编辑grub.conf,修改grub引导顺序

vim /etc/grub.conf

可以看到文档内容中有:

default=0
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS (4.4.180-1.el6.elrepo.x86_64)
        root (hd0,0)
        kernel /boot/vmlinuz-4.4.180.....................

将default的值修改为我们新安装的内核,我这里将default=1改为default=0。

7、阿里云的服务器要注意的坑

对于 CentOS,OpenSUSE,SLES (SUSE Linux Enterprise Server) 和 Aliyun Linux,升级 Linux 实例后启动失败,可能是因为升级后的内核对应的 initrd 文件中没有 virtio-blk 和 xen-blkfront 驱动。而 Debian 和 Ubuntu 的 virtio-blk 和 xen-blkfront 驱动是内核内置的,所以不存在这个可能性。

**什么是 initrd 文件 **

initrd(initial ramdisk)是用于载入临时 root 文件系统到磁盘中的,运行于 Linux 实例启动阶段。起同样作用的还有 initramfs 文件,虽然 initrd 和 initramfs 是两种不同的操作概念,但这两个文件都活跃在启动实例时挂载 root 文件系统之前。

可以直接升级内核的系统镜像

阿里云优化了镜像名称 image_no 中时间戳从 20161115 开始的镜像公共系统镜像内核,这些镜像的 initrd 文件不会因为缺失 virtio-blk 和 blkfront 驱动的情况而导致启动失败。如下所示:

  • centos_6u8_64_40G_cloudinit_20161115.vhd
  • centos_6u8_32_40G_cloudinit_20161115.vhd
  • centos_5u11_64_40G_cloudinit_20161115.vhd
  • centos_5u11_32_40G_cloudinit_20161115.vhd
  • centos_6_8_64_40G_base_20170222.vhd
  • centos_6_8_32_40G_base_20170222.vhd
  • centos_7_2_64_40G_base_20170222.vhd
  • centos_5_11_64_40G_base_20170222.vhd
  • centos_5_11_32_40G_base_20170222.vhd
  • centos_6_08_64_20G_alibase_20170824.vhd
  • debian_8_09_64_20G_alibase_20170824.vhd

如何优化内核并避免启动失败

编辑系统配置文件,若配置文件中缺失下列内容需要您手动加上:

  • CentOS 6 和 CentOS 7:执行 vi /etc/dracut.conf.d/virt-drivers.conf,添加 add_drivers+=" xen-blkfront virtio_blk "。
  • CentOS 5:执行 vi /etc/dracut.conf.d/virt-drivers.conf,添加 add_drivers+=" xen-vbd virtio_blk virtio_console "。
  • OpenSUSE/SUSE:执行 vi /etc/sysconfig/kernel,添加 INITRD_MODULES=" virtio_blk virtio_pci xen-vbd"。
    执行 vi /etc/dracut.conf,添加 add_drivers+="virtio_blk virtio_pci xen-vbd"。

更新内核:

  • CentOS:执行 yum install kernel。
  • OpenSUSE/SUSE:执行 zypper install kernel-default。

执行命令 lsinitrd /boot/initramfs-$(new-kernel-ver).img | grep -E 'virtio|xen' 检查并确认 initrd / initramfs 文件中已经包含了 virtio-blk 和 xen-blkfront 驱动。

必须确认 virtio-blk 和 xen-blkfront 驱动在 initrd 中才可以重启实例。先前就是因为没有注意这个initrd文件直接重启了服务器,然后服务器炸了,只能去阿里云工单去解决,先备份镜像,倒腾了好久才搞定。'

8、完成上述步骤以后,重启服务器

reboot

9、重新查看系统内核版本

uname -r

发现系统的内核版本已经升级了

10、删除系统旧的内核版本(可做可不做)

查找系统的所有内核

rpm -qa|grep kernel*

删除低版本的内核

yum remove 低版本内核

作者:wymhuster