管理 Azure Linux 内核

Azure Linux 是基于最新声明的长期支持 (LTS) Linux 内核版本 6.18 构建的。 此内核提供稳定性、安全性和新式硬件和云支持的平衡组合,并充当每个 linux 部署Azure的基础。

本文介绍如何检查正在运行的内核、使用内核模块,以及如何在 Azure Linux 系统上的运行时查看或更改内核参数。

Note

Azure Linux 4.0 现在位于 preview 中,严格限制为评估和测试目的。 它不适合生产用途。

先决条件

  • 可以使用 shell 访问进行身份验证的 Azure Linux 系统。
  • 具有特权的 sudo 用户帐户,这是加载或卸载内核模块和更改内核参数所必需的。

检查正在运行的内核

以下部分演示如何收集有关Azure Linux 系统当前运行的内核的信息,包括内核版本、启动参数、生成配置和已安装的内核包。

显示内核版本

使用命令确定系统当前运行的 uname -r 内核的确切版本:

uname -r

输出显示内核发布字符串,其中包括上游版本、Azure Linux 生成标识符和体系结构。

显示内核启动参数

显示系统开始使用 cat /proc/cmdline 命令时传递给内核的启动参数:

cat /proc/cmdline

输出显示内核命令行,包括根设备、控制台设置以及启动加载程序应用的任何启动时间选项。

显示内核生成配置

显示用于使用 cat /boot/config-$(uname -r) 命令生成正在运行的内核的所有编译时配置选项:

cat /boot/config-$(uname -r)

此命令列出了数千个生成时选项,包括启用和禁用的功能(CONFIG_*)、安全设置、网络选项和文件系统支持,用于确定内核的编译方式。

以下示例显示了输出的一小部分:

CONFIG_RUSTC_HAS_FILE_WITH_NUL=y
CONFIG_RUSTC_HAS_FILE_AS_C_STR=y
CONFIG_IRQ_WORK=y
CONFIG_TIME_KUNIT_TEST=m
CONFIG_BPF_PRELOAD_UMD=m
CONFIG_IKHEADERS=m
# CONFIG_PREEMPT is not set
# CONFIG_PREEMPT_RT is not set
# CONFIG_PSI_DEFAULT_DISABLED is not set

配置值的含义

每个配置条目使用以下值之一:

Value 含义 Description
=y 内置 该功能以静态方式编译为主内核映像,并在内核启动后立即加载到内存中。
=m Module 该功能编译为可加载的内核模块,前提是内核中启用了模块支持。
is not set 已禁用 该功能根本没有被编译。 此状态通常显示为注释掉的行,例如 # CONFIG_X is not set

列出已安装的内核包

您的系统中可能存在多个 /boot/config-* 的副本,每个已安装的内核对应一个文件。 可以使用以下命令列出当前安装的每个内核包:

rpm -qa | grep -i kernel

输出列出所有名称中包含 kernel 的已安装软件包,例如内核映像、内核头文件以及任何与内核相关的工具。

使用内核模块

内核模块是内核按需加载和卸载以添加或删除功能(如设备驱动程序和文件系统支持)的代码片段,无需重新启动。

在磁盘上查找内核模块

内核模块存储在以下目录下:

/lib/modules

每个已安装的内核版本都有自己的子目录 /lib/modules,其中包含为该特定内核生成的模块。

浏览当前运行的内核模块

使用以下路径浏览当前运行的内核的模块:

/lib/modules/$(uname -r)

检查模块是否有其他内核版本

通过列出 /lib/modules 下可用的目录,检查这些模块是否属于其他已安装的内核版本:

ls /lib/modules

查找内核模块文件

使用以下命令找到当前运行的内核的每个内核模块文件(.ko):

find /lib/modules/$(uname -r) -type f -name "*.ko*"

加载、卸载和列出模块

使用 modprobe 命令加载或卸载内核模块,并使用 lsmod 命令查看当前内核中已加载的模块。

加载内核模块

使用以下命令加载模块。 将 <MODULE_NAME> 替换为要加载的模块名称:

sudo modprobe <MODULE_NAME>

卸载内核模块

