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>
更改会立即生效,并一直有效,直到下次重新启动。
设置持久性内核参数
要使内核参数更改在重启后仍然生效,请按以下形式将该参数添加到
/etc/sysctl.d/99-example.conf中:<SYSCTL_PARAMETER>=<VALUE>使用以下命令应用更新的配置,而无需重新启动:
sudo sysctl --system成功运行后
sudo sysctl --system,新值将应用到正在运行的内核,并在每次系统启动时自动重新应用。
启用 kdump
Important
Kdump 需要专用磁盘空间来存储故障转储。 确保在 /var/crash 磁盘上装载的空间至少与系统的总物理内存一样多,以避免在发生崩溃时耗尽空间。
使用以下命令安装 kdump-utils 和 makedumpfile 包:
sudo dnf install -y kdump-utils makedumpfile使用以下命令确定要添加的推荐崩溃内核大小:
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.使用以下命令将 建议的 crashkernel 值添加到内核启动参数:
sudo grubby --args="crashkernel=256M" --update-kernel=ALL使用以下命令将 kdump systemd 服务配置为在启动过程中自动启动:
sudo systemctl enable kdump.service示例输出:
Created symlink '/etc/systemd/system/multi-user.target.wants/kdump.service' → '/usr/lib/systemd/system/kdump.service'.重新启动系统,使更改生效。
重新启动后,可以使用以下命令验证 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/拖放文件加载配置。