内核参数
有三种方法可以将选项传递给内核,从而控制其行为
- 构建内核时——在内核的
config
文件中。参见 Kernel#Compilation 了解详情。 - 启动内核时——使用命令行参数(通常通过引导加载程序,或者也在统一内核镜像中)。
- 在运行时——通过
/proc/sys/
(参见 sysctl) 和/sys/
中的文件。
/etc/modprobe.d/
中的 .conf 文件设置。参见 Kernel module#Using 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,使用与上面完全相同的行,或者如果使用 grub-mkconfig
- 编辑
/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
- 使用
append
或addappend
将参数添加到/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
- 在所需的菜单项上按
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" ... }
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 安全模块的初始化顺序,用于启用 AppArmor、SELinux 或 TOMOYO。 |
maxcpus | SMP 内核在启动期间将启动的最大处理器数。 |
mem | 强制使用特定数量的内存。 |
netdev | 网络设备参数。 |
nomodeset | 禁用 内核模式设置。 |
panic | 内核 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 | 覆盖帧缓冲视频默认值。 |
- 1 如果内核命令行上未显式设置
ro
或rw
,则内核使用rw
(参见 bootparam(7) § General non-device-specific boot arguments)。但是,mkinitcpio 使用ro
作为默认值,覆盖了内核的默认值(参见 mkinitcpio(8) § EARLY INIT ENVIRONMENT)。引导加载程序也可能具有其自身配置的默认值,例如,grub-mkconfig 使用rw
(参见 FS#36275 作为参考)。