跳转到内容

内核参数

来自 Arch Linux 中文维基

共有三种办法向内核传递参数以控制其行为:

  1. 在编译内核时:在内核的 config 文件中。详见内核#编译
  2. 在内核启动时:通过命令行参数(通常通过启动管理器设置,或在统一内核镜像中设置)。
  3. 在运行时:通过 /proc/sys/(参见 sysctl)和 /sys/ 中的文件。
提示:可加载模块的选项可通过 /etc/modprobe.d/ 中的 .conf 文件设置。参见 Kernel module#Using files in /etc/modprobe.d/

不同的方式有不同的命令名称、是否可见以及设置方式。本文仅说明第二种方式(内核命令行),并记录适用 Arch linux 内核的常用参数。

大部分参数和某个子系统相关,需要在编译或加载时加入子系统,而且相关硬件需要存在。

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

注意:
  • 通过 cat /proc/cmdline 可以查看当前适用的命令行参数,验证修改是否生效。
  • 所有内核参数均区分大小写。

启动管理器配置[编辑 | 编辑源代码]

注意: Arch Linux 安装镜像UEFI 系统上使用 systemd-boot,在 BIOS 系统上使用 Syslinux

内核参数可以在启动时临时修改,也可以永久性写到启动管理器的配置文件中,永远起作用。

下面示例:把参数quietsplash 加到启动管理器 GRUB, GRUB Legacy, LILO, Limine, rEFInd, Syslinuxsystemd-boot 中。

GRUB[编辑 | 编辑源代码]

  • 在菜单出现后按 e 然后将它们添加至 linux 行:
linux /boot/vmlinuz-linux root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw quiet splash
Ctrl+x 以便用这些参数启动。
  • 要使改变在重启后仍生效,您可以手动编辑 /boot/grub/grub.cfg 中的如上内容。对于初学者,建议:
编辑 /etc/default/grub 并将您的内核选项添加至 GRUB_CMDLINE_LINUX_DEFAULT 行:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
然后重新生成 grub.cfg 文件:
# grub-mkconfig -o /boot/grub/grub.cfg

有关配置GRUB的更多信息,请参阅 GRUB

GRUB Legacy[编辑 | 编辑源代码]

  • 在菜单出现后按 e 然后将它们添加至 kernel 行:
kernel /boot/vmlinuz-linux root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw quiet splash
b 以便用这些参数启动。
  • 要使改变在重启后仍生效,编辑 /boot/grub/menu.lst 并将它们添加至 kernel 行,如上所示。

有关配置GRUB Legacy的更多信息,请参阅 GRUB Legacy

LILO[编辑 | 编辑源代码]

  • 将它们添加到 /etc/lilo.conf 中,使用 appendaddappend
image=/boot/vmlinuz-linux
        ...
        append="quiet splash"

有关配置LILO的更多信息,请参阅 LILO

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[编辑 | 编辑源代码]

  • 在所需的菜单条目上按 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"
    ...
}

有关配置 rEFInd 的更多信息,请参阅 rEFInd

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

更多详情请见Syslinux

systemd-boot[编辑 | 编辑源代码]

  • 当启动菜单出现时 按 e进入编辑界面:
initrd=\initramfs-linux.img root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw quiet splash
Enter 即可按照输入的参数启动。
注意:
  • 如果没有设置显示启动菜单, 你需要按住Space启动电脑来进入启动菜单 。
  • 如果不能够从启动菜单上进行编辑,修改 /boot/loader/loader.conf 加入 editor 1 来开启编辑功能。
  • 如果想永久加入参数,编辑 /boot/loader/entries/arch.conf (假设你已经设置好了 EFI system partition) 的options 行:
options root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw quiet splash

更多信息请参见 systemd-boot .

dracut[编辑 | 编辑源代码]

dracut 可以将内核参数嵌入 initramfs, 跳过启动加载器的配置,参考: dracut#Kernel command line options.

EFI 启动存根[编辑 | 编辑源代码]

参阅 EFI 启动存根#Using UEFI directly.

劫持 cmdline[编辑 | 编辑源代码]

即使没有访问启动加载器的权限,也可以通过更改内核参数来启用调试(如果您有 root 权限)。这可以通过覆盖存储内核参数的 /proc/cmdline 来实现。然而,/proc/cmdline 即使作为 root 也不可写,因此这个技巧通过使用绑定挂载来掩盖路径。

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

/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,因此即使根文件系统以只读方式挂载也能工作。您可以通过 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 安全模块的初始化顺序,用于启用 AppArmor, SELinuxTOMOYO
maxcpus SMP 内核在启动期间将启动的最大处理器数量。
mem 强制使用特定数量的内存。
netdev 网络设备参数。
nomodeset 禁用 Kernel mode setting
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) § General non-device-specific boot arguments)。然而,mkinitcpio 使用 ro 作为默认值,覆盖内核的默认值(参见 mkinitcpio(8) § EARLY INIT ENVIRONMENT)。启动加载器也可能有自己的配置默认值,例如,grub-mkconfig 使用 rw(参见 FS#36275 作为参考)。
    注意: 当使用 mkinitcpio 的 fsck 钩子(参见 [1])或 使用 F2FS 作为根文件系统 时,需要 rw

参见[编辑 | 编辑源代码]