本文介紹如何在Alibaba Cloud Linux 3 AI Extension Edition作業系統中,使用grubby工具添加或刪除核心啟動參數。
瞭解啟動設定檔結構
啟動項設定檔:
GRUB所有的啟動項配置在/boot/loader/entries/目錄下。檔案名稱由machine-id(/etc/machine-id )和核心版本組合而成,例如c8742e47872643a6839300623c28b57c-5.10.134-19.101.al8.x86_64.conf。設定檔樣本:
title Alibaba Cloud Linux (5.10.134-19.101.al8.x86_64) 3 (OpenAnolis Edition) version 5.10.134-19.101.al8.x86_64 linux /boot/vmlinuz-5.10.134-19.101.al8.x86_64 initrd /boot/initramfs-5.10.134-19.101.al8.x86_64.img $tuned_initrd options $kernelopts $tuned_params id alinux-20250707132428-5.10.134-19.101.al8.x86_64 grub_users $grub_users grub_arg --unrestricted grub_class kernel其中,
options行決定了核心啟動時接收的參數。預設情況下,它會引用一個名為kernelopts的變數。這個變數定義了適用於所有啟動項的通用核心參數。它的值儲存在/boot/grub2/grubenv檔案中。通過修改這個變數,可以實現對所有核心版本的全域參數管理。
推薦工具
手動編輯上述設定檔,存在格式錯誤導致系統無法啟動的風險。推薦使用 grubby 命令列工具來管理核心啟動項。grubby 能夠自動處理複雜的設定檔更新,確保操作的原子性和正確性。
前提條件
在開始操作前,請確保滿足以下條件:
許可權準備: 使用具有
root許可權的使用者登入到目標ECS執行個體。資料備份(推薦): 對於生產環境,建議您在操作前為執行個體建立快照,以便在出現意外時能夠快速恢複。
AI增強鏡像特殊配置: Alibaba Cloud Linux 3 AI增強鏡像中若需修改核心命令列參數或者修改啟動項,在執行任何
grubby修改命令之前,必須先執行一次以下命令。efibootmgr -q && test -f /boot/efi/EFI/alinux/grubenv && ln -sf ../efi/EFI/alinux/grubenv /boot/grub2/grubenv # 該命令僅需執行一次,重複執行無害
此操作用於確保grubenv環境被正確連結,否則您的修改將不會生效。
使用grubby修改啟動參數
本章節提供兩種修改核心啟動參數的核心方法。請根據您的具體需求選擇合適的方法。
全域修改所有啟動項的參數
當您需要將一個參數(例如,為適配某種硬體而添加 nvme_core.io_timeout=4294967295)應用到所有已安裝的核心版本上時,應使用此方法。
原理:
grubby會直接修改/boot/grub2/grubenv檔案中kernelopts變數的值,所有引用該變數的啟動項都會受到影響。操作命令:
添加參數
grubby --update-kernel=ALL --args="<NEW_PARAMETER>" # 將 <NEW_PARAMETER> 替換為您要添加的實際參數,例如:"nvme_core.io_timeout=4294967295"刪除參數
grubby --update-kernel=ALL --remove-args="<PARAMETER_TO_REMOVE>" # 將 <PARAMETER_TO_REMOVE> 替換為您要刪除的實際參數,例如:"quiet"
修改單個啟動項的核心命令列參數
當您只想為一個特定的核心版本(例如,為當前啟動並執行核心)添加或刪除一個測試性參數,而不希望影響其他核心版本或未來的全域修改時,可使用此方法。
原理: 修改單個啟動項的核心命令列參數,
kernelopts變數會被展開,並儲存到相應的啟動項設定檔/boot/loader/entries/<RELEVANT_KERNEL_BOOT_ENTRY.conf>中。說明後續如果需要繼續修改該啟動項的核心命令列參數,需要指定啟動項修改,因為啟動項設定檔中不再包含
kernelopts變數。操作命令:
添加參數
grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="<NEW_PARAMETER>" # 將 <NEW_PARAMETER> 替換為您要添加的實際參數刪除參數
grubby --update-kernel=/boot/vmlinuz-$(uname -r) --remove-args="<PARAMETER_TO_REMOVE>" # 將 <PARAMETER_TO_REMOVE> 替換為您要刪除的實際參數