内核参数
有三种方法可以将选项传递给内核,从而控制其行为
- 在构建内核时——在内核的
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 | 覆盖帧缓冲视频默认设置。 |
- 如果在内核命令行上未显式设置
ro
或rw
,则内核使用rw
(参见 bootparam(7) § 通用非设备特定启动参数)。 但是,mkinitcpio 使用ro
作为默认值,覆盖内核的默认值(参见 mkinitcpio(8) § 早期 INIT 环境)。 引导加载程序也可能具有自己配置的默认值,例如,grub-mkconfig 使用rw
(请参阅 FS#36275 作为参考)。