Kernel parameters

2026-07-07 06:16:33
相关文章 内核 有三种方法可以将选项传递给内核,从而控制其行为。 在编译内核时—在内核的 config 文件中。详情请参阅 Kernel#Compilation。 在启...

相关文章

内核

有三种方法可以将选项传递给内核,从而控制其行为。

在编译内核时—在内核的 config 文件中。详情请参阅 Kernel#Compilation。

在启动内核时—使用命令行参数(通常通过 boot loader,或在 unified kernel image 中)。

在运行时—通过 /proc/sys/ (参见 sysctl) 和 /sys/ 中的文件。

注意 可加载模块的选项可以通过 /etc/modprobe.d/ 中的 .conf 文件设置。详情请参阅 Kernel module#Using modprobe.d。

在这三种方法中,可配置选项的可用性、名称和指定方式各不相同。本页仅解释第二种方法(内核命令行参数),并列出了 Arch Linux 中最常用的内核参数。

大多数参数与子系统相关,并且只有在内核配置了这些子系统内置时才起作用。它们还取决于其关联硬件的存在。

内核命令行参数的格式要么是 parameter,要么是 parameter=value,要么是 module.parameter=value。

您可以通过运行 cat /proc/cmdline 来检查您的系统启动时使用的参数,并查看是否包含您的更改。

所有内核参数都区分大小写。

引导加载器配置

注意 Arch Linux 的 安装介质 对于 UEFI 系统使用 systemd-boot,对于 BIOS 系统使用 Syslinux。

内核参数可以在引导加载器的启动选择菜单中编辑启动项来临时设置,也可以通过修改引导加载器配置文件来永久设置。

以下示例将 quiet 和 splash 参数添加到 Clover、GRUB、GRUB Legacy、LILO、Limine、rEFInd、Syslinux 和 systemd-boot 引导加载器。

Clover

将它们添加到 esp/EFI/CLOVER/config.plist

initrd=\initramfs-linux.img root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw quiet splash

GRUB

菜单出现时按 e,并在 linux 行添加它们

linux /boot/vmlinuz-linux root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw quiet splash

按 Ctrl+x 使用这些参数启动。

要使更改在重启后持久生效,您可以 手动编辑 /boot/grub/grub.cfg,使用上面确切的行,或者如果使用 grub-mkconfig

编辑 /etc/default/grub,并将您的内核选项添加到 GRUB_CMDLINE_LINUX_DEFAULT 行的引号之间

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

然后使用以下命令自动重新生成 grub.cfg 文件

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

GRUB Legacy

菜单出现时按 e,并在 kernel 行添加它们

kernel /boot/vmlinuz-linux root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw quiet splash

按 b 使用这些参数启动。

要使更改在重启后持久生效,请编辑 /boot/grub/menu.lst 并将它们添加到 kernel 行,与上面完全相同。

LILO

使用 append 或 addappend 将它们添加到 /etc/lilo.conf

image=/boot/vmlinuz-linux

...

append="quiet splash"

Limine

要临时添加内核参数,请在启动项选择屏幕出现时按 e 并修改 cmdline 行

cmdline: root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw quiet splash

要永久应用更改,请编辑 Limine 配置文件中的 kernel_cmdline 行

/+Arch Linux

...

kernel_cmdline: root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw quiet splash

kernel_cmdline 是 cmdline 的别名

rEFInd

在所需菜单项上按 Insert、F2、Tab 或 +,然后在子菜单项上再次按下。在字符串末尾添加内核参数

root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw initrd=\boot\initramfs-linux.img quiet splash

按 Enter 使用这些参数启动。

要使更改在重启后持久生效,请编辑 /boot/refind_linux.conf,并将它们添加到所有必需行的引号之间,例如

"Boot using default options" "root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw quiet splash"

如果您已禁用 rEFInd 中操作系统的自动检测,而是将操作系统定义在 esp/EFI/refind/refind.conf 中加载您的操作系统,您可以像这样编辑它

menuentry "Arch Linux" {

...

options "root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw quiet splash"

...

}

Syslinux

菜单出现时按 Tab,并在字符串末尾添加它们

linux /boot/vmlinuz-linux root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw initrd=/boot/initramfs-linux.img quiet splash

按 Enter 使用这些参数启动。

要使更改在重启后持久生效,请编辑 /boot/syslinux/syslinux.cfg 并将它们添加到 APPEND 行

APPEND root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw quiet splash

systemd-boot

菜单出现时按 e,并在字符串末尾添加参数

initrd=\initramfs-linux.img root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw quiet splash

按 Enter 使用这些参数启动。

如果您未设置菜单超时值,则在启动时需要按住 Space 才能显示 systemd-boot 菜单。

如果您无法从引导菜单编辑参数,您可能需要编辑 /boot/loader/loader.conf 并添加 editor 1 来启用编辑。