使用以下命令卸载模块。 将 <MODULE_NAME> 替换为要卸载的模块名称:

sudo modprobe -r <MODULE_NAME>

列出当前加载的内核模块

使用以下命令列出当前在内核中加载的模块:

lsmod

输出列出了每个已加载的模块、它使用的内存量以及依赖于它的模块或子系统。

在运行时查看和修改内核参数

使用该工具 sysctl 在系统运行时查看和修改 Linux 内核参数。 内核参数可控制的方面包括:

  • 网络行为。
  • 内存分配。
  • 常规系统行为。
  • 文件系统和 I/O 行为。
  • 内核安全功能。

查看所有内核参数

使用以下命令显示每个内核参数及其当前值:

sudo sysctl -a

以下示例显示了输出的一小部分:

kernel.ftrace_dump_on_oops = 0
kernel.oops_all_cpu_backtrace = 0
kernel.oops_limit = 10000
kernel.panic_on_oops = 0

查看单个内核参数

将参数名称传递给 sysctl 以查看单个参数。 以下示例命令演示如何查看值 kernel.panic_on_oops

sysctl kernel.panic_on_oops

设置临时内核参数

仅使用以下命令更改当前启动的内核参数。 将 <SYSCTL_PARAMETER><VALUE> 替换为要设置的参数名称和值:

sudo sysctl -w <SYSCTL_PARAMETER>=<VALUE>

更改会立即生效,并一直有效,直到下次重新启动。

设置持久性内核参数

  1. 要使内核参数更改在重启后仍然生效,请按以下形式将该参数添加到 /etc/sysctl.d/99-example.conf 中:

    <SYSCTL_PARAMETER>=<VALUE>
    
  2. 使用以下命令应用更新的配置,而无需重新启动:

    sudo sysctl --system
    

    成功运行后 sudo sysctl --system ,新值将应用到正在运行的内核,并在每次系统启动时自动重新应用。

启用 kdump

Important

Kdump 需要专用磁盘空间来存储故障转储。 确保在 /var/crash 磁盘上装载的空间至少与系统的总物理内存一样多,以避免在发生崩溃时耗尽空间。

  1. 使用以下命令安装 kdump-utils 和 makedumpfile 包:

    sudo dnf install -y kdump-utils makedumpfile
    
  2. 使用以下命令确定要添加的推荐崩溃内核大小:

    sudo kdumpctl estimate
    

    在输出中,引用建议的 crashkernel 值。 例如,以下输出显示建议的 crashkernel 大小为 256M:

    kdump: Rebuilding /boot/initramfs-6.18.5-1.8.azl4~20260420.x86_64kdump.img
    Reserved crashkernel:    0M
    Recommended crashkernel: 256M 
    
    Kernel image size:   56M
    Kernel modules size: 11M
    Initramfs size:      35M
    Runtime reservation: 16M
    Large modules:
        mlx5_core: 2826240
        cfg80211: 1380352
        kvm: 1433600
        btrfs: 2097152
    WARNING: Current crashkernel size is lower than recommended size 256M.
    
  3. 使用以下命令将 建议的 crashkernel 值添加到内核启动参数:

    sudo grubby --args="crashkernel=256M" --update-kernel=ALL
    
  4. 使用以下命令将 kdump systemd 服务配置为在启动过程中自动启动:

    sudo systemctl enable kdump.service
    

    示例输出:

    Created symlink '/etc/systemd/system/multi-user.target.wants/kdump.service' → '/usr/lib/systemd/system/kdump.service'.
    
  5. 重新启动系统,使更改生效。

  6. 重新启动后,可以使用以下命令验证 kdump 是否正常运行:

    sudo kdumpctl status
    

    示例输出:

    kdump: Kdump is operational
    kdump: Notice: No vmcore creation test performed!
    

有关 Linux 内核参数和 sysctl 工具的详细信息,请参阅以下上游资源:

  • 内核 sysctl 参数:下面 kernel.*公开的每个参数的上游引用,包括允许的值和默认行为。
  • sysctl(8) man 页面:该工具的完整命令行参考 sysctl ,包括如何从 /etc/sysctl.d/ 拖放文件加载配置。