linux降内核版本

您所在的位置:网站首页 ubuntu降内核 linux降内核版本

linux降内核版本

2023-12-28 07:46| 来源: 网络整理| 查看: 265

前言

相信现在很多公有云包括企业内部已经开始使用Linux内核热补丁Livepatch,没人喜欢重启机器但现实是还得再等等。通常升级内核可能有多种原因,频率最高的比如修复安全漏洞,然而我们也会遇到需要降级内核的情况,比如向下兼容或者升级后产生新的严重Bug需要回退。本文主要以CentOS为例介绍内核的升级和降级方案,虽然官方一直坚持使用旧内核3.10版本,但这也是追求极致稳定的权衡结果,有高版本内核需求比如4.10以上我们可以手动升级也可以更换Ubuntu等其它操作系统,对线上生产环境始终保持一颗敬畏之心。

Linux kernel内核升级和降级的方法实践

更新历史

2019年01月27日 - 初稿

扩展阅读

Linux 内核简介

Linux 内核是一个整体的类 Unix 计算机操作系统内核。通常我们使用的 Linux 发行版,如 Red Hat、Debian、SUSE 等,这些都称为 Linux 的分发版。一个典型的分发版,是由 Linux 内核,以及支持的许多由 GNU 项目提供的应用程序、GNU 组件,C 标准库,CLI shell,X windows 等组成的一个完整操作系统。我们应该要知道的是,Linux 的定义仅仅是 Linux 内核,所有的”Linux” 发行版实际上是以 Linux 为内核的 GNU 系统的版本。不同的 Linux 内核版本都有其生命周期,Linux 内核组织或 Linux 发行版厂商只在该日期提供错误或漏洞修复,我们可以从从内核的版本号区分辨别,比如版本 3.16.43,该数字 3.16 表示一个长期版本,43 则表示错误修订之后再发行的具体版本号,当然我这里描述的只是提供一个参考价值,更细致的版本还有可能是 3.16.43-1 这种。值得我们关注的是,任何内核版本错误修复后的再发布版本都应该是我们考虑升级使用的内核版本。

Linux 内核版本

Linux 内核版本分为主线、稳定和长期版本。所有内核版本都可以在内核开发官方网站 https://www.kernel.org 上获取,目前我们看到最新的稳定内核版本为 4.20.5。

主线版本代表整个 Linux 内核的一个树干,新的主线版本每 2-3 个月发布一次,所有的新功能及特性都将会包含主线版本中。稳定内核则是在主线版本中,被认为是” 稳定的” 得出。稳定内核的任何错误修复都将从主线树中返回,也就是主线内核出现的任何错误 (包括之前的任何旧版本内核的错误和 BUG) 在得到修复之后才会被指定为稳定内核,所以在通常情况下,稳定内核既有内核新功能,同时 BUG 也是最少的内核版本。稳定内核的更新发布依赖于主线内核 (直到下一个主线内核可用),稳定的内核更新是根据需要发布的,通常是每 3 个月。而对于长期内核版本,通常提供几个” 长期维护” 内核版本,用于较早的内核树错误修复返回的目的。这些内核只应用重要的错误修复,通常不会有非常频繁的更新。

主线、稳定和长期都是活动内核版本,由 Linus Torvalds 及 Linux 内核组织维护和释放。 而我们平时所使用的 Linux 发行版的内核都为分发内核,许多 Linux 发行版都提供自己的” 长期维护” 内核版本,这些内核可能是也可能不是基于内核开发人员维护的内核。因此分发版本的内核版本由发行版的厂商决定并有自己的维护周期,通常由分发版更新时一起发布。

安装 / 升级新内核的目的

许多出于对安全的考虑,如避免以前版本中发现的漏洞

更充分地认识内核,了解内核的各个内核模块和功能

更好的利用 / 体验新内核的的新功能和特性

安装 / 升级的方法和建议

对于 CentOS/RHEL 系统,尽量使用 yum 方式或 RPM 包安装 / 升级内核,需要注意的是红帽的 Red Hat Linux 服务需要订阅。

使用安装新内核而不是直接升级内核,安装新内核不会覆盖旧内核,而升级会导致新内核直接替换旧内核,可能会导致系统无法启动,安装也可以让我们在升级后有回滚的选择。

一般地,对于大多数 Linux 分发版,使用 yum/dnf 和分发版布官方的存储库来升级内核,这种方式只能升级到该分发版的存储库提供的最新版本,而不是 Linux 内核组织发布的最新内核。

如果想迅速并且安全地使用最新内核,对于 CentOS/RHEL 系统并不支持 yum 的方式直接安装或升级。那么此时我们可以使用 ELRepo(第三方存储库) 进行内核安装升级。

