阿里云centos7内核Kernel升级的方法

情况是这样的,阿里云免费赠送了7天的安骑士,于是乎便想疯狂地用安骑士来修补一把所有的漏洞,结果按照阿里云的建议的方法修补一个高危漏洞需要升级Kernel内核时把服务器“整趴了”!好在之前有预感——把服务器当前状态做了一个镜像,才不至于把肠子悔青。

问题的产生

之前按安骑士的建议直接用命令yum update kernel直接升级了Kernel,重启服务器之后似乎并没有生效,然后通过命令uname -a查询得知当前的系统内核为:
Linux 3.10.0-123.9.3.el7.x86_64
还是原来的系统内核,并没有升级到最新的3.10.0-693.5.2.el7.x86_64,然后通过以下命令来查看当前所有安装的内核:
cat /boot/grub2/grub.cfg |grep menuentry

命令行显示

可以看到确实已经安装上了,而且安装了不止一个内核,由此我便简单地以为是没有通过新内核启动到系统,因此便直接修改linux启动项到刚升级的新内核,就此拉开了悲剧的序幕,整个系统直接崩溃,重启系统后显示如下信息:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block

正在抓狂之际,欣喜地看到了阿里云官方如何避免升级 Linux 实例内核后无法启动这根救命稻草,本来故事到这里就应该愉快地结束了的,但由于文档教程上写得太模糊,再加上他们没做过全版本的测试,而我的是2015年的centos7,所以硬是折腾了我近一天的时间,好了,废话不多说直接上解决方法吧。

升级方法

1、按教程上写的编辑系统配置文件,若配置文件中缺失下列内容需要您手动加上,但这一步有没有用还真不知,因为我找到dracut.conf.d/这个目录里后发现竟然是空的,不过我还是照做新建了一个文件virt-drivers.conf,也没时间做彻底的测试:
下面引用自文档

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 "

2、更新内核,命令如下:
yum install kernel
提示:
因为我之前有执行过yum update kernel升级kernel的命令,如果有错可试着执行下看;
另外,如果执行yum update kernel升级kernel的过程中出现部分包更新的错误(我就碰到了,死活升不成功),导致中止的话可尝试yum update,记住,这会一次性更新所有的软件与工具及系统内核,所以备好份做好镜像,备好份做好镜像,备好份做好镜像,重要的事情说三遍,否则到时别哭,网络出错除外哈!

3、检查并确认 initrd / initramfs 文件包中是否已经包含了 virtio-blk 和 xen-blkfront 驱动,非常重要,是你重启后能否进系统的关键,执行的命令官方写的是:
lsinitrd /boot/initramfs-$(new-kernel-ver).img | grep -E 'virtio|xen'

但实际上这里的$(new-kernel-ver)是个变量,执行命令到/boot/目录,再列出文件可以看到你的系统内核启动相关文件,运行如下命令:

cd /boot/
ls

命令行显示

看到上面的initramfs-xxxx.img类似的文件了么?这便是我们需要的变量文件名,所以我这里的命令是:
lsinitrd /boot/initramfs-3.10.0-693.5.2.el7.x86_64.img | grep -E 'virtio|xen'

-rw-r--r--   1 root     root         7624 Oct 21 05:44 usr/lib/modules/3.10.0-693.5.2.el7.x86_64/kernel/drivers/block/virtio_blk.ko.xz
-rw-r--r--   1 root     root        12804 Oct 21 05:44 usr/lib/modules/3.10.0-693.5.2.el7.x86_64/kernel/drivers/char/virtio_console.ko.xz
-rw-r--r--   1 root     root        14276 Oct 21 05:45 usr/lib/modules/3.10.0-693.5.2.el7.x86_64/kernel/drivers/net/virtio_net.ko.xz
-rw-r--r--   1 root     root         7996 Oct 21 05:45 usr/lib/modules/3.10.0-693.5.2.el7.x86_64/kernel/drivers/scsi/virtio_scsi.ko.xz
drwxr-xr-x   2 root     root            0 Nov 30 19:45 usr/lib/modules/3.10.0-693.5.2.el7.x86_64/kernel/drivers/virtio
-rw-r--r--   1 root     root         4340 Oct 21 05:45 usr/lib/modules/3.10.0-693.5.2.el7.x86_64/kernel/drivers/virtio/virtio.ko.xz
-rw-r--r--   1 root     root         9488 Oct 21 05:45 usr/lib/modules/3.10.0-693.5.2.el7.x86_64/kernel/drivers/virtio/virtio_pci.ko.xz
-rw-r--r--   1 root     root         8136 Oct 21 05:45 usr/lib/modules/3.10.0-693.5.2.el7.x86_64/kernel/drivers/virtio/virtio_ring.ko.xz

从系统回显的内容看到文件中已经包含了 virtio-blk 或 xen-blkfront 驱动即可,记住一定必须确认 virtio-blk 和 xen-blkfront 驱动在 initrd 中才可以重启实例。

好了,祝升级顺利~

附:参考文档

  • 云服务器 ECS Linux CentOS 修改内核引导顺序
  • CVE-2016-5195:“脏牛(Dirty Cow)”漏洞-Linux 内核本地提权漏洞 通告及修复
  • 如何避免升级 Linux 实例内核后无法启动

你可能感兴趣的:(阿里云centos7内核Kernel升级的方法)