跳转到内容跳转到页面导航:上一页 [访问键 p]/下一页 [访问键 n]
适用于 openSUSE Leap 15.6

6 安装多个内核版本 编辑源文件

摘要

openSUSE Leap 支持并行安装多个内核版本。安装第二个内核时,将自动创建一个启动项和一个 initrd,因此无需进一步手动配置。重新启动机器时,新添加的内核将作为额外的启动参数可用。

使用此功能,您可以安全地测试内核更新,同时始终可以回退到经过验证的旧内核。为此,请勿使用更新工具(例如 YaST 在线更新或更新程序小程序),而是按照本章所述的过程进行操作。

Tip
提示:检查您的引导加载程序配置内核

建议在安装另一个内核后检查您的引导加载程序配置,以设置您选择的默认引导项。有关更多信息,请参阅第 12.3 节,“使用 YaST 配置引导加载程序”

6.1 启用和配置多版本支持 编辑源文件

openSUSE Leap 及更高版本开始,默认情况下启用软件包(多版本支持)的多个版本安装。要验证此设置,请按以下步骤操作

  1. root 用户身份使用您选择的编辑器打开 /etc/zypp/zypp.conf

  2. 搜索字符串 multiversion。如果为能够支持此功能的内核包启用了多版本,则以下行将显示为未注释状态

    multiversion = provides:multiversion(kernel)
  3. 要将多版本支持限制为某些内核变体,请将包名称作为逗号分隔的列表添加到 /etc/zypp/zypp.conf 中的 multiversion 选项,例如:

    multiversion = kernel-default,kernel-default-base,kernel-source
  4. 保存您的更改。

Warning
警告:内核模块包 (KMP)

请确保也为新的更新内核安装所需的供应商提供的内核模块(内核模块包)。内核更新过程不会警告缺少内核模块,因为包要求仍然由系统上保留的旧内核满足。

6.1.1 自动删除未使用的内核 编辑源文件

在启用多版本支持的情况下频繁测试新内核时,引导菜单会很快变得混乱。由于 /boot 分区通常具有有限的空间,因此您可能会遇到 /boot 溢出的问题。虽然可以使用 YaST 或 Zypper 手动删除未使用的内核版本(如下所述),但也可以配置 libzypp 以自动删除不再使用的内核。默认情况下,不删除任何内核。

  1. root 用户身份使用您选择的编辑器打开 /etc/zypp/zypp.conf

  2. 搜索字符串 multiversion.kernels 并通过取消注释该行来激活此选项。此选项采用以下值的逗号分隔列表

    5.3.18-53.3 保留具有指定版本号的内核

    latest 保留具有最高版本号的内核

    latest-N 保留具有第 N 高版本号的内核

    running 保留正在运行的内核

    oldest 保留具有最低版本号的内核(随 openSUSE Leap 原始发行的内核)

    oldest+N 保留具有第 N 低版本号的内核

    以下是一些示例

    multiversion.kernels = latest,running

    保留最新的内核和当前正在运行的内核。这类似于不启用多版本功能,除了旧内核在下次重新启动 才会删除,而不会立即删除。

    multiversion.kernels = latest,latest-1,running

    保留最后两个内核和当前正在运行的内核。

    multiversion.kernels = latest,running,5.3.18-53.3

    保留最新的内核、当前正在运行的内核以及 5.3.18-53.3

    Tip
    提示:保留正在运行的内核

    除非您正在使用特殊设置,否则始终保留标记为 running 的内核。

    如果您不保留正在运行的内核,则在更新内核时它将被删除。反过来,这意味着正在运行的内核的所有模块也将被删除,并且无法再加载。

    如果您决定不保留正在运行的内核,请始终在内核升级后立即重新启动,以避免模块出现问题。

6.1.2 用例:仅在重新启动后删除旧内核 编辑源文件

您希望确保旧内核仅在系统使用新内核成功重新启动后才会被删除。

/etc/zypp/zypp.conf 中更改以下行

multiversion.kernels = latest,running

前面的参数告诉系统仅保留最新的内核和正在运行的内核(如果它们不同)。

6.1.3 用例:保留旧内核作为备用 编辑源文件

您希望保留一个或多个内核版本,以便拥有一个或多个 备用 内核。

如果需要用于测试的内核,这会很有用。如果出现问题(例如,您的机器无法启动),您仍然可以使用一个或多个已知良好的内核版本。

/etc/zypp/zypp.conf 中更改以下行

multiversion.kernels = latest,latest-1,latest-2,running

