7.11. 在离线和 air-gapped 环境中部署镜像模式更新


使用 Red Hat Enterprise Linux 的镜像模式,您可以使用外部存储传输容器镜像,在离线和 air-gapped 环境中部署 RHEL 系统更新。

要将镜像模式更新部署到主机机器上,您需要网络连接才能访问 registry 并获取更新。但是,当您的环境需要特定的架构因素,如硬件规格、字符串的安全要求、基于位置的网络限制或在远程访问不可用时进行计划更新时,您可以完全离线和 air-gapped 执行系统更新。

注意

当您在很多设备中使用离线更新时,离线更新可能会非常耗时,且可能需要现场功能来部署更新。

先决条件

  • 正在运行的 RHEL 系统,其中包含您要对系统进行的更新。
  • 在目标硬件上部署的 Red Hat Enterprise Linux 10 正在运行的 RHEL 系统。
  • container-tools 元数据软件包已安装。meta-package 包含所有容器工具,如 Podman、Buildah 和 Skopeo。
  • 访问 registry 或本地存储的容器。
  • 容器的外部存储设备需要更新。

流程

  1. 验证哪些存储设备已经连接到您的系统。

    $ lsblk
    NAME          MAJ:MIN     SIZE   RO TYPE  MOUNTPOINTS
    zram0           251:0       8G    0 disk  [SWAP]
    nvme0n1         259:0   476.9G    0 disk
    ├─nvme0n1p1    259:1     600M    0 part  /boot/efi
    ├─nvme0n1p2    259:2       1G    0 part  /boot
    └─nvme0n1p3    259:3   475.4G    0 part
  2. 连接外部存储并运行相同的命令。比较两个输出,以查找系统上外部存储设备的名称。

    $ lsblk
    NAME        MAJ:MIN   SIZE   RO TYPE  MOUNTPOINTS
    sda             8:0   28.9G    0 disk
    └─sda1         8:1   28.9G    0 part
    zram0         251:0      8G    0 disk  [SWAP]
    nvme0n1       259:0  476.9G    0 disk
    ├─nvme0n1p1  259:1    600M    0 part  /boot/efi
    ├─nvme0n1p2  259:2      1G    0 part  /boot
    └─nvme0n1p3  259:3  475.4G    0 part

    在这种情况下,名为 sda 的 USB 驱动器有一个 sda 1 分区。

    MOUNTPOINTS 列列出了外部存储上分区的挂载点。如果您的系统自动挂载外部存储,则已存在有效的挂载点。但是,如果没有挂载点,则必须自行挂载它,然后才能在设备上存储任何内容。

  3. 创建空目录或使用现有目录挂载分区:

    $ sudo mkdir /mnt/usb/
    1. 挂载您的设备分区。

      $ sudo mount /dev/sda1 /mnt/usb
    2. 可选:验证是否正确创建了分区:

      $ lsblk
      NAME         MAJ:MIN    SIZE   RO TYPE  MOUNTPOINTS
      sda              8:0   28.9G    0 disk
      └─sda1          8:1   28.9G    0 part  /mnt/usb
      [...]

      您的外部存储设备已准备好将文件复制到其中。

  4. 使用 skopeo 命令,将本地存储的容器复制到挂载的设备中,并为您自己的环境调整容器的路径和名称:

    • 对于本地存储:

      $ sudo skopeo copy --preserve-digests --all \
        containers-storage:localhost/rhel-container:latest \
        oci://mnt/usb/
    • 对于存储在远程 registry 中的容器:

      $ sudo skopeo copy --preserve-digests --all \
        docker://quay.io/example:latest \
        oci://mnt/usb/
      注意

      根据容器的大小,这些命令可能需要几分钟时间完成。

  5. 卸载并弹出外部存储:

    $ sudo umount /dev/sda1
    $ sudo eject /dev/sda1
  6. 将更新应用到离线系统上的容器。
  7. 将外部存储设备插入离线系统中。如果存储设备没有自动挂载,请使用 mkdirmount 命令查找外部存储并挂载它。
  8. 将容器从外部设备复制到离线系统的本地容器 registry。将容器复制到离线机器的本地容器存储中:

    $ skopeo copy --preserve-digests --all \
      oci://mnt/usb \
      containers-storage:rhel-update:latest

    在这种情况下,外部存储的挂载点是 OCI 部分的路径。containers-storage 部分因您希望容器具有的名称和标签而异。

  9. 使用 Podman 验证容器现在是否是本地的:

    $ podman images
    REPOSITORY			        TAG     IMAGE ID  CREATED  SIZE
    example.io/library/rhel-update   latest  cdb6d...  1 min    1.48 GB
  10. 使用 bootc 在离线系统中向容器部署更新:

    $ bootc switch --transport containers-storage \
    example.io/library/rhel-update:latest
    1. 如果无法将容器复制到本地存储,请使用 oci 传输 标志和存储设备的路径:

      $ bootc switch --transport oci /mnt/usb

      使用 bootc switch 命令中的- transport 标志,您可以为容器指定替代源。

      默认情况下,bootc 会尝试从 registry 中拉取,因为 bootc-image-builder 使用 registry 来构建原始镜像。使用 bootc upgrade 时,您无法指定更新所在的位置。通过使用 bootc 开关 并指定您使用本地容器存储,您无法仅删除远程 registry 的要求,同时在以后使用此本地容器来部署更新。

      现在,您可以成功使用 bootc 升级,前提是本地容器和更新共享相同的位置。如果要切换到将来的远程存储库中的更新,您必须再次使用 bootc 切换

验证

  1. 确保正确部署更新:

    $ bootc status
    Staged image: containers-storage:example.io/library/rhel-update:latest
      Digest: sha256: 05b1dfa791...
      Version: 10.0 (2025-07-07 18:33:19.380715153 UTC)
    Booted Image: localhost/rhel-intel:base
      Digest: sha256: 7d6f312e09...
      Version: 10.0 (2025-06-23 15:58:12.228704562 UTC)

    输出显示您当前的引导镜像,以及暂存至的所有更改。您之前使用的容器可见,但暂存的更改在下一次重启之前不会发生。输出还会确认将从容器存储中拉取更新。

  2. 重启系统:

    $ bootc status
    Booted image: containers-storage:example.io/library/rhel-update:latest
    	Digest: sha256: 05b1dfa791...
    	Version: 10.0 (2025-07-07 18:33:19.380715153 UTC)
    Rollback image: localhost/rhel-intel:base
    	Digest: sha256: 7d6f312e09...
    	Version: 10.0 (2025-06-23 15:58:12.228704562 UTC)

    您可以验证您是否引导到正确的镜像:

    • 引导的镜像是您的更新镜像。
    • 回滚镜像是之前的镜像。您已成功执行了离线镜像模式更新。
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部