下载新内核的源码包进行编译安装,这种方式有助于我们更细致地学习内核底层知识,但在生产环境中不推荐编译安装。

尽量使用最新的 Linux 发行版,新的 Liunx 发行版包含该发行版维护的新内核,如果有必要,那么请使用如 yum upgrade 或者 yum update 来更新你的系统。对于 Ubuntu、Debian 等发行版,使用 apt-get update 方式来更新。

内核软件包介绍

kernel

Linux 内核软件包,包含单、多核和多处理器系统的内核,是任何 Linux 操作系统的核心,单处理器的系统仅需安装内核包。内核处理操作系统的基本功能: 内存分配、进程分配、设备输入和输出等

kernel-devel

包含提供足够的针对内核软件包构建模块的内核头文件和 makefile 文件

kernel-headers

包含指定 Linux 内核、用户空间库文件和程序之间指定接口的 C 头文件。头文件定义了构建大多数标准程序所需的结构和常量,也是重建 glibc 软件包所必需的

kernel-doc

包含来自内核源代码的文档文件。各种关于 Linux 内核和设备以及驱动程序的信息都记录在这些文件当中

kernel-firmware

包含对于某些设备及其操作的固件信息文件

kernel-debug

包含许多对于内核 debug 诊断和调试的启用选项,只有当我们需要尝试收集额外的内核错误信息时才应该安装它。它是以牺牲性能为代价

kernel-debug-devel

包含内核 debug 诊断和调试的启用选项,以牺牲性能为代价

在 CentOS 上安装 / 升级内核

Linux 内核升级通常有两种方式

下载新版内核到服务器上,进行编译安装,之后删除老内核, 优点是:可完全控制编译项, 缺点是:慢,且容易失败;

采用 yum 方式安装, 优点是:快捷方便,成功率高。

我这里采用第二种方式来安装, 采用 yum 安装最多也就三五分钟的事, 万一失败还能补救。

Linux OS version: CentOS Linux release 7.5.1804 (Core)

Linux kernel 升级原因: CPU性能优化

Linux kernel 当前版本: 3.10.0-862.el7.x86_64

Linux kernel 目标版本: 3.10.0-862.14.4.el7.x86_64

# 查看当前操作系统版本

cat /etc/redhat-release

CentOS Linux release 7.5.1804 (Core)

# 查看当前内核

uname -r

3.10.0-862.el7.x86_64

# 查看yum可升级的内核版本

yum list kernel --showduplicates

Installed Packages

kernel.x86_64 3.10.0-862.el7 @anaconda

kernel.x86_64 3.10.0-862.11.6.el7 @updates

Available Packages

kernel.x86_64 3.10.0-862.el7 base

kernel.x86_64 3.10.0-862.2.3.el7 updates

kernel.x86_64 3.10.0-862.3.2.el7 updates

kernel.x86_64 3.10.0-862.3.3.el7 updates

kernel.x86_64 3.10.0-862.6.3.el7 updates

kernel.x86_64 3.10.0-862.9.1.el7 updates

kernel.x86_64 3.10.0-862.11.6.el7 updates

# 如果yum list中有需要的版本可以直接执行update升级,但现在的问题是没有

yum update kernel-3.10.0-862.14.4.el7.x86_64

# 可以通过Google搜索所需kernel版本,下载后离线安装升级,建议使用 -i 保留原来的内核方便版本回退

ftp://ftp.riken.jp/Linux/cern/centos/7/updates/x86_64/repoview/kernel.html

wget ftp://ftp.riken.jp/Linux/cern/centos/7/updates/x86_64/Packages/kernel-3.10.0-862.14.4.el7.x86_64.rpm

# 安装完成之后重启会自动修改启动项切换至新内核

rpm -ivh kernel-3.10.0-862.14.4.el7.x86_64.rpm

init 6

在 CentOS 上降级内核

和之前Kernel升级的原因一样,降级也是因为CPU性能优化,建议各位仔细评估线上环境所需的版本

Linux OS version: CentOS Linux release 7.6.1810 (Core)

Linux kernel 降级原因: CPU性能优化

Linux kernel 当前版本: 3.10.0-957.1.3.el7.x86_64

Linux kernel 目标版本: 3.10.0-862.6.3.el7.x86_64

# 查看当前操作系统版本

cat /etc/redhat-release

CentOS Linux release 7.6.1810 (Core)

# 查看当前内核

uname -r

3.10.0-957.1.3.el7.x86_64

# 下载制定版本内核覆盖安装