要使更改在重启后持久生效,请编辑 /boot/loader/entries/arch.conf(假设您已设置好 EFI 系统分区)并将它们添加到 options 行

options root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw quiet splash

如果您正在使用 unified kernel image 进行启动,请编辑 /etc/kernel/cmdline。

dracut

dracut 能够将内核参数嵌入到 initramfs 中,从而允许在引导加载器配置中省略它们。详情请参阅 dracut#Kernel command line options。请注意,这只适用于 dracut 理解的参数,例如 root= 和 rd.*。它们不会成为真正的内核参数。

EFI 引导存根

请参阅 EFI boot stub#Using UEFI directly。

劫持 cmdline

即使无法访问您的引导加载器,也有可能更改您的内核参数以启用调试(如果您有 root 访问权限)。这可以通过覆盖存储内核参数的 /proc/cmdline 来实现。然而,即使是 root 用户也无法写入 /proc/cmdline,因此这个技巧是通过使用 bind mount 来屏蔽该路径实现的。

注意 此技巧仅劫持读取 /proc/cmdline 的用户空间进程。它不适用于内核本身读取的参数。例如,通过这种方式添加 debug 不会启用内核调试。

首先创建一个包含所需内核参数的文件

/root/cmdline

root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 ro console=tty1 logo.nologo debug

然后使用 bind mount 覆盖参数

# mount --bind -o ro /root/cmdline /proc/cmdline

您可以 cat /proc/cmdline 来确认您的更改是否成功。

参数列表

此列表并非详尽无遗。除了内核本身,其他程序也可以从 /proc/cmdline 读取参数并改变它们的行为。

有关内核和 boot loaders 理解的参数的几乎完整列表,请参阅 The kernel's command-line parameters。一个基本列表在 bootparam(7)。

有关 systemd 理解的参数,请参阅 kernel-command-line(7)。

关于 mkinitcpio 在基于 busybox 的初始内存盘(initial ramdisk)中所支持的选项,请参阅 mkinitcpio(8) § EARLY INIT ENVIRONMENT 以及 Mkinitcpio#Runtime customization。

有关 dracut 理解的参数,请参阅 dracut.cmdline(7)。

parameter

描述

init

运行指定的二进制文件作为 init 进程,而不是 /sbin/init。systemd-sysvcompat 包会将 /sbin/init 链接到 /usr/lib/systemd/systemd 以使用 systemd。将其设置为 /bin/sh 可以引导到 shell。

initrd

指定初始 ramdisk 的位置。对于 UEFI boot managers 和 EFI boot stub,路径必须使用反斜杠 (\) 作为路径分隔符。

cryptdevice

指定一个 dm-crypt 加密分区的位置以及一个 device mapper 名称。

debug

启用内核调试(事件日志级别)。

lsm

设置 Linux 安全模块的初始化顺序,用于启用 AppArmor、SELinux 或 TOMOYO。

maxcpus

SMP 内核在启动过程中最多可以启动的处理器数量。

mem

强制使用特定数量的内存。

netdev

网络设备参数。

nomodeset

禁用 Kernel mode setting。

panic

内核恐慌后自动重启前的等待时间。

resume

指定一个用于从 hibernation 唤醒时使用的 swap 设备。

ro

启动时以只读方式挂载根设备。这是 mkinitcpio 的默认值1。

root

Root 文件系统。有关内核支持的设备名称格式,请参阅 init/do_mounts.c。请注意,带有 udev 的 initramfs 支持 更多名称格式。与 systemd#GPT partition automounting 兼容的设置允许省略该参数,或者选择使用 root=dissect。

rootflags

根文件系统挂载选项。适用于设置无法通过 remount 应用的选项(即通过 systemd-remount-fs.service(8))。例如,XFS 根卷的 discard 选项,或 Btrfs 使用子卷作为根时 的 subvol= 选项。

rw

启动时以读写方式挂载根设备。这是内核的默认值1。

systemd.unit

引导到 指定的 target。

video

覆盖帧缓冲视频默认设置。

如果内核命令行上未明确设置 ro 或 rw(参见 bootparam(7) § General non-device-specific boot arguments),则内核使用 rw。然而,mkinitcpio 使用 ro 作为默认值,覆盖了内核的默认值(参见 mkinitcpio(8) § EARLY INIT ENVIRONMENT)。引导加载器也可能有自己的配置默认值,例如,grub-mkconfig 使用 rw(参见 FS#36275 作为参考)。注意 如果使用 mkinitcpio 的 fsck hook(参见 [1])或 将 F2FS 用作根文件系统时,则需要 rw。

参见

bootparam(7)

kernel-command-line(7)

Power saving#Kernel parameters

Kernel Boot Command-Line Parameter Reference—Greg Kroah-Hartman 的 Linux Kernel in a Nutshell 的第九章