CentOS7升级Linux内核

什么是Linux内核

虽然时候使用 Linux 来表示整个操作系统,严格地说,Linux 只是个内核,而发行版的操作系统是一个完整功能的系统,它建立在内核之上,具有各种各样的应用程序工具和库。在正常操作期间,内核负责执行两个重要任务:

  1. 作为硬件和系统上运行的软件之间的接口
  2. 尽可能高效地管理系统资源

为此,内核通过内置的驱动程序或以后可作为模块安装的驱动程序与硬件通信。例如,当你计算机上运行的程序想要连接到无线网络时,它会将该请求提交给内核,内核又会使用正确的驱动程序连接到网络。随着新的设备和技术更新,如果想充分利用它们,保持最新的内核就很重要。此外,更新内核更好的利用新的内核函数,并保护系统免受先前版本中发现的漏洞的攻击。

查看正在使用的内核版本

命令行执行 uname -sr

  1. [root@hadoop104 ~]# uname -sr
  2. Linux 5.4.123-1.el7.elrepo.x86_64

查看所有已安装的内核版本

在CentOS操作系统启动时会有一个界面展示所有已安装的Linux内核,可以通过键盘上的上下箭头按键控制启动操作系统所使用的内核版本,如果不做任何操作会等待几秒钟自动现在默认的内核版本

yum在线升级ELRepo仓库中最新内核版本

通过yum install -y kernel直接升级内核是最保险的升级方式,因为安装的是操作系统发行厂商验证过兼容性的rpm包,升级风险一般很小。但是,这只会升级内核到仓库中可用的最新版本,而不是在 https://www.kernel.org/ 中可用的最新版本,Red Hat (红帽linux系统)只允许使用yum方式升级内核。与 Red Hat 不同的是CentOS 允许使用 ELRepo,这是一个第三方仓库,可以将内核升级到最新版本。

CentOS7启用 ELRepo 仓库

