内核参数
有三种方法可以将选项传递给内核,从而控制其行为。
- 在编译内核时—在内核的
config文件中。详情请参阅 Kernel#Compilation。 - 在启动内核时—使用命令行参数(通常通过 boot loader,或在 unified kernel image 中)。
- 在运行时—通过
/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 参数添加到 Clover、GRUB、GRUB Legacy、LILO、Limine、rEFInd、Syslinux 和 systemd-boot 引导加载器。
Clover
- 将它们添加到
esp/EFI/CLOVER/config.plist
<string>initrd=\initramfs-linux.img root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw quiet splash</string>
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并修改cmdline行
cmdline: root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw quiet splash
- 要永久应用更改,请编辑 Limine 配置文件中的
kernel_cmdline行
/+Arch Linux ... kernel_cmdline: root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw quiet splash
kernel_cmdline是cmdline的别名
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
- 如果您正在使用 unified kernel image 进行启动,请编辑
/etc/kernel/cmdline。
dracut
dracut 能够将内核参数嵌入到 initramfs 中,从而允许在引导加载器配置中省略它们。详情请参阅 dracut#Kernel command line options。请注意,这只适用于 dracut 理解的参数,例如 root= 和 rd.*。它们不会成为真正的内核参数。
EFI 引导存根
请参阅 EFI boot stub#Using UEFI directly。
劫持 cmdline
即使无法访问您的引导加载器,也有可能更改您的内核参数以启用调试(如果您有 root 访问权限)。这可以通过覆盖存储内核参数的 /proc/cmdline 来实现。然而,即使是 root 用户也无法写入 /proc/cmdline,因此这个技巧是通过使用 bind mount 来屏蔽该路径实现的。
/proc/cmdline 的用户空间进程。它不适用于内核本身读取的参数。例如,通过这种方式添加 debug 不会启用内核调试。首先创建一个包含所需内核参数的文件
/root/cmdline
root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 ro console=tty1 logo.nologo debug
然后使用 bind mount 覆盖参数
# mount --bind -o ro /root/cmdline /proc/cmdline
您可以 cat /proc/cmdline 来确认您的更改是否成功。
参数列表
此列表并非详尽无遗。除了内核本身,其他程序也可以从 /proc/cmdline 读取参数并改变它们的行为。
- 有关内核和 boot loaders 理解的参数的几乎完整列表,请参阅 The kernel's command-line parameters。一个基本列表在 bootparam(7)。
- 有关 systemd 理解的参数,请参阅 kernel-command-line(7)。
- 有关使用 busybox 的初始 ramdisk 的 mkinitcpio 理解的参数,请参阅 mkinitcpio(8) § EARLY INIT ENVIRONMENT 和 Mkinitcpio#Runtime_customization。
- 有关 dracut 理解的参数,请参阅 dracut.cmdline(7)。
| parameter | 描述 |
|---|---|
| init | 运行指定的二进制文件作为 init 进程,而不是 /sbin/init。systemd-sysvcompat 包会将 /sbin/init 链接到 /usr/lib/systemd/systemd 以使用 systemd。将其设置为 /bin/sh 可以引导到 shell。 |
| initrd | 指定初始 ramdisk 的位置。对于 UEFI boot managers 和 EFI boot stub,路径必须使用反斜杠 (\) 作为路径分隔符。 |
| cryptdevice | 指定一个 dm-crypt 加密分区的位置以及一个 device mapper 名称。 |
| debug | 启用内核调试(事件日志级别)。 |
| lsm | 设置 Linux 安全模块的初始化顺序,用于启用 AppArmor、SELinux 或 TOMOYO。 |
| maxcpus | SMP 内核在启动过程中最多可以启动的处理器数量。 |
| mem | 强制使用特定数量的内存。 |
| netdev | 网络设备参数。 |
| nomodeset | 禁用 Kernel mode setting。 |
| panic | 内核恐慌后自动重启前的等待时间。 |
| resume | 指定一个用于从 hibernation 唤醒时使用的 swap 设备。 |
| ro | 启动时以只读方式挂载根设备。这是 mkinitcpio 的默认值1。 |
| root | Root 文件系统。有关内核支持的设备名称格式,请参阅 init/do_mounts.c。请注意,带有 udev 的 initramfs 支持 更多名称格式。与 systemd#GPT partition automounting 兼容的设置允许省略该参数,或者选择使用 root=dissect。 |
| rootflags | 根文件系统挂载选项。适用于设置无法通过 remount 应用的选项(即通过 systemd-remount-fs.service(8))。例如,XFS 根卷的 discard 选项,或 Btrfs 使用子卷作为根时 的 subvol= 选项。 |
| rw | 启动时以读写方式挂载根设备。这是内核的默认值1。 |
| systemd.unit | 引导到 指定的 target。 |
| video | 覆盖帧缓冲视频默认设置。 |
- 如果内核命令行上未明确设置
ro或rw(参见 bootparam(7) § General non-device-specific boot arguments),则内核使用rw。然而,mkinitcpio 使用ro作为默认值,覆盖了内核的默认值(参见 mkinitcpio(8) § EARLY INIT ENVIRONMENT)。引导加载器也可能有自己的配置默认值,例如,grub-mkconfig 使用rw(参见 FS#36275 作为参考)。