内核参数

来自 ArchWiki

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

  1. 构建内核时—在内核的 config 文件中。 参见 Kernel#编译 以了解详情。
  2. 启动内核时—使用命令行参数(通常通过 启动引导器,或者也在 统一内核镜像 中)。
  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 启动桩#直接使用 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 加密分区的位置以及 设备映射器 名称。
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) § 早期初始化环境)。 启动引导器也可能具有其自己的配置默认值,例如,grub-mkconfig 使用 rw(参见 FS#36275 作为参考)。
    注意: 当使用 mkinitcpio 的 fsck 钩子 (参见 [1]) 或 当使用 F2FS 作为根文件系统时,需要 rw

参见