内核参数

出自 ArchWiki
(重定向自 Kernel line)

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

  1. 构建内核时——在内核的 config 文件中。参见 Kernel#编译 以了解详情。
  2. 启动内核时——使用命令行参数(通常通过引导加载程序,或者在 unified kernel image 中)。
  3. 在运行时——通过 /proc/sys/ (参见 sysctl) 和 /sys/ 中的文件。
注意: 可加载模块的选项可以通过 /etc/modprobe.d/ 中的 .conf 文件进行设置。参见 Kernel module#使用 modprobe.d

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

大多数参数与子系统相关联,并且仅当内核配置了这些内置子系统时才有效。它们还取决于它们关联的硬件是否存在。

内核命令行参数的格式为 parameterparameter=valuemodule.parameter=value

注意
  • 您可以运行 cat /proc/cmdline 来检查您的系统启动时使用的参数,并查看是否包含您的更改。
  • 所有内核参数都区分大小写。

引导加载程序配置

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

内核参数可以临时设置,方法是在引导加载程序启动选择菜单中编辑启动项;也可以永久设置,方法是修改引导加载程序配置文件。

以下示例将 quietsplash 参数添加到 GRUBGRUB LegacyLILOLiminerEFIndSyslinuxsystemd-boot 引导加载程序。

GRUB

  • 当菜单出现时,按 e 键,并在 linux 行添加参数
linux /boot/vmlinuz-linux root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw quiet splash
Ctrl+x 使用这些参数启动。
编辑 /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

  • 使用 appendaddappend 将参数添加到 /etc/lilo.conf
image=/boot/vmlinuz-linux
        ...
        append="quiet splash"

Limine

  • 要临时添加内核参数,请在启动项选择屏幕出现时按 e 键,并修改 kernel_cmdline
kernel_cmdline: root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw quiet splash
  • 要永久应用更改,请编辑位于 esp/limine.conf 的 Limine 配置文件中的 kernel_cmdline
/+Arch Linux
    ...
    kernel_cmdline: root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw quiet splash

rEFInd

  • 在所需的菜单项上按 InsertF2Tab+ 键,然后在子菜单项上再次按下。在字符串末尾添加内核参数
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

dracut

dracut 能够将内核参数嵌入到 initramfs 中,从而允许从引导加载程序配置中省略它们。参见 dracut#内核命令行选项

EFI 启动存根

参见 EFI boot stub#直接使用 UEFI

劫持 cmdline

即使无法访问引导加载程序,也可以更改内核参数以启用调试(如果您具有 root 访问权限)。这可以通过覆盖存储内核参数的 /proc/cmdline 来实现。但是,即使以 root 身份,/proc/cmdline 也是不可写的,因此此技巧是通过使用绑定挂载来屏蔽路径来实现的。

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

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

然后使用绑定挂载来覆盖参数

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

-n 选项跳过将挂载添加到 /etc/mtab,因此即使 root 以只读方式挂载也能正常工作。您可以 cat /proc/cmdline 来确认您的更改是否成功。

参数列表

此列表并非详尽无遗。有关所有选项的完整列表,请参见 内核的命令行参数

参数 描述
init 运行指定的二进制文件而不是 /sbin/init 作为 init 进程。systemd-sysvcompat 软件包将 /sbin/init 符号链接到 /usr/lib/systemd/systemd 以使用 systemd。将其设置为 /bin/sh 以启动到 shell。
initrd 指定初始 ramdisk 的位置。对于 UEFI 启动管理器EFI 启动存根,路径必须使用反斜杠 (\) 作为路径分隔符。
cryptdevice 指定 dm-crypt 加密分区的位置以及 device mapper 名称。
debug 启用内核调试(事件日志级别)。
lsm 设置 Linux 安全模块的初始化顺序,用于启用 AppArmorSELinuxTOMOYO
maxcpus SMP 内核在启动期间将启动的最大处理器数量。
mem 强制使用特定数量的内存。
netdev 网络设备参数。
nomodeset 禁用 内核模式设置
panic 内核 panic 时自动重启前的时间。
resume 指定从休眠唤醒时要使用的交换设备。
ro 在启动时以只读方式挂载根设备。这是 mkinitcpio 的默认设置1
root 根文件系统。有关内核支持的设备名称格式,请参见 init/do_mounts.c。请注意,带有 udevinitramfs 支持更多名称格式。与 systemd#GPT 分区自动挂载 兼容的设置允许完全省略该参数,或者选择使用 root=gpt-auto
rootflags 根文件系统挂载选项。对于设置无法通过重新挂载应用的选项很有用(即通过 systemd-remount-fs.service(8))。例如,XFS 根卷的 discard 选项或 使用子卷作为根目录时 Btrfssubvol= 选项。
rw 在启动时以读写方式挂载根设备。这是内核的默认设置1
systemd.unit 启动到指定的 target
video 覆盖帧缓冲视频默认值。
  1. 如果内核命令行上未显式设置 rorw,则内核使用 rw(参见 bootparam(7) § 通用非设备特定启动参数)。但是,mkinitcpio 使用 ro 作为默认值,覆盖内核的默认值(参见 mkinitcpio(8) § 早期 INIT 环境)。引导加载程序也可能具有其自身配置的默认值,例如,grub-mkconfig 使用 rw(参见 FS#36275 作为参考)。
    注意: 当使用 mkinitcpio 的 fsck hook(参见 [1])或 当使用 F2FS 作为根文件系统时rw 是必需的。

参见