wget ftp://ftp.riken.jp/Linux/cern/centos/7/updates/x86_64/Packages/kernel-3.10.0-862.6.3.el7.x86_64.rpm

rpm -ivh kernel-3.10.0-862.6.3.el7.x86_64.rpm

# 禁止yum自动升级kernel(可选)

vim /etc/yum.conf

exclude=kernel*

Kernel Change Log

最后给大家分享下官方的Kernel Change Log,方便各位了解自己目前所用的版本是否合理

The kernel package contains the Linux kernel (vmlinuz), the core of any Linux operating system. The kernel handles the basic functions of the operating system: memory allocation, process allocation, device input and output, etc.

Architecture: x86_64

Version: 3.10.0-957.el7[系列]

2018-11-15 Jan Stancek [3.10.0-957.1.3.el7]

- [x86] Mark Intel Cascade Lake supported (Steve Best) [1650213 1639980]

2018-11-01 Jan Stancek [3.10.0-957.1.1.el7]

- [x86] boot: Fix kexec booting failure in the SEV bit detection code (Kairui Song) [1644990 1628828]

- [net] 8021q: create device with all possible features in wanted_features (Davide Caratti) [1644675 1640645]

- [mm] memcontrol: fix high scheduling latency source in mem_cgroup_reparent_charges (Andrea Arcangeli) [1644673 1632898]

- [kernel] cpuset: use trialcs->mems_allowed as a temp variable (Aristeu Rozanski) [1644236 1613248]

- [kernel] cpuset: fix a warning when clearing configured masks in old hierarchy (Aristeu Rozanski) [1644236 1613248]

- [kernel] cpuset: initialize effective masks when clone_children is enabled (Aristeu Rozanski) [1644236 1613248]

- [x86] efi: Only load initrd above 4g on second try (Lenny Szubowicz) [1643359 1608955]

- [x86] efi: Support initrd loaded above 4G (Lenny Szubowicz) [1643359 1608955]

- [x86] efi: Generalize handle_ramdisks() and rename to handle_cmdline_files() (Lenny Szubowicz) [1643359 1608955]

- [kernel] sched/fair: Fix throttle_list starvation with low CFS quota (Phil Auld) [1640675 1601153]

- [target] scsi: iscsi: Use bin2hex instead of a re-implementation (Maurizio Lombardi) [1634711 1627034] {CVE-2018-14633}

- [target] scsi: iscsi: Use hex2bin instead of a re-implementation (Maurizio Lombardi) [1634711 1627034] {CVE-2018-14633}

2018-11-01 Jan Stancek [3.10.0-957.1.2.el7]

- [net] rtnetlink: give a user socket to get_target_net() (Jiri Benc) [1639635 1630694] {CVE-2018-14646}

- [net] Add variants of capable for use on on sockets (Jiri Benc) [1639635 1630694] {CVE-2018-14646}

2018-10-04 Bruno E. O. Meneguele [3.10.0-957.el7]

- [mm] mlock: avoid increase mm->locked_vm on mlock() when already mlock2(, MLOCK_ONFAULT) (Rafael Aquini) [1633059]

2018-10-03 Bruno E. O. Meneguele [3.10.0-955.el7]

- [netdrv] net/mlx5e: IPoIB, Set the netdevice sw mtu in ipoib enhanced flow (Alaa Hleihel) [1633652]

- [netdrv] net/mlx5e: Fix traffic between VF and representor (Alaa Hleihel) [1633652]

- [mm] vmscan: do not loop on too_many_isolated for ever (Waiman Long) [1632050]

2018-10-03 Bruno E. O. Meneguele [3.10.0-956.el7]

- [block] blk-mq: fix hctx debugfs entry related race between update hw queues and cpu hotplug (Ming Lei) [1619988]

- [nvme] nvme-pci: unquiesce dead controller queues (Ming Lei) [1632424]

2018-09-24 Bruno E. O. Meneguele [3.10.0-954.el7]

- [fs] exec: Limit arg stack to at most 75 of _STK_LIM (Yauheni Kaliuta) [1625991] {CVE-2018-14634}

- [fs] exec: account for argv/envp pointers (Yauheni Kaliuta) [1625991] {CVE-2018-14634}

- [kernel] revert "sched/topology: Introduce NUMA identity node sched domain" (Gustavo Duarte) [1620031]

- [powerpc] revert "powernv: Add a virtual irqchip for opal events" (Gustavo Duarte) [1617966]

- [powerpc] revert "powernv: Reorder OPAL subsystem initialisation" (Gustavo Duarte) [1617966]

- [char] revert "i



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3