2.3. 使用自动恢复功能恢复备份


您可以在删除或损坏所需数据的系统事件后恢复备份。使用以下步骤使用自动恢复恢复备份。自动恢复会选择最新的备份并恢复它。以前,使用自动恢复的备份会移到 PATH/restored 目录中。

先决条件

  • 您已停止了 MicroShift。

流程

  1. 运行以下命令,从备份目录中恢复最新的备份:

    $ sudo microshift restore --auto-recovery <path_of_directory> 
    1
    1
    <path_of_directory > 替换为存储备份的目录的路径。例如: /var/lib/microshift-auto-recovery
    注意
    • --auto-recovery 选项将 MicroShift 数据复制到 /var/lib/microshift-auto-recovery/failed/ failed/ 以供稍后的调查,选择最新的备份并恢复它。
    • --dont-save-failed 选项禁用对失败的 MicroShift 数据的备份。

    输出示例

    ??? I1104 09:19:28.617225    8950 state.go:80] "Read state from the disk" state={"LastBackup":"20241022101528_default-a129624b9233fa54fe3574f1aa211bc2d85e1052b52245fe7d83f10c2f6d28e3.0"}
    ??? I1104 09:19:28.617323    8950 storage.go:78] "Auto-recovery backup storage read and parsed" dirs=["20241022101255_default-a129624b9233fa54fe3574f1aa211bc2d85e1052b52245fe7d83f10c2f6d28e3.0","20241022101520_default-a129624b9233fa54fe3574f1aa211bc2d85e1052b52245fe7d83f10c2f6d28e3.0","20241022101528_default-a129624b9233fa54fe3574f1aa211bc2d85e1052b52245fe7d83f10c2f6d28e3.0","20241104091852_default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1","restored"] backups=[{"CreationTime":"2024-10-22T10:12:55Z","Version":"default-a129624b9233fa54fe3574f1aa211bc2d85e1052b52245fe7d83f10c2f6d28e3.0"},{"CreationTime":"2024-10-22T10:15:20Z","Version":"default-a129624b9233fa54fe3574f1aa211bc2d85e1052b52245fe7d83f10c2f6d28e3.0"},{"CreationTime":"2024-10-22T10:15:28Z","Version":"default-a129624b9233fa54fe3574f1aa211bc2d85e1052b52245fe7d83f10c2f6d28e3.0"},{"CreationTime":"2024-11-04T09:18:52Z","Version":"default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1"}]
    ??? I1104 09:19:28.617350    8950 storage.go:40] "Filtered list of backups - removed previously restored backup" removed="20241022101528_default-a129624b9233fa54fe3574f1aa211bc2d85e1052b52245fe7d83f10c2f6d28e3.0" newList=[{"CreationTime":"2024-10-22T10:12:55Z","Version":"default-a129624b9233fa54fe3574f1aa211bc2d85e1052b52245fe7d83f10c2f6d28e3.0"},{"CreationTime":"2024-10-22T10:15:20Z","Version":"default-a129624b9233fa54fe3574f1aa211bc2d85e1052b52245fe7d83f10c2f6d28e3.0"},{"CreationTime":"2024-11-04T09:18:52Z","Version":"default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1"}]
    ??? I1104 09:19:28.633237    8950 system.go:58] "OSTree deployments" deployments=[{"id":"default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1","booted":true,"staged":false,"pinned":false},{"id":"default-a129624b9233fa54fe3574f1aa211bc2d85e1052b52245fe7d83f10c2f6d28e3.0","booted":false,"staged":false,"pinned":false}]
    ??? I1104 09:19:28.633258    8950 storage.go:49] "Filtered list of backups by version" version="default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1" newList=[{"CreationTime":"2024-11-04T09:18:52Z","Version":"default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1"}]
    ??? I1104 09:19:28.633268    8950 restore.go:170] "Potential backups" bz=[{"CreationTime":"2024-11-04T09:18:52Z","Version":"default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1"}]
    ??? I1104 09:19:28.633277    8950 restore.go:173] "Candidate backup for restore" b={"CreationTime":"2024-11-04T09:18:52Z","Version":"default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1"}
    ??? I1104 09:19:28.634007    8950 disk_space.go:33] Calculated size of "/var/lib/microshift-auto-recovery/20241104091852_default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1": 261M - increasing by 10% for safety: 287M
    ??? I1104 09:19:28.634096    8950 disk_space.go:44] Calculated available disk space for "/var/lib": 1658M
    ??? I1104 09:19:28.634507    8950 disk_space.go:33] Calculated size of "/var/lib/microshift": 261M - increasing by 10% for safety: 287M
    ??? I1104 09:19:28.634522    8950 disk_space.go:44] Calculated available disk space for "/var/lib/microshift-auto-recovery": 1658M
    ??? I1104 09:19:28.649719    8950 system.go:58] "OSTree deployments" deployments=[{"id":"default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1","booted":true,"staged":false,"pinned":false},{"id":"default-a129624b9233fa54fe3574f1aa211bc2d85e1052b52245fe7d83f10c2f6d28e3.0","booted":false,"staged":false,"pinned":false}]
    ??? I1104 09:19:28.653880    8950 atomic_dir_copy.go:66] "Made an intermediate copy" cmd="/bin/cp --verbose --recursive --preserve --reflink=auto /var/lib/microshift /var/lib/microshift-auto-recovery/failed/20241104091928_default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1.tmp.22742"
    ??? I1104 09:19:28.657362    8950 atomic_dir_copy.go:66] "Made an intermediate copy" cmd="/bin/cp --verbose --recursive --preserve --reflink=auto /var/lib/microshift-auto-recovery/20241104091852_default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1 /var/lib/microshift.tmp.482"
    ??? I1104 09:19:28.657385    8950 state.go:40] "Saving intermediate state" state="{\"LastBackup\":\"20241104091852_default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1\"}" path="/var/lib/microshift-auto-recovery/state.json.tmp.41544"
    ??? I1104 09:19:28.662438    8950 atomic_dir_copy.go:115] "Renamed to final destination" src="/var/lib/microshift.tmp.482" dest="/var/lib/microshift"
    ??? I1104 09:19:28.662451    8950 state.go:46] "Moving state file to final path" intermediatePath="/var/lib/microshift-auto-recovery/state.json.tmp.41544" finalPath="/var/lib/microshift-auto-recovery/state.json"
    ??? I1104 09:19:28.662521    8950 atomic_dir_copy.go:115] "Renamed to final destination" src="/var/lib/microshift-auto-recovery/failed/20241104091928_default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1.tmp.22742" dest="/var/lib/microshift-auto-recovery/failed/20241104091928_default-b3442053c9ce69310cd54140d8d592234c5306e4c5132de6efe615f79c84300a.1"
    ??? I1104 09:19:28.662969    8950 atomic_dir_copy.go:115] "Renamed to final destination" src="/var/lib/microshift-auto-recovery/20241022101528_default-a129624b9233fa54fe3574f1aa211bc2d85e1052b52245fe7d83f10c2f6d28e3.0" dest="/var/lib/microshift-auto-recovery/restored/20241022101528_default-a129624b9233fa54fe3574f1aa211bc2d85e1052b52245fe7d83f10c2f6d28e3.0"
    ??? I1104 09:19:28.662983    8950 restore.go:141] "Auto-recovery restore completed".

    重要
    • 恢复后,restore 命令不会重启 MicroShift。执行此命令时,MicroShift 服务已经失败,或者您停止了它。
    • MicroShift 不监控任何文件系统的磁盘空间。您必须确保自动化处理旧的备份被删除。例如,您可以将此过程添加到自动恢复服务中,或者添加定期运行的其他服务。
  2. 运行以下命令重启 MicroShift:

    $ sudo systemctl restart microshift

