如何固定linux 内核 如何修改Linux内核

如何固定linux 内核

在 Linux 系统中,固定(锁定)内核版本可以防止系统在更新时自动升级到新内核,从而保持系统稳定性。以下是几种常见的方法:


方法 1:使用 apt-mark 锁定内核(推荐)
适用于 Debian/Ubuntu 系统,使用 apt-mark 阻止内核自动升级:

1. 查看已安装的内核

dpkg --list | grep linux-image

apt list --installed | grep linux-image

2. 锁定当前内核版本

sudo apt-mark hold linux-image-<version> linux-headers-<version> linux-modules-<version>

例如:

sudo apt-mark hold linux-image-6.8.0-59-generic linux-headers-6.8.0-59-generic linux-modules-6.8.0-59-generic

3. 检查锁定状态

apt-mark showhold

4. 解锁内核(如需恢复更新)

sudo apt-mark unhold linux-image-<version> linux-headers-<version> linux-modules-<version>

方法 2:修改 /etc/apt/apt.conf.d/ 阻止内核更新
适用于 Debian/Ubuntu,手动配置 APT 忽略内核更新:

1. 创建或编辑 APT 配置文件

sudo nano /etc/apt/apt.conf.d/99-hold-kernel

2. 添加以下内容

Package: linux-image-*
Pin: version *
Pin-Priority: -1

Package: linux-headers-*
Pin: version *
Pin-Priority: -1

Package: linux-modules-*
Pin: version *
Pin-Priority: -1