在重新启动系统安装新内核后,系统将保留三个内核:当前内核(配置为 latest,running)及其两个直接前任内核(配置为 latest-1latest-2)。

6.1.4 用例:保留特定内核版本 编辑源文件

您定期更新系统并安装新的内核版本。但是,您还在编译自己的内核版本,并希望确保系统保留它们。

/etc/zypp/zypp.conf 中更改以下行

multiversion.kernels = latest,5.3.18-53.3,running

在重新启动系统安装新内核后,系统将保留两个内核:新的正在运行的内核(配置为 latest,running)和您的自编译内核(配置为 5.3.18-53.3)。

6.2 使用 YaST 安装/删除多个内核版本 编辑源文件

您可以使用 YaST 安装或删除多个内核

  1. 启动 YaST 并通过 软件 › 软件管理 打开软件管理器。

  2. 通过选择 查看 › 包分类 › 多版本包 列出所有能够提供多个版本的包。

    The YaST software manager: multiversion view
    图 6.1: YaST 软件管理器:多版本视图
  3. 选择一个包并在左侧底部的窗格中打开其 版本 选项卡。

  4. 要安装一个包,请单击其旁边的复选框。绿色复选标记表示已选中以进行安装。

    要删除已安装的包(标记为白色复选标记),请单击其旁边的复选框,直到红色 X 表示已选中以进行删除。

  5. 单击 接受 以开始安装。

6.3 使用 Zypper 安装/删除多个内核版本 编辑源文件