验证

  • 运行以下命令验证 MicroShift 是否已成功启动:

    $ oc get pods -A

    输出示例

    NAMESPACE                   NAME                                                     READY   STATUS   RESTARTS  AGE
    default                     i-06166fbb376f14a8bus-west-2computeinternal-debug-qtwcr  1/1     Running  0		    46m
    kube-system                 csi-snapshot-controller-5c6586d546-lprv4                 1/1     Running  0		    51m
    openshift-dns               dns-default-45jl7                                        2/2     Running  0		    50m
    openshift-dns               node-resolver-7wmzf                                      1/1     Running  0		    51m
    openshift-ingress           router-default-78b86fbf9d-qvj9s                          1/1     Running  0		    51m
    openshift-ovn-kubernetes    ovnkube-master-5rfhh                                     4/4     Running  0		    51m
    openshift-ovn-kubernetes    ovnkube-node-gcnt6                                       1/1     Running  0		    51m
    openshift-service-ca        service-ca-bf5b7c9f8-pn6rk                               1/1     Running  0		    51m
    openshift-storage           topolvm-controller-549f7fbdd5-7vrmv                      5/5     Running  0		    51m
    openshift-storage           topolvm-node-rht2m                                       3/3     Running  0		    50m

    注意

    这个示例输出显示基本的 MicroShift。如果您安装了可选的 RPM,则您的输出中也会显示运行这些服务的 pod 状态。

