内核参数
共有三种办法向内核传递参数以控制其行为:
- 在编译内核时:在内核的
config
文件中。详见内核#编译。 - 在内核启动时:通过命令行参数(通常通过启动管理器设置,或在统一内核镜像中设置)。
- 在运行时:通过
/proc/sys/
(参见 sysctl)和/sys/
中的文件。
/etc/modprobe.d/
中的 .conf 文件设置。参见 Kernel module#Using files in /etc/modprobe.d/。不同的方式有不同的命令名称、是否可见以及设置方式。本文仅说明第二种方式(内核命令行),并记录适用 Arch linux 内核的常用参数。
大部分参数和某个子系统相关,需要在编译或加载时加入子系统,而且相关硬件需要存在。
内核命令行参数的格式为 parameter
或 parameter=value
,或 module.parameter=value
。
- 通过
cat /proc/cmdline
可以查看当前适用的命令行参数,验证修改是否生效。 - 所有内核参数均区分大小写。
启动管理器配置[编辑 | 编辑源代码]
内核参数可以在启动时临时修改,也可以永久性写到启动管理器的配置文件中,永远起作用。
下面示例:把参数quiet
和 splash
加到启动管理器 GRUB, GRUB Legacy, LILO, Limine, rEFInd, Syslinux 和 systemd-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
中,使用append
或addappend
:
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, SELinux 或 TOMOYO。 |
maxcpus | SMP 内核在启动期间将启动的最大处理器数量。 |
mem | 强制使用特定数量的内存。 |
netdev | 网络设备参数。 |
nomodeset | 禁用 Kernel mode setting。 |
panic | 内核崩溃后自动重启的时间。 |
resume | 指定从 休眠 唤醒时使用的交换设备。 |
ro | 在启动时以只读方式挂载根设备。这是 mkinitcpio 的默认值1。 |
root | 根文件系统。参见 init/do_mounts.c 了解内核支持的设备名称格式。请注意,带有 udev 的 initramfs 支持 更多名称格式。与 systemd#GPT 分区自动挂载 兼容的设置允许完全省略该参数,或者使用 root=gpt-auto 。
|
rootflags | 根文件系统挂载选项。对于无法通过重新挂载应用的选项(例如,由 systemd-remount-fs.service(8) 应用)非常有用。例如,XFS 根卷的 discard 选项或 Btrfs 使用子卷作为根 时的 subvol= 选项。
|
rw | 在启动时以读写方式挂载根设备。这是内核的默认值1。 |
systemd.unit | 启动到指定的 目标。 |
video | 覆盖帧缓冲视频默认值。 |
- 如果内核命令行上未明确设置
ro
或rw
,内核将使用rw
(参见 bootparam(7) § General non-device-specific boot arguments)。然而,mkinitcpio 使用ro
作为默认值,覆盖内核的默认值(参见 mkinitcpio(8) § EARLY INIT ENVIRONMENT)。启动加载器也可能有自己的配置默认值,例如,grub-mkconfig 使用rw
(参见 FS#36275 作为参考)。