在命令行执行如下命令启用ELRepo 仓库

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

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

  1. [root@localhost ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
  2. [root@localhost ~]# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
  3. Retrieving http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
  4. Retrieving http://elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
  5. Preparing...                          ################################# [100%]
  6. Updating / installing...
  7.    1:elrepo-release-7.0-4.el7.elrepo  ################################# [ 50%]
  8. Cleaning up / removing...
  9.    2:elrepo-release-7.0-3.el7.elrepo  ################################# [100%]

仓库启用后,可以使用下面的命令列出可用的内核相关包:

yum --disablerepo="*" --enablerepo="elrepo-kernel" list available

  1. [root@localhost ~]# yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
  2. Loaded plugins: fastestmirror
  3. Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
  4. Loading mirror speeds from cached hostfile
  5.  * elrepo-kernel: mirrors.neusoft.edu.cn
  6. Available Packages
  7. kernel-lt.x86_64                        4.4.166-1.el7.elrepo       elrepo-kernel
  8. kernel-lt-devel.x86_64                  4.4.166-1.el7.elrepo       elrepo-kernel
  9. kernel-lt-doc.noarch                    4.4.166-1.el7.elrepo       elrepo-kernel
  10. kernel-lt-headers.x86_64                4.4.166-1.el7.elrepo       elrepo-kernel
  11. kernel-lt-tools.x86_64                  4.4.166-1.el7.elrepo       elrepo-kernel
  12. kernel-lt-tools-libs.x86_64             4.4.166-1.el7.elrepo       elrepo-kernel
  13. kernel-lt-tools-libs-devel.x86_64       4.4.166-1.el7.elrepo       elrepo-kernel
  14. kernel-ml-devel.x86_64                  4.19.8-1.el7.elrepo        elrepo-kernel
  15. kernel-ml-doc.noarch                    4.19.8-1.el7.elrepo        elrepo-kernel
  16. kernel-ml-headers.x86_64                4.19.8-1.el7.elrepo        elrepo-kernel
  17. kernel-ml-tools.x86_64                  4.19.8-1.el7.elrepo        elrepo-kernel
  18. kernel-ml-tools-libs.x86_64             4.19.8-1.el7.elrepo        elrepo-kernel
  19. kernel-ml-tools-libs-devel.x86_64       4.19.8-1.el7.elrepo        elrepo-kernel
  20. perf.x86_64                             4.19.8-1.el7.elrepo        elrepo-kernel
  21. python-perf.x86_64                      4.19.8-1.el7.elrepo        elrepo-kernel

安装最新的主线稳定内核

执行命令安装最新版本的内核

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

安装过程日志截图:

安装指定版本的内核

如果最新版本较高,而使用的centos版本较低,则会导致升级完内核后导致启动失败,那么就需要安装指定版本的内核而不是最新版本,如使用centos7.4默认安装内核版本列表发现为5.15,如果此时安装最新的则系统不能正常启动,并且旧内核没删(一个系统中可以同时存在多个内核),此时可以在重启机器时选择旧内核启动,然后再进行操作

如果想要安装指定版本的内核,则执行yum命令时将最后一个kernel-ml-devel修改为指定的版本如

yum --enablerepo=elrepo-kernel install kernel-lt.x86_64

重启机器并应用最新内核

内核安装完成之后重新启动操作系统,在系统显示内核列表时通过键盘的上下按键选择需要使用的内核版本,启动完成后然后通过 uname –sr 命令查看正在使用的内核版本

设置 GRUB 默认的内核版本

新安装的Linux内核并不会自动设置成默认的启动内核版本,需要每次在操作系统启动时手动制定,这样很不方便,可通过修改 GRUB 配置让新安装的内核成为默认启动选项,操作步骤如下

并编辑 /etc/default/grub 文件 并设置 GRUB_DEFAULT=0 的值

  1. GRUB_TIMEOUT=5
  2. GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
  3. GRUB_DEFAULT=0
  4. GRUB_DISABLE_SUBMENU=true
  5. GRUB_TERMINAL_OUTPUT="console"
  6. GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
  7. GRUB_DISABLE_RECOVERY="true"

GRUB_DEFAULT=0。该值设置位0时表示 GRUB 初始化页面的第1个内核将作为默认内核,GRUB 初始化页面的内核列表从0开始计数,如果设置位1则表示 GRUB 初始化页面的第2个内核将作为默认内核,依次类推,具体设置的值根据实际情况进行设置。

重新创建内核配置

运行下面的命令来重新创建内核配置

grub2-mkconfig -o /boot/grub2/grub.cfg

  1. [root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
  2. Generating grub configuration file ...
  3. Found linux image: /boot/vmlinuz-5.4.160-1.el7.elrepo.x86_64
  4. Found initrd image: /boot/initramfs-5.4.160-1.el7.elrepo.x86_64.img
  5. Found linux image: /boot/vmlinuz-4.19.8-1.el7.elrepo.x86_64
  6. Found initrd image: /boot/initramfs-4.19.8-1.el7.elrepo.x86_64.img
  7. Found linux image: /boot/vmlinuz-3.10.0-957.el7.x86_64
  8. Found initrd image: /boot/initramfs-3.10.0-957.el7.x86_64.img
  9. Found linux image: /boot/vmlinuz-0-rescue-3ff67f2764b042908e12a7b7b8a73c2d
  10. Found initrd image: /boot/initramfs-0-rescue-3ff67f2764b042908e12a7b7b8a73c2d.img

重启操作系统并验证GRUB 初始化页面选择默认内核是否为设置的是否一致

手动编译离线升级内核

手动编译升级风险是比较大的,轻则可能会导致应用的兼容性问题,重则系统可能就启不来了(当然旧内核没删还是可以选旧内核来启动,前提是显示器能直连机器而不是ssh)

但如果想要升级到不是官方使用的内核版本,那么只能使用手动编译的方式升级内核

下载

Linux内核管阀下载地址

https://www.kernel.org/pub/linux/kernel/

这里以4.19.99版本为例下载

编译安装

上传文件linux-4.19.99.tar.gz到服务器

解压:tar -zxvf linux-4.19.99.tar.gz

编译,依次执行如下命令

cd linux-4.19.99 #编译命令make必须要进入到解压文件夹下执行

make mrproper

make clean

make oldconfig

make

make modules_install

make install

编译命令表示的含义

make mrproper和make clean

这两条用于清除之前编译生成的.ko和.config

make oldconfig

设置内核配置,也可以使用make config和make default代替,不同方式表示的含义如下:

make oldconfig行表示使用当前内核一样的配置,一般情况下新的功能要自己选择而且项数还很多,好在新功能的选择都有默认选项,如果不在意这些新功能可以直接一直回车即可。

make config是每项都要自己选择,这个除了对配置非常熟悉且明白需要什么配置,一般不建议使用。

make default是直接使用linux提供的默认配置,这个基本什么也不用选,在执行下一步的make编译命令时也会很快,但是也不建议用,编译快是因为很多东西都没启用,使用这个内核系统基本重启启不来了,对升级内核也没有什么意义

make

编译,一般会执行很长时间,通常在半小时以上

遇到的错误

错误1

  1. /bin/sh: bc: command not found
  2. make[1]: *** [include/generated/timeconst.h] Error 1
  3. make: *** [prepare0] Error 2

缺少bc工具,执行yum命令安装

yum install bc –y

错误2

  1.     scripts/extract-cert.c:21:25: fatal error: openssl/bio.h: No such file or directory
  2.  #include <openssl/bio.h>
  3.                          ^
  4. compilation terminated.
  5. make[1]: *** [scripts/extrac

缺少openssl-devel工具,执行yum命令安装

yum install openssl-devel -y

make modules_install

把编译出的内核模块复制到/lib/modules/${KERNEL_VERSION}

make install

最后执行的安装命令

安装完成后重启操作系统并使用最新安装的内核,使用uname –sr查看,内核是否成功替换,如果想更改启动默认的内核版本请参考章节 设置 GRUB 默认的内核版本

在Ubuntu系统中升级内核请参考链接:https://linux.cn/article-8284-1.html

CentOS7升级Linux内核的更多相关文章

  1. CentOS 7.4升级Linux内核

    CentOS 7.4升级Linux内核 [日期:2018-01-15] 来源:Linux社区  作者:straycats [字体:大 中 小] 由于最近intel出了Meltdown和Spectre两 ...

  2. centos6.5升级Linux内核步骤

    centos6.5升级Linux内核步骤 http://www.jianshu.com/p/c75f00182b4c 使用的操作系统是是centos6.5,按照官方的推荐的配置,把linux内核升级到 ...

  3. 管理员技术(三): 配置静态网络地址、 使用yum软件源 、 升级Linux内核、查找并处理文件、查找并提取文件内容

    一. 配置静态网络地址 目标: 本例要求为虚拟机 server 配置以下静态地址参数: 1> 主机名:server0.example.com    2> IP地址:172.25.0.11  ...

  4. centos 升级linux内核

    =============================================== 2018/1/14_第1次修改                       ccb_warlock == ...

  5. 升级Linux内核导致vmware无法使用(vmnet模块无法编译)解决方式

    近期将ubuntu升级到了14.04,出现了vmware无法启动的情况. 详细表现为:每次启动的时候都会弹出一个VMWare Kernel Module Updater的对话框,要求依据当前内核版本号 ...

  6. 升级 Linux 内核版本(编译源代码)

    升级内核版本(自己编译源码) 从 linux 官网 https://www.kernel.org/ 下载内核源码 解压 tar -xvf linux-4.16.8.tar.xz cd linux-4. ...

  7. centos7升级最新内核

    由于最近在测试ceph 的straw2算法,但是要使用straw2需要最新为4.1.0的内核,因此决定将虚机内核升级最新4.11.4. 步骤1.检查本机内核版本 #uname -sr 3.10.0-5 ...

  8. Centos7升级新内核

    由于觉得Centos7内核版本还不够高,就想升级下,下面是升级步骤 我使用的方法是使用yum升级内核 使用第三方仓库升级 CentOS 允许使用 ELRepo,这是一个第三方仓库,可以将内核升级到最新 ...

  9. 升级linux内核(2.6.32->3.10.81),安装docker

    1.内核升级环境准备 #查看已经安装的和未安装的软件包组,来判断我们是否安装了相应的开发环境和开发库: yum grouplist #一般是安装这两个软件包组,这样做会确定你拥有编译时所需的一切工具 ...

  10. docker安装升级linux内核(2.6.32->3.12.17)

    1.内核升级环境准备 #查看已经安装的和未安装的软件包组,来判断我们是否安装了相应的开发环境和开发库:yum grouplist#一般是安装这两个软件包组,这样做会确定你拥有编译时所需的一切工具yum ...

随机推荐

  1. Tomcat实战之路

    目录 第一节.安装升级 1.1.linux初始化 1.2.安装 1.3.升级 第二节.配置 2.1.虚拟主机 2.2.默认网站首页路径 2.3.跳转 2.4.配置Tomcat日志 第三节.安全 3.1 ...

  2. 撸了一个简易的配置中心,顺带整合到了SpringCloud

    大家好,我是三友~~ 最近突然心血来潮(就是闲的)就想着撸一个简单的配置中心,顺便也照葫芦画瓢给整合到SpringCloud. 本文大纲 配置中心的概述 随着历史的车轮不断的前进,技术不断的进步,单体 ...

  3. SpringBoot(七) - Redis 缓存

    1.五大基本数据类型和操作 1.1 字符串-string 命令 说明 set key value 如果key还没有,那就可以添加,如果key已经存在了,那会覆盖原有key的值 get key 如果ke ...

  4. SDOI2017树点染色

    题目链接 发现1操作很像lct中的access,然后它每次染的又是一个新颜色,因此同一个颜色就在同一颗splay里了,且一个点到根的权值val[i]也就是到根路径上虚边的个数,然后看access时会对 ...

  5. Vue学习之--------列表排序(ffilter、sort、indexOf方法的使用)、Vue检测数据变化的原理(2022/7/15)

    文章目录 1.列表排序 1.1 .代码实例 1.2 .测试效果 1.3.需要掌握的前提知识 2.Vue监测数据变化的原理 2.1.代码实例 2.2 .测试效果 3.Vue检测数据的原理 3.1 基本知 ...

  6. 知识图谱顶会论文(ACL-2022) CAKE:用于多视图KGC的可扩展常识感知框架

    CAKE:用于多视图KGC的可扩展常识感知框架.pdf 论文地址:CAKE:Scalable Commonsense-Aware Framework For Multi-View Knowledge ...

  7. Pycharm和IDEA利用Git操作Github仓库

    1. Git Bash 选择一个本地代码仓库文件夹:D:/Github_Code/新建文件夹,然后在此目录打开git bash 依次进行: git init //首次需执行,之后可不用 git add ...

  8. 如何kill一条TCP连接?

    原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介 如果你的程序写得有毛病,打开了很多TCP连接,但一直没有关闭,即常见的连接泄露场景,你可能想要在排查问题的过程中, ...

  9. raid 5搭建部署

    raid 5搭建部署 软raid与备份 1.用四块磁盘做实验,三块盘搭建raid阵列组,有一块当作备份可以使用raid 5来搭建三块磁盘的阵列组 创建命令如下: [root@xiaohaoge ~]# ...

  10. 来啦来啦|开源 * 安全 * 赋能 - .NET Conf China 2022

    大会介绍 .NET Conf China 2022 是面向开发人员的社区峰会,延续 .NET Conf 2022 的活动,庆祝 .NET 7 的发布和回顾过去一年来 .NET 在中国的发展成果,它是由 ...