您可以使用 zypper 安装或删除多个内核

  1. 使用命令 zypper se -s 'kernel*' 显示可用所有内核包的列表

    S  | Name                 | Type    | Version           | Arch   | Repository
    ---+----------------------+---------+-------------------+--------+------------------------------------------------------
    i+ | kernel-default                          | package | 6.4.0-150600.9.2              | x86_64 | SLE-Module-Basesystem15-SP6-Pool
       | kernel-default-base                     | package | 6.4.0-150600.9.2.150600.10.40 | x86_64 | SLE-Module-Basesystem15-SP6-Pool
       | kernel-default-devel                    | package | 6.4.0-150600.9.2              | x86_64 | SLE-Module-Basesystem15-SP6-Pool
       | kernel-devel                            | package | 6.4.0-150600.9.2              | noarch | SLE-Module-Basesystem15-SP6-Pool
    i  | kernel-firmware-all                     | package | 20240201-150600.1.1           | noarch | SLE-Module-Basesystem15-SP6-Pool
    i  | kernel-firmware-amdgpu                  | package | 20240201-150600.1.1           | noarch | SLE-Module-Basesystem15-SP6-Pool
    i  | kernel-firmware-ath10k                  | package | 20240201-150600.1.1           | noarch | SLE-Module-Basesystem15-SP6-Pool
    i  | kernel-firmware-ath11k                  | package | 20240201-150600.1.1           | noarch | SLE-Module-Basesystem15-SP6-Pool
    i  | kernel-firmware-ath12k                  | package | 20240201-150600.1.1           | noarch | SLE-Module-Basesystem15-SP6-Pool
    i  | kernel-firmware-atheros                 | package | 20240201-150600.1.1           | noarch | SLE-Module-Basesystem15-SP6-Pool
    i  | kernel-firmware-bluetooth               | package | 20240201-150600.1.1           | noarch | SLE-Module-Basesystem15-SP6-Pool
    i  | kernel-firmware-bnx2                    | package | 20240201-150600.1.1           | noarch | SLE-Module-Basesystem15-SP6-Pool
    i  | kernel-firmware-brcm                    | package | 20240201-150600.1.1           | noarch | SLE-Module-Basesystem15-SP6-Pool
    i  | kernel-firmware-chelsio                 | package | 20240201-150600.1.1           | noarch | SLE-Module-Basesystem15-SP6-Pool
    i  | kernel-firmware-dpaa2                   | package | 20240201-150600.1.1           | noarch | SLE-Module-Basesystem15-SP6-Pool
    i  | kernel-firmware-i915                    | package | 20240201-150600.1.1           | noarch | SLE-Module-Basesystem15-SP6-Pool
    i  | kernel-firmware-intel                   | package | 20240201-150600.1.1           | noarch | SLE-Module-Basesystem15-SP6-Pool
    i  | kernel-firmware-iwlwifi                 | package | 20240201-150600.1.1           | noarch | SLE-Module-Basesystem15-SP6-Pool
    i  | kernel-firmware-liquidio                | package | 20240201-150600.1.1           | noarch | SLE-Module-Basesystem15-SP6-Pool
    i  | kernel-firmware-marvell                 | package | 20240201-150600.1.1           | noarch | SLE-Module-Basesystem15-SP6-Pool
    i  | kernel-firmware-media                   | package | 20240201-150600.1.1           | noarch | SLE-Module-Basesystem15-SP6-Pool
    i  | kernel-firmware-mediatek                | package | 20240201-150600.1.1           | noarch | SLE-Module-Basesystem15-SP6-Pool
    i  | kernel-firmware-mellanox                | package | 20240201-150600.1.1           | noarch | SLE-Module-Basesystem15-SP6-Pool
    i  | kernel-firmware-mwifiex                 | package | 20240201-150600.1.1           | noarch | SLE-Module-Basesystem15-SP6-Pool
    i  | kernel-firmware-network                 | package | 20240201-150600.1.1           | noarch | SLE-Module-Basesystem15-SP6-Pool
    i  | kernel-firmware-nfp                     | package | 20240201-150600.1.1           | noarch | SLE-Module-Basesystem15-SP6-Pool
    i  | kernel-firmware-nvidia                  | package | 20240201-150600.1.1           | noarch | SLE-Module-Basesystem15-SP6-Pool
       | kernel-firmware-nvidia-gsp-G06          | package | 525.116.04-150500.1.1         | x86_64 | SLE-Module-Basesystem15-SP6-Pool
       | kernel-firmware-nvidia-gspx-G06         | package | 550.54.14-150600.1.1          | x86_64 | SLE-Module-Basesystem15-SP6-Pool
    i  | kernel-firmware-platform                | package | 20240201-150600.1.1           | noarch | SLE-Module-Basesystem15-SP6-Pool
    i  | kernel-firmware-prestera                | package | 20240201-150600.1.1           | noarch | SLE-Module-Basesystem15-SP6-Pool
    i  | kernel-firmware-qcom                    | package | 20240201-150600.1.1           | noarch | SLE-Module-Basesystem15-SP6-Pool
    i  | kernel-firmware-qlogic                  | package | 20240201-150600.1.1           | noarch | SLE-Module-Basesystem15-SP6-Pool
    i  | kernel-firmware-radeon                  | package | 20240201-150600.1.1           | noarch | SLE-Module-Basesystem15-SP6-Pool
    i  | kernel-firmware-realtek                 | package | 20240201-150600.1.1           | noarch | SLE-Module-Basesystem15-SP6-Pool
    i  | kernel-firmware-serial                  | package | 20240201-150600.1.1           | noarch | SLE-Module-Basesystem15-SP6-Pool
    i  | kernel-firmware-sound                   | package | 20240201-150600.1.1           | noarch | SLE-Module-Basesystem15-SP6-Pool
    i  | kernel-firmware-ti                      | package | 20240201-150600.1.1           | noarch | SLE-Module-Basesystem15-SP6-Pool
    i  | kernel-firmware-ueagle                  | package | 20240201-150600.1.1           | noarch | SLE-Module-Basesystem15-SP6-Pool
    i  | kernel-firmware-usb-network             | package | 20240201-150600.1.1           | noarch | SLE-Module-Basesystem15-SP6-Pool
       | kernel-macros                           | package | 6.4.0-150600.9.2              | noarch | SLE-Module-Basesystem15-SP6-Pool
  2. 在安装时指定确切的版本

    > sudo zypper in kernel-default-6.4.0-150600.9.2
  3. 在卸载内核时,使用命令 zypper se -si 'kernel*' 列出所有已安装的内核,并使用 zypper rm PACKAGENAME-VERSION 删除该包。

6.4 从仓库 Kernel:HEAD 安装最新内核版本 编辑源文件

  1. 使用(仓库使用别名 kernel-repo)添加 Kernel:HEAD 仓库

    > sudo zypper ar \
    http://download.opensuse.org/repositories/Kernel:/HEAD/standard/ \
    kernel-repo
  2. 要刷新仓库,请运行

    > sudo zypper ref
  3. 要将内核升级到 Kernel:HEAD 仓库中的最新版本,请运行

    > sudo zypper dist-upgrade --allow-vendor-change --from kernel-repo
  4. 重新启动机器。

Warning
警告:从 Kernel:HEAD 安装可能会破坏系统

安装来自 Kernel:HEAD 的内核绝不必要,因为重要的修复程序由 SUSE 反向移植并作为官方更新提供。仅安装最新的内核对内核开发人员和内核测试人员才有意义。如果从 Kernel:HEAD 安装,请注意它可能会破坏您的系统。请务必始终保留原始内核以进行引导。

打印此页面