內核參數 - Arch Linux 中文维基

跳至內容

# 內核參數

出自 Arch Linux 中文维基
翻譯狀態：

- 本文（或部分內容）譯自 Kernel parameters，最近一次同步於 2025-01-16，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

相關文章

- Kernel

共有三種辦法向內核傳遞參數以控制其行為：

1. 在編譯內核時：在內核的 `config` 文件中。詳見內核#編譯。
2. 在內核啟動時：通過命令行參數（通常通過啟動管理器設置，或在統一內核鏡像中設置）。
3. 在運行時：通過 `/proc/sys/`（參見 sysctl）和 `/sys/` 中的文件。

提示：可加載模塊的選項可通過 `/etc/modprobe.d/` 中的 .conf 文件設置。參見 內核模塊#使用_/etc/modprobe.d/中的文件。

不同的方式有不同的命令名稱、是否可見以及設置方式。本文僅說明第二種方式(內核命令行)，並記錄適用 Arch linux 內核的常用參數。

大部分參數和某個子系統相關，需要在編譯或加載時加入子系統，而且相關硬體需要存在。

內核命令行參數的格式為 `parameter` 或 `parameter=value`，或 `module.parameter=value`。

注意：

- 通過 `cat /proc/cmdline` 可以查看當前使用的命令行參數，驗證修改是否生效。
- 所有內核參數均區分大小寫。

## 啟動管理器配置

注意：Arch Linux 安裝鏡像 在 UEFI 系統上使用 systemd-boot，在 BIOS 系統上使用 Syslinux。

內核參數可以在啟動時臨時修改，也可以永久性寫到啟動管理器的配置文件中，永遠起作用。

下面示例：把參數`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` 中的如上內容。對於初學者，建議：

  編輯 `/etc/default/grub` 並將您的內核選項添加至 `GRUB_CMDLINE_LINUX_DEFAULT` 行：

        GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

  然後重新生成 `grub.cfg` 文件：

        # grub-mkconfig -o /boot/grub/grub.cfg

有關配置GRUB的更多信息，請參閱 GRUB 。

### GRUB Legacy

- 在菜單出現後按 `e` 然後將它們添加至 `kernel` 行：

      kernel /boot/vmlinuz-linux root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw quiet splash

  按 `b` 以便用這些參數啟動。

- 要使改變在重啟後仍生效，編輯 `/boot/grub/menu.lst` 並將它們添加至 `kernel` 行，如上所示。

有關配置GRUB Legacy的更多信息，請參閱 GRUB Legacy 。

### LILO

- 將它們添加到 `/etc/lilo.conf` 中，使用 `append` 或 `addappend`：

      image=/boot/vmlinuz-linux
              ...
              append="quiet splash"

有關配置LILO的更多信息，請參閱 LILO 。

### Limine

- 要臨時添加內核參數，在啟動條目選擇屏幕出現時按 `e` 並修改 `cmdline` 行：

      cmdline: root=PARTUUID=2865692b-02 zswap.enabled=0 rw rootfstype=ext4 quiet splash

- 要使更改永久生效，編輯位於 `/boot/limine/limine.conf` 的 Limine 配置文件中的 `cmdline` 行：

      /Arch Linux                                                                                                                                                        ...                                                                                                                                                                            cmdlin e: root=PARTUUID=2865692b-02 zswap.enabled=0 rw rootfstype=ext4 splash

有關配置 rEFInd 的更多信息，請參閱 rEFInd 。

### 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

更多詳情請見Syslinux 。

### systemd-boot

- 當啟動菜單出現時 按 `e`進入編輯界面:

      initrd=\initramfs-linux.img root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw quiet splash

  按 `Enter` 即可按照輸入的參數啟動。

注意：

- 如果沒有設置顯示啟動菜單, 你需要按住`Space`啟動電腦來進入啟動菜單 。
- 如果不能夠從啟動菜單上進行編輯，修改 `/boot/loader/loader.conf` 加入 `editor 1` 來開啟編輯功能。

- 如果想永久加入參數，編輯 `/boot/loader/entries/arch.conf` (假設你已經設置好了 EFI system partition) 的`options` 行:

      options root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw quiet splash

更多信息請參見 systemd-boot .

## dracut

dracut 可以將內核參數嵌入 initramfs, 跳過啟動加載器的配置，參考： dracut#Kernel command line options.

## EFI 啟動存根

參閱 EFI 啟動存根#Using UEFI directly.

## 劫持 cmdline

即使沒有訪問啟動加載器的權限，也可以通過更改內核參數來啟用調試（如果您有 root 權限）。這可以通過覆蓋存儲內核參數的 `/proc/cmdline` 來實現。然而，`/proc/cmdline` 即使作為 root 也不可寫，因此這個技巧通過使用綁定掛載來掩蓋路徑。

首先創建一個包含所需內核參數的文件：

    /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`，因此即使根文件系統以只讀方式掛載也能工作。您可以通過 `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 加密分區的位置以及 設備映射器 名稱。
debug | 啟用內核調試（事件日誌級別）。
lsm | 設置 Linux 安全模塊的初始化順序，用於啟用 AppArmor, SELinux 或 TOMOYO。
maxcpus | SMP 內核在啟動期間將啟動的最大處理器數量。
mem | 強制使用特定數量的內存。
netdev | 網絡設備參數。
nomodeset | 禁用 Kernel mode setting。
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 作為參考）。
   注意：當使用 mkinitcpio 的 fsck 鉤子（參見 [1]）或 使用 F2FS 作為根文件系統 時，需要 `rw`。

## 參見

- kernel-command-line(7)
- 省電相關內核參數
- 內核啟動命令行參數參考——Linux Kernel in a Nutshell 的第 9 章，作者 Greg Kroah-Hartman

分類：​

- 內核

內核參數
新增話題