.. _grubby: ==================== grubby修改内核参数 ==================== 在做 :ref:`kernel` 内核参数配置时,例如 :ref:`ubuntu_grub` 采用修订 ``/etc/default/grub`` 配置文件,然后通过 ``update-grub`` 或者 ``grub2-mkconfig -o /boot/grub2/grub.cfg`` 完成内核参数修订 (包括 :ref:`redhat_linux` 也支持这种方式)。 不过,这种修订方式需要编辑配置文件,不适合通过脚本自动化完成海量服务器修订。(自己编写 ``sed`` 脚本虽然也能批量处理,但是通用性较差且容易误处理)所以, ``grubby`` 工具提供了读取Grub信息以及持久化修订 ``grub.cfg`` 的能力,可以完成批量处理 GRUB 2 配置文件,适合对生产环境海量服务器修订。 查看内核信息 ============== - 要找出系统默认启动内核执行:: grubby --default-kernel 输出案例:: /boot/vmlinuz-5.18.11-100.fc35.x86_64 - 查看默认内核的索引值:: grubby --default-index 输出案例:: 0 这个索引值也就是对应前面 ``--default-kernel`` 的 ``/boot/vmlinuz-5.18.11-100.fc35.x86_64`` - 现在我们可以查看系统中有那些内核,并且找出其对应grub的索引值(这个索引值用于配置系统启动时加载的内核,见下文):: grubby --info=ALL 上述命令显示出所有内核以及配置项,例如在 ``z-dev`` 这个 :ref:`fedora` 系统:: index=0 kernel="/boot/vmlinuz-5.18.11-100.fc35.x86_64" args="ro console=ttyS0,115200" root="UUID=23fc0f61-894e-4b8e-a623-fb4290bb23e8" initrd="/boot/initramfs-5.18.11-100.fc35.x86_64.img" title="Fedora Linux (5.18.11-100.fc35.x86_64) 35 (Server Edition)" id="784e41a278df4e3e804b451ac3bb4c3e-5.18.11-100.fc35.x86_64" index=1 kernel="/boot/vmlinuz-5.18.10-100.fc35.x86_64" args="ro console=ttyS0,115200" root="UUID=23fc0f61-894e-4b8e-a623-fb4290bb23e8" initrd="/boot/initramfs-5.18.10-100.fc35.x86_64.img" title="Fedora Linux (5.18.10-100.fc35.x86_64) 35 (Server Edition)" id="784e41a278df4e3e804b451ac3bb4c3e-5.18.10-100.fc35.x86_64" index=2 kernel="/boot/vmlinuz-5.18.5-100.fc35.x86_64" args="ro console=ttyS0,115200" root="UUID=23fc0f61-894e-4b8e-a623-fb4290bb23e8" initrd="/boot/initramfs-5.18.5-100.fc35.x86_64.img" title="Fedora Linux (5.18.5-100.fc35.x86_64) 35 (Server Edition)" id="784e41a278df4e3e804b451ac3bb4c3e-5.18.5-100.fc35.x86_64" index=3 kernel="/boot/vmlinuz-0-rescue-784e41a278df4e3e804b451ac3bb4c3e" args="ro console=ttyS0,115200" root="UUID=23fc0f61-894e-4b8e-a623-fb4290bb23e8" initrd="/boot/initramfs-0-rescue-784e41a278df4e3e804b451ac3bb4c3e.img" title="Fedora Linux (0-rescue-784e41a278df4e3e804b451ac3bb4c3e) 35 (Server Edition)" id="784e41a278df4e3e804b451ac3bb4c3e-0-rescue" 可以看到系统中有4个grub启动项,分别对应了4种内核。我们也可以看到默认启动的是索引 ``0`` 的内核 ``/boot/vmlinuz-5.18.11-100.fc35.x86_64`` - 可以指定查看某个内核的参数:: grubby --info /boot/vmlinuz-5.18.11-100.fc35.x86_64 输出显示:: index=0 kernel="/boot/vmlinuz-5.18.11-100.fc35.x86_64" args="ro console=ttyS0,115200" root="UUID=23fc0f61-894e-4b8e-a623-fb4290bb23e8" initrd="/boot/initramfs-5.18.11-100.fc35.x86_64.img" title="Fedora Linux (5.18.11-100.fc35.x86_64) 35 (Server Edition)" id="784e41a278df4e3e804b451ac3bb4c3e-5.18.11-100.fc35.x86_64" 修订内核参数 =============== 修订不同的启动内核 -------------------- - 如果需要回滚内核,例如将默认启动内核从 ``0`` 改为 ``1`` :: grubby --set-default-index 1 也可以直接指定内核:: grubby --set-default /boot/vmlinuz-5.18.10-100.fc35.x86_64 修改内核参数 ---------------- ``grubby`` 提供了参数 ``--update-kernel`` 可以对指定内核或者所有内核的参数进行修改: - ``--update-kernel=ALL`` 同时对所有内核的参数进行修订 - ``--update-kernel /boot/vmlinuz-5.18.11-100.fc35.x86_64`` 则对指定内核 ``/boot/vmlinuz-5.18.11-100.fc35.x86_64`` 进行参数修订 提供了2种内核参数修改方法: - ``--args`` 添加或修改内核参数(如果能够匹配上现有内核参数就是修改) - ``--remove-args`` 删除内核参数 举例:: grubby --remove-args="rhgb quiet" --args=console=ttyS0,115200 --update-kernel /boot/vmlinuz-4.2.0-1.fc23.x86_64 完成后可以使用 ``--info`` 检查对应内核的参数:: grubby --info /boot/vmlinuz-4.2.0-1.fc23.x86_64 上文也说了,如果 ``--args`` 参数匹配上了现有的内核参数,则是对现有参数进行修改,举例,修改内核串口参数比特率9660:: grubby --args="console=ttyS0,9660" --update-kernel /boot/vmlinuz-5.18.11-100.fc35.x86_64 增加内核项 ============ 有时候我们需要验证同一个内核的不同内核参数,我们可以采用添加入口项方式。 - 例如,手工编译了一个新的 ``testing`` 内核,需要测试:: grubby --add-kernel=/boot/vmlinuz-5.18.11-100.testing.x86_64 \ --title="Fedora Linux (5.18.11-100.testing.x86_64)" \ --initrd="/boot/initramfs-5.18.11-100.testing.x86_64.img" \ --copy-default 使用 ``--copy-default`` 参数可以把现有系统的默认内核参数全部复制过来 - 例如,我们需要测试新的 ``testing`` 内核不同参数:: grubby --add-kernel=/boot/vmlinuz-5.18.11-100.testing.x86_64 \ --title="Fedora Linux (5.18.11-100.testing.x86_64) console 9660" \ --initrd="/boot/initramfs-5.18.11-100.testing.x86_64.img" \ --args="console=ttyS0,9660" - 测试完成后可以删除内核项:: grubby --remove-kernel=/boot/vmlinuz-5.18.11-100.testing.x86_64 参考 ======= - `12 practical grubby command examples (cheat sheet) `_ - `Change default kernel using grubby Tool `_ - `Modify grub.cfg configurations on Linux using grubby `_ - `Configuring GRUB 2 Using the grubby Tool `_