3. 保存并退出(Ctrl + XYEnter
然后运行:

sudo apt update

方法 3:手动删除新内核(不推荐)
如果已经安装了新内核,可以手动删除并保留旧内核:

1. 查看所有内核

dpkg --list | grep linux-image

2. 删除不需要的内核

sudo apt remove linux-image-<unwanted-version> linux-headers-<unwanted-version>

例如:

sudo apt remove linux-image-6.8.0-40-generic linux-headers-6.8.0-40-generic

3. 更新 GRUB

sudo update-grub

方法 4:使用 yum/dnf 锁定内核(RHEL/CentOS/Fedora)
适用于 RHEL/CentOS/Fedora 系统:

1. 查看已安装的内核

rpm -qa | grep kernel

2. 锁定内核

sudo yum versionlock add kernel-<version>

或(Fedora/CentOS 8+)

sudo dnf versionlock add kernel-<version>

3. 检查锁定状态

sudo yum versionlock list

sudo dnf versionlock list

4. 解锁内核

sudo yum versionlock delete kernel-<version>

sudo dnf versionlock delete kernel-<version>

总结

方法适用系统推荐度
apt-mark holdDebian/Ubuntu⭐⭐⭐⭐⭐
APT 配置文件Debian/Ubuntu⭐⭐⭐⭐
手动删除内核所有 Linux⭐⭐(不推荐)
yum/dnf versionlockRHEL/CentOS/Fedora⭐⭐⭐⭐⭐

推荐使用 apt-mark holddnf versionlock,因为它们不会影响其他软件更新,仅锁定内核版本。

如果只是想防止自动升级,方法 1 或 方法 2 是最安全的选择。

如何切换内核

在 Linux 系统中,你可以手动切换内核版本,通常是在 GRUB 启动菜单 中选择不同的内核,或者 永久更改默认启动的内核。以下是具体方法:


方法 1:临时切换(GRUB 启动菜单)
适用于 单次启动 选择不同内核:

  1. 重启电脑,在 BIOS/UEFI 界面后,按住 Shift(BIOS)或 Esc(UEFI) 进入 GRUB 菜单。
  2. 选择 Advanced options for Ubuntu(或类似选项)。
  3. 选择你想要启动的内核版本(如 6.8.0-40-generic6.8.0-59-generic)。
  4. Enter 启动,系统会临时使用该内核,下次重启仍会恢复默认内核。

方法 2:永久切换默认内核
适用于 长期使用某个内核,修改 GRUB 默认启动项:

1. 查看当前可用内核

awk -F\' '/menuentry / {print $2}' /boot/grub/grub.cfg | grep -i "linux"

grep -A100 "menuentry 'Ubuntu" /boot/grub/grub.cfg | grep "linux"

输出示例:

Ubuntu, with Linux 6.8.0-59-generic
Ubuntu, with Linux 6.8.0-59-generic (recovery mode)
Ubuntu, with Linux 6.8.0-40-generic
Ubuntu, with Linux 6.8.0-40-generic (recovery mode)

2. 查看当前默认内核

grub-editenv list | grep saved_entry

cat /proc/cmdline | grep -o "BOOT_IMAGE=[^ ]*"

3. 修改 GRUB 默认启动项
方法 A:使用 grub-set-default(推荐)

sudo grub-set-default "Ubuntu, with Linux 6.8.0-40-generic"  # 替换成你要的内核

然后更新 GRUB:

sudo update-grub

方法 B:手动编辑 /etc/default/grub

sudo nano /etc/default/grub

找到 GRUB_DEFAULT,修改为:

GRUB_DEFAULT="Ubuntu, with Linux 6.8.0-40-generic"  # 替换成你要的内核

保存后更新 GRUB:

sudo update-grub

4. 重启生效

sudo reboot

方法 3:卸载不需要的内核(可选)
如果某个内核不再需要,可以卸载它(谨慎操作!):

sudo apt remove linux-image-6.8.0-59-generic linux-headers-6.8.0-59-generic  # 替换成要卸载的版本

然后更新 GRUB:

sudo update-grub

总结

方法适用场景命令示例
临时切换单次测试不同内核在 GRUB 菜单手动选择
永久切换(推荐)长期使用某个内核sudo grub-set-default "Ubuntu, with Linux 6.8.0-40-generic" + sudo update-grub
卸载旧内核清理不再使用的内核sudo apt remove linux-image-6.8.0-59-generic

注意事项
• 不要卸载所有旧内核,至少保留一个备用内核以防新内核启动失败。

• 如果新内核启动失败,可以在 GRUB 菜单选择旧内核进入系统。

• 某些服务器可能需要调整 GRUB_TIMEOUT 让菜单显示更长时间(默认 5 秒)。

最新的切换内核的方法

出现报错

Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-6.8.0-59-generic
Found initrd image: /boot/initrd.img-6.8.0-59-generic
Found linux image: /boot/vmlinuz-6.8.0-40-generic
Found initrd image: /boot/initrd.img-6.8.0-40-generic
Warning: Please don't use old title `Ubuntu, with Linux 6.8.0-40-generic' for GRUB_DEFAULT, use `Advanced options for Ubuntu>Ubuntu, with Linux 6.8.0-40-generic' (for versions before 2.00) or `gnulinux-advanced-0d453e5b-866c-4b5a-b9dc-467f6d324695>gnulinux-6.8.0-40-generic-advanced-0d453e5b-866c-4b5a-b9dc-467f6d324695' (for 2.00 or later)
Found memtest86+ image: /boot/memtest86+.elf
Found memtest86+ image: /boot/memtest86+.bin
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
done

从你的 update-grub 输出可以看到,系统检测到了两个内核:
6.8.0-59-generic(当前默认)

6.8.0-40-generic

但 GRUB 警告你 不要直接使用 Ubuntu, with Linux 6.8.0-40-generic 作为 GRUB_DEFAULT,而是应该使用 完整的 GRUB 菜单路径(因为 GRUB 2.00+ 版本使用了更复杂的 ID 机制)。


如何正确切换默认内核?
方法 1:使用 grub-set-default(推荐)

  1. 查看所有可用的 GRUB 菜单项:

    sudo grep -P "menuentry |submenu " /boot/grub/grub.cfg
    

    输出示例:

    menuentry 'Ubuntu' --class ubuntu ...
    submenu 'Advanced options for Ubuntu' ...
        menuentry 'Ubuntu, with Linux 6.8.0-59-generic' ...
        menuentry 'Ubuntu, with Linux 6.8.0-59-generic (recovery mode)' ...
        menuentry 'Ubuntu, with Linux 6.8.0-40-generic' ...
        menuentry 'Ubuntu, with Linux 6.8.0-40-generic (recovery mode)' ...
    
  2. 设置默认启动项:
    • 如果你想默认启动 6.8.0-40-generic,运行:

    sudo grub-set-default 'Advanced options for Ubuntu>Ubuntu, with Linux 6.8.0-40-generic'
    

    • 或者使用 GRUB 2.00+ 的完整 ID(从警告信息中复制):

    sudo grub-set-default 'gnulinux-advanced-0d453e5b-866c-4b5a-b9dc-467f6d324695>gnulinux-6.8.0-40-generic-advanced-0d453e5b-866c-4b5a-b9dc-467f6d324695'
    
  3. 更新 GRUB:

    sudo update-grub
    
  4. 验证是否生效:

    grub-editenv list | grep saved_entry
    

    应该显示你刚刚设置的默认内核。


方法 2:手动编辑 /etc/default/grub

  1. 打开配置文件:

    sudo nano /etc/default/grub
    
  2. 修改 GRUB_DEFAULT
    • 方式 1(推荐):使用 >

    GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 6.8.0-40-generic"
    

    • 方式 2:使用 GRUB 2.00+ 的完整 ID(从警告信息复制)

    GRUB_DEFAULT="gnulinux-advanced-0d453e5b-866c-4b5a-b9dc-467f6d324695>gnulinux-6.8.0-40-generic-advanced-0d453e5b-866c-4b5a-b9dc-467f6d324695"
    
  3. 保存并更新 GRUB:

    sudo update-grub
    

如何验证当前运行的内核?

uname -r

输出示例:

6.8.0-59-generic  # 当前运行的内核

总结

方法适用场景命令示例
grub-set-default推荐方式sudo grub-set-default 'Advanced options for Ubuntu>Ubuntu, with Linux 6.8.0-40-generic'
手动编辑 /etc/default/grub需要精确控制修改 GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 6.8.0-40-generic"
验证当前内核检查是否生效uname -r

注意事项
• 不要直接使用 Ubuntu, with Linux x.x.x-xx-generic,必须包含 Advanced options for Ubuntu> 前缀。

• 如果修改后无法启动,可以在 GRUB 菜单手动选择旧内核进入系统并修复配置。

• 建议保留至少一个旧内核作为备用。

根据你的 update-grub 输出,系统检测到两个可用的 Linux 内核:
6.8.0-59-generic(较新版本)

6.8.0-40-generic(较旧版本)

以下是几种管理内核的方法:

  1. 查看当前运行的内核
uname -r
  1. 查看所有已安装的内核
dpkg --list | grep linux-image
  1. 临时选择不同内核(下次启动时)
    重启时在 GRUB 菜单中选择:

  2. 重启电脑

  3. 在 BIOS/UEFI 界面后按住 Shift(传统 BIOS)或 Esc(UEFI)进入 GRUB 菜单

  4. 选择 “Advanced options for Ubuntu”

  5. 选择你想要的内核版本

  6. 永久更改默认内核(两种方法)

方法一:使用 grub-set-default(推荐)

sudo grub-set-default "Advanced options for Ubuntu>Ubuntu, with Linux 6.8.0-40-generic"
sudo update-grub

方法二:编辑 GRUB 配置文件

sudo nano /etc/default/grub

修改:

GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 6.8.0-40-generic"

然后:

sudo update-grub
  1. 删除不需要的内核(谨慎操作)
sudo apt purge linux-image-6.8.0-59-generic linux-headers-6.8.0-59-generic
sudo update-grub
  1. 锁定内核版本(防止自动更新)
sudo apt-mark hold linux-image-6.8.0-40-generic linux-headers-6.8.0-40-generic

注意事项:

  1. 始终保留至少一个可用的内核
  2. 更改默认内核后建议重启验证
  3. 如果遇到启动问题,可以在 GRUB 菜单中选择旧内核进入系统

需要更详细的帮助可以告诉我你想实现的具体目标。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丁金金_chihiro_修行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值