内核参数

来自 ArchWiki
(重定向自 Kernel parameter)

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

  1. 在构建内核时——在内核的 config 文件中。 详见 Kernel#Compilation 以了解详细信息。
  2. 在启动内核时——使用命令行参数(通常通过引导加载程序,或者在统一内核镜像中)。
  3. 在运行时——通过 /proc/sys/ 中的文件(参见 sysctl)和 /sys/
注意: 可加载模块的选项可以通过 /etc/modprobe.d/ 中的 .conf 文件设置。 参见 Kernel module#Using 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#Kernel command line options

EFI 启动桩

参见 EFI boot stub#Using UEFI directly

劫持 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 选项或 Btrfs 在将子卷用作根目录时subvol= 选项。
rw 以读写方式挂载根设备。 这是内核的默认设置1
systemd.unit 启动到指定的目标
video 覆盖帧缓冲视频默认设置。
  1. 如果在内核命令行上未显式设置 rorw,则内核使用 rw(参见 bootparam(7) § 通用非设备特定启动参数)。 但是,mkinitcpio 使用 ro 作为默认值,覆盖内核的默认值(参见 mkinitcpio(8) § 早期 INIT 环境)。 引导加载程序也可能具有自己配置的默认值,例如,grub-mkconfig 使用 rw(请参阅 FS#36275 作为参考)。
    注意: 当使用 mkinitcpio 的 fsck hook(参见 [1])或将 F2FS 用作根文件系统时,需要 rw

参见