内核参数
有三种方法可以将选项传递给内核,从而控制其行为
- 在构建内核时——在内核的
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 作为参考)。