如何在 Linux 中控制内核启动时参数

与其他操作系统相比,Linux 启动是一个复杂的过程。这Linux内核在引导期间接受通过命令行传递的许多参数,这些参数在系统启动时向内核提供基本信息。

将这些参数视为在内核开始运行操作系统之前向内核发出的特殊指令。

有了它们,你可以告诉内核:

  • 哪个磁盘包含您的根文件系统?
  • 使用多少内存?
  • 是否加载某些硬件功能。
  • 甚至如何处理启动过程中的错误。

没有它们,内核将不知道如何正确初始化系统。

启动参数从哪里来?

引导参数通常由引导加载程序提供,引导加载程序是在您启动后立即运行的小程序,它的工作是将内核加载到内存中。

  • 在大多数,该引导加载程序是GRUB(GRand 统一引导加载程序)。
  • 一些可以使用系统Linux或者使用

当引导加载程序将控制权移交给内核时,它还会传递这些引导时参数。

启动参数解释

示例(来自 GRUB):

linux /vmlinuz-6.x root=/dev/sda1 ro quiet splash

这是发生的事情:

  • root=/dev/sda1→ 告诉内核根文件系统所在的位置。
  • ro→ 首先将根文件系统挂载为只读。
  • quiet→ 隐藏大多数启动消息以实现更干净的启动。
  • splash→ 显示启动画面而不是文本。

因此,在 Linux 开始初始化服务之前,内核就已经知道要做什么。

引导参数是如何组织的

启动参数不仅仅是随机切换;而是随机的。它们根据它们控制的系统部分进行分类。

让我们来探索一下它们。

1. 系统基础知识

这些告诉内核如何启动以及在哪里查找根文件系统。

  • root=/dev/...→ 包含根文件系统的设备。
  • ro→ 首先以只读方式挂载根文件系统(最安全)。
  • rw→ 立即以读写方式挂载根文件系统。
  • init=/path/to/init→ 使用自定义初始化程序(例如,用于救援或测试)。

2. 控制台与调试

这些参数控制系统启动期间显示的消息,这对于出现问题时的故障排除特别有用。

  • quiet→ 抑制大多数启动消息。
  • debug→ 启用详细调试输出。
  • console=ttyS0,115200→ 将消息直接发送到串行控制台(用于远程调试)。
  • loglevel=3→ 控制消息的详细程度(0=紧急情况,7= 完整细节)。

3. 硬件控制

有时,ACPI 或 APIC 等硬件功能可能会导致问题,因此您可以根据需要调整或禁用它们:

  • noapic→ 禁用 APIC,对于修复旧硬件上的某些问题很有用。
  • acpi=off→ 关闭 ACPI,禁用高级电源管理。
  • pci=noacpi→ 阻止 ACPI 处理 PCI 中断。

4. 内存和CPU管理

控制内核使用多少内存和多少 CPU。

  • mem=512M→ 将可用内存限制为 512 MB。
  • maxcpus=2→ 仅使用 2 个 CPU 核心。
  • nosmp→ 完全禁用多处理器支持。

5. 恢复与故障排除

用于处理崩溃、调试或暂时绕过安全强制执行的选项:

  • initcall_debug→ 跟踪初始化调用(调试启动问题)。
  • panic=10→ 内核崩溃后 10 秒自动重新启动。
  • selinux=0→ 禁用 SELinux 强制。

如何临时添加启动参数

有时您需要更改 Linux 的启动方式,例如禁用某些功能(例如,ACPI),无需永久更改您的系统。这就是临时启动参数的用武之地。

重新启动计算机,然后立即BIOS/UEFI屏幕上,访问 GRUB 菜单。如果没有自动出现,请按住Shift(为了BIOS系统)或按Esc(为了UEFI系统)。

突出显示您要启动的内核并按e编辑引导命令,并查找以以下内容开头的行linux或者linuxefi。该行告诉系统要加载哪个内核以及要使用哪些选项。

在该行的末尾添加您的参数。例如,要暂时禁用 ACPI,您可以添加acpi=off:

linux /vmlinuz-6.x root=/dev/sda1 ro quiet splash acpi=off

Ctrl + X或者F10启动这些更改。

这将仅使用您为此会话指定的参数启动系统。当您重新启动时,系统将恢复到正常设置。

如何使启动参数永久化

如果临时设置的参数有效并且您希望每次启动时应用它,请打开 GRUB 配置文件进行编辑。

sudo nano /etc/default/grub

查找显示以下内容的行:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

在引号内添加您的参数。例如,要永久禁用 ACPI:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi=off"

保存文件并退出编辑器。

然后更新 GRUB 以应用您的更改:

sudo update-grub      # for Debian/Ubuntu
sudo grub2-mkconfig -o /boot/grub2/grub.cfg   # for Fedora/RHEL

重新启动系统以在每次启动时自动应用该参数。

每个 Linux 管理员都应该知道的 10 个主要启动参数

这些是每个系统管理员都应该熟悉的最常用的 Linux 内核启动参数。它们帮助控制系统启动、管理硬件、优化性能并快速解决启动问题。

当您需要调整或调试 Linux 启动行为时,请将此备忘单放在手边作为参考。

范围类别目的/描述
root=/dev/sda1系统基础知识指定包含根文件系统的设备。
ro系统基础知识为了安全起见,在启动时将根文件系统安装为只读。
rw系统基础知识立即以读写方式挂载根文件系统。
quiet控制台/调试抑制大多数启动消息以实现更干净的启动。
debug控制台/调试启用详细的内核消息以帮助解决启动问题。
acpi=off硬件控制禁用 ACPI(高级配置和电源接口),这对于排除硬件问题很有用。
noapic硬件控制禁用高级可编程中断控制器;帮助解决一些较旧的硬件问题。
mem=512M内存和CPU将可用内存限制为 512 MB,以用于测试或故障排除目的。
maxcpus=2内存和CPU限制系统仅使用 2 个 CPU 核心。
init=/path/to/init恢复/自定义初始化允许使用自定义初始化程序启动,这对于救援模式或调试很有用。
最后的想法

启动时参数就像 Linux 内核的秘密密钥;它们允许您准确控制系统如何启动、硬件如何初始化以及问题如何处理。

无论您是在调试顽固的启动问题、调整性能还是试验内核功能,这些参数都可以为您提供对 Linux 机器的低级控制。

因此,下次当您的 Linux 机器拒绝启动时,或者您只是想从系统中挤出更多性能时,请记住,答案可能就在于内核命令行上的一些额外单词。