內核參數
共有三種辦法向內核傳遞參數以控制其行為:
- 在編譯內核時:在內核的
config
文件中。詳見內核#編譯。 - 在內核啟動時:通過命令行參數(通常通過啟動管理器設置,或在統一內核鏡像中設置)。
- 在運行時:通過
/proc/sys/
(參見 sysctl)和/sys/
中的文件。
/etc/modprobe.d/
中的 .conf 文件設置。參見 Kernel module#Using files in /etc/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
中的如上內容。對於初學者,建議:
- 編輯
/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
並修改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" ... }
有關配置 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 | 覆蓋幀緩衝視頻默認值。 |
- 如果內核命令行上未明確設置
ro
或rw
,內核將使用rw
(參見 bootparam(7) § General non-device-specific boot arguments)。然而,mkinitcpio 使用ro
作為默認值,覆蓋內核的默認值(參見 mkinitcpio(8) § EARLY INIT ENVIRONMENT)。啟動加載器也可能有自己的配置默認值,例如,grub-mkconfig 使用rw
(參見 FS#36275 作為參考)。