2.3.1. 在 RPM 系统中使用自动恢复

当 MicroShift 进入失败状态时,systemd 服务将启动 microshift-auto-recovery.service 单元。这个单元 执行自动恢复恢复过程

作为用例,请考虑以下示例情况,其中您要为使用 systemd 服务的 RPM 系统自动执行自动恢复过程。

流程

  1. 运行以下命令,为 microshift systemd 服务创建一个目录:

    $ sudo mkdir -p /usr/lib/systemd/system/microshift.service.d
  2. microshift.service 失败时,指示 systemd 运行 microshift-auto-recovery.service,请运行以下命令来创建 10-auto-recovery.conf 文件:

    $ sudo tee /usr/lib/systemd/system/microshift.service.d/10-auto-recovery.conf > /dev/null <<'EOF'
    [Unit]
    OnFailure=microshift-auto-recovery.service
    StartLimitIntervalSec=25s 
    1
    
    EOF
    1
    StartLimitInterval 值从默认值 10 增加到较慢的系统的值。一个太低的值可能会导致 systemd 不会将 microshift systemd 服务标记为失败,这意味着 OnFailure= 服务不会被触发。
  3. 运行以下命令来创建 microshift-auto-recovery.service 文件:

    $ sudo tee /usr/lib/systemd/system/microshift-auto-recovery.service > /dev/null <<'EOF'
    [Unit]
    Description=MicroShift auto-recovery
    
    [Service]
    Type=oneshot
    ExecStart=/usr/bin/microshift-auto-recovery
    
    [Install]
    WantedBy=multi-user.target
    EOF
  4. 运行以下命令来创建 microshift-auto-recovery 脚本:

    $ sudo tee /usr/bin/microshift-auto-recovery > /dev/null <<'EOF'
    #!/usr/bin/env bash
    set -xeuo pipefail
    
    # If greenboot uses a non-default file for clearing boot_counter, use boot_success instead.
    if grep -q  "/boot/grubenv" /usr/libexec/greenboot/greenboot-grub2-set-success; then
        if grub2-editenv - list | grep -q ^boot_success=0; then
            echo "Greenboot didn't decide the system is healthy after staging new deployment."
            echo "Quitting to not interfere with the process"
            exit 0
        fi
    else
        if grub2-editenv - list | grep -q ^boot_counter=; then
            echo "Greenboot didn't decide the system is healthy after staging a new deployment."
            echo "Quitting to not interfere with the process"
            exit 0
        fi
    fi
    
    /usr/bin/microshift restore --auto-recovery /var/lib/microshift-auto-recovery
    /usr/bin/systemctl reset-failed microshift
    /usr/bin/systemctl start microshift
    
    echo "DONE"
    EOF
  5. 运行以下命令使脚本可执行:

    $ sudo chmod +x /usr/bin/microshift-auto-recovery
  6. 运行以下命令来重新载入系统配置:

    $ sudo systemctl daemon-reload

2.3.2. 在 RHEL for Edge 中使用自动恢复

作为用例,请考虑以下示例情况,其中您要自动为在蓝图文件中使用 systemd 的 Red Hat Enterprise Linux for Edge (RHEL for Edge)系统 自动恢复过程

重要

您必须在蓝图文件中包含使用 systemd 的 RHEL for Edge 系统的完整自动 恢复过程

先决条件

  • 已安装 Podman。
  • 已安装命令行 composer-cli 工具。

流程

  1. 可选: 因为 composer-cli 只能在 /etc 目录中创建文件,请将您的文件打包到包含蓝图的 RPM 中。
  2. 使用以下示例创建蓝图文件:

    [[customizations.directories]]
    path = "/etc/systemd/system/microshift.service.d"
    
    [[customizations.directories]]
    path = "/etc/bin"
    
    [[customizations.files]]
    path = "/etc/systemd/system/microshift.service.d/10-auto-recovery.conf"
    data = """
    [Unit]
    OnFailure=microshift-auto-recovery.service
    """
    
    [[customizations.files]]
    path = "/etc/systemd/system/microshift-auto-recovery.service"
    data = """
    [Unit]
    Description=MicroShift auto-recovery
    [Service]
    Type=oneshot
    ExecStart=/etc/bin/microshift-auto-recovery
    [Install]
    WantedBy=multi-user.target
    """
    
    [[customizations.files]]
    path = "/etc/bin/microshift-auto-recovery"
    mode = "0755"
    data = """
    #!/usr/bin/env bash
    set -xeuo pipefail
    # If greenboot uses a non-default file for clearing boot_counter, use boot_success instead.
    if grep -q  "/boot/grubenv" /usr/libexec/greenboot/greenboot-grub2-set-success; then
        if grub2-editenv - list | grep -q ^boot_success=0; then
            echo "Greenboot didn't decide the system is healthy after staging a new deployment."
            echo "Quitting to not interfere with the process"
            exit 0
        fi
    else
        if grub2-editenv - list | grep -q ^boot_counter=; then
            echo "Greenboot didn't decide the system is healthy after staging a new deployment."
            echo "Quitting to not interfere with the process"
            exit 0
        fi
    fi
    /usr/bin/microshift restore --auto-recovery /var/lib/microshift-auto-recovery
    /usr/bin/systemctl reset-failed microshift
    /usr/bin/systemctl start microshift
    echo "DONE"
    """
  3. 有关后续步骤,请参阅准备镜像构建

2.3.3. 在 RHEL 系统的镜像模式中使用自动恢复

重要

RHEL 的镜像模式只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

作为用例,请考虑以下示例情况,其中您要为使用 systemd 服务的 Red Hat Enterprise Linux (RHEL)系统自动恢复镜像模式。

重要

您必须在容器文件中包含使用 systemd 的 RHEL 系统的整个 自动恢复过程

先决条件

  • 按照 构建 bootc 镜像 中的指示创建了 Containerfile。
  • 您创建了 10-auto-recovery.confmicroshift-auto-recovery.service 文件,如"使用 RPM 系统自动恢复"部分中所述。

    重要

    10-auto-recovery.confmicroshift-auto-recovery.service 的位置必须相对于 Containerfile。

    例如,如果 Containerfile 的路径是 /home/microshift/my-build/Containerfile,则 systemd 文件需要被相邻才能正确嵌入。以下示例中以下路径正确:

    • /home/microshift/my-build/auto-rec/10-auto-recovery.conf
    • /home/microshift/my-build/auto-rec/microshift-auto-recovery.service
    • /home/microshift/my-build/auto-rec/microshift-auto-recovery
  • 您创建了 microshift-auto-recovery 脚本,如"使用 RPM 系统自动恢复"部分中所述。

流程

  1. 使用以下示例片断更新用于为 RHEL 镜像准备镜像模式的容器文件。

    RUN mkdir -p /usr/lib/systemd/system/microshift.service.d
    COPY ./auto-rec/10-auto-recovery.conf /usr/lib/systemd/system/microshift.service.d/10-auto-recovery.conf
    COPY ./auto-rec/microshift-auto-recovery.service /usr/lib/systemd/system/
    COPY ./auto-rec/microshift-auto-recovery /usr/bin/
    RUN chmod +x /usr/bin/microshift-auto-recovery
    重要

    在构建容器镜像时,Podman 使用容器内的主机订阅信息和存储库。如果主机上没有 rhocpfast-datapath 存储库,则构建会失败。

  2. 运行以下 image build 命令重建本地 bootc 镜像:

    PULL_SECRET=~/.pull-secret.json
    USER_PASSWD=<your_redhat_user_password>
    IMAGE_NAME=microshift-4.18-bootc
    
    sudo podman build --authfile "${PULL_SECRET}" -t "${IMAGE_NAME}" \
        --build-arg USER_PASSWD="${USER_PASSWD}" \
        -f Containerfile
    注意

    secret 以以下方式在镜像构建过程中使用:

    • 需要 podman-- authfile 参数从 registry.redhat.io registry 中拉取基础 rhel-bootc:9.4 镜像。
    • build USER_PASSWD 参数用于为 redhat 用户设置密码

验证

  • 运行以下命令验证本地 bootc 镜像是否已创建:

    $ sudo podman images "${IMAGE_NAME}"

    输出示例

    REPOSITORY                       TAG         IMAGE ID      CREATED        SIZE
    localhost/microshift-4.18-bootc  latest      193425283c00  2 minutes ago  2.31 GB

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部