如何简化内核工作

什么是内核?

内核是一个软件,它是操作系统的核心。 它通常可以完全控制所有服务器系统。 它通常是引导加载程序完成其任务后加载的第一个程序。 然后内核处理其余的启动任务以及来自系统软件的 i/o 请求。 然后它将这些请求转换为 CPU(中央处理单元)的硬件指令。

内核还控制内存分配,以及硬件外围设备,如键盘、鼠标、显示器、打印机和连接到系统的任何其他硬件。

为什么有用?

内核的作用是控制以下主要服务器功能:

  • 资源管理
  • 内存管理
  • 设备管理
  • 系统调用

计算机系统的核心包含在这些重要角色中。

如何让我的内核保持最新状态?

为确保我们的系统是最新的并拥有最新的软件,CentOS 和 Ubuntu 都每晚运行更新。 这些更新推送最新的软件版本(包括内核),并且可以包含更新的硬件模块以改进服务器的功能。 一旦安装了这些更新并看到它们正常工作,我们应该删除较旧的内核版本以节省空间并减少服务器上的混乱。

为了快速了解 CentOS 7 系统属性,我们运行:

root@host:~$ uname -a
Linux host.mylwinfo.com 3.10.0-862.14.4.el7.x86_64 #1 SMP Wed Sep 26 15:12:11 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

uname 命令的标志如下:

-a, --all
       print all information, in the following order, except omit -p and -i if unknown:
-s, --kernel-name
       print the kernel name
-n, --nodename
       print the network node hostname
-r, --kernel-release
       print the kernel release
-v, --kernel-version
       print the kernel version
-m, --machine
       print the machine hardware name
-p, --processor
        print the processor type or "unknown"
    -i, --hardware-platform
        print the hardware platform or "unknown"
    -o, --operating-system
        print the operating system
    --help display this help and exit
    --version
        output version information and exit

如何查看我当前使用的内核?

uname -r 命令(适用于 Ubuntu 和 CentOS)标识当前使用的内核版本。

root@host [~]# uname -r
3.10.0-862.14.4.el7.x86_64

如何查看我存储了多少内核?

在 CentOS 7 服务器上,我们目前有两个内核版本。 我们可以通过运行以下命令来验证这一点:

root@host [~]# rpm -q kernel 
kernel-3.10.0-862.14.4.el7.x86_64
kernel-3.10.0-1062.4.1.el7.x86_64

此命令列出所有存储的内核版本。

在 Ubuntu 服务器上,我们运行以下命令,它将显示可用的内核。

root@host:~# dpkg --list | grep linux-image
ii linux-image-4.15.0-13-generic 4.15.0-13.14 amd64 Linux kernel image for version 4.15.0 on 64 bit x86 SMP
ii linux-image-4.15.0-50-generic 4.15.0-50.54 amd64 Signed kernel image generic
ii linux-image-virtual 4.15.0.50.52 amd64 Virtual Linux kernel image

如何查看我当前运行的内核版本?

当我们在 Ubuntu 18.04 中运行以下命令时可以看到这一点

root@host:~# uname -sr
Linux 4.15.0-50-generic
root@host:~#

当我们在 CentOS7 中运行相同的命令时。

root@host [~]# uname -sr
Linux 3.10.0-862.14.4.el7.x86_64
root@host [~]#

此命令标识服务器上正在使用的当前内核版本。 此命令适用于 Ubuntu 和 CentOS。

为什么内核版本不同?

所有 Linux 发行版都使用一个版本的 Linux 内核,但是,每个操作系统在功能和特性方面都有不同的要求。 因此,每个 Linux 版本都会将代码添加到修改后的内核中,以使其最适合该特定发行版。 这就是为什么您会看到一些 Linux 发行版使用 5.0x 内核版本,而另一些将使用 4.15x,还有一些使用 3.10x 版本。 这是否意味着 3.x 内核比 5.x 内核更老? 不必要。 这将取决于 Linux 发行版本身以及开发人员如何实现其内核版本的编号方案。

Ubuntu 内核版本号是如何分解的?

假设我们有一个在 Ubuntu 中定义为“5.3.0-19-generic”的内核版本。 该操作系统的内核版本控制系统可以分为四个部分:

-基本内核版本–ABI编号–上传编号–风味-
5 .3 0-19 通用

你问什么是ABI? ABI 或应用程序二进制接口是组件之间的通信网关,可促进这些元素之间的交互。 ABI 只是确定代码的一部分如何与代码的另一部分对话。

CentOS 内核版本号是如何分解的?

在基于 Redhat 7 的系统中,内核也分为多个部分:

-主要内核版本–主要修订版–patch-build–架构-
3.10 0-862 14.4.el7 x86_64

由于 Red Hat Enterprise Linux 8 (Ootpa) 现在仿照 Fedora 28,它包含4.18的上游Linux内核版本。 在每个主要的 RHEL 版本中,内核版本都固定为该初始版本的时间,并且任何其他安全补丁或驱动程序更新都将向后移植到该内核版本中。 您可以了解更多关于 Linux 内核版本编号 这里。

如何删除旧的未使用内核版本?

方法一:

如果您的系统上存储了多个内核版本,最好将它们限制为预定义的数量。 存储的内核过多会导致磁盘空间问题,尤其是因为它们通常存储在 /boot 文件夹中,可用空间有限。 我们的建议? 只保留你需要的东西。

我们将用来删除旧内核的第一种方法是使用 yum remove 命令。 使用此命令,我们可以手动选择单个内核版本并将其删除:

root@host [~]# yum remove kernel-3.10.0-1062.4.1.el7.x86_64
Loaded plugins: fastestmirror
Resolving Dependencies
--> Running transaction check
---> Package kernel.x86_64 0:3.10.0-1062.4.1.el7 will be erased
--> Finished Dependency Resolution

Dependencies Resolved

====================================================
 Package Arch Version Repository Size
====================================================
Removing:
 kernel.x86_64 0:3.10.0-1062.4.1.el7

Transaction Summary
====================================================
Remove 2 Packages

Installed size: 284 M 
Is this ok [y/N]:
y

如何自动删除未使用的内核版本?

方法二:

我们可以使用 package-cleanup 命令自动删除未使用的内核。 此命令是 yum-utils 软件包的一部分。 我们可以使用此命令删除两个最旧的内核:

root@host:~# package-cleanup --oldkernels --count=2 

package-cleanup 命令清除本地安装的、重复的或孤立的 RPM 包。

默认情况下,CentOS 会保留您系统上安装的最后五个内核。 以下行定义位于 /etc/yum.conf 文件中的默认设置:

installonly_limit=5

如果我们想将存储在系统中的未使用内核的数量限制为两个,我们必须将 /etc/yum.conf 配置文件中的行修改为:

installonly_limit=2

修改后,保留的最大内核数为两个。

如果进行了系统更新并添加了新的内核版本,此设置将允许删除最旧的未使用内核,同时保留三个最新的内核版本。

这是一个 example 修改后的 /etc/yum.conf 配置文件。 如您所见,它设置为仅保留最后两个内核版本:

[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=2

以下是您可能会发现有用的其他几个命令:

root@host:~# package-cleanup remove old kernels
root@host:~# package-cleanup --oldkernels --keepdevel

有关此主题和其他内核相关主题的更多详细信息,请访问:
Unix 内核概述
简而言之 Linux 内核