本页内容

本页内容

CLI 命令

更新修复和恢复

更新失败时会发生什么,以及完成作业的子命令。 openclaw update 参考的一部分。

恢复失败的更新

交互式更新或修复失败后,OpenClaw 完成清理并提供 诊断更新失败、报告更新失败 或 退出。报告预览已清理的问题正文,并需要单独确认。

意外异常保留已知的更新模式、已解决的目标、失败的步骤以及任何记录的恢复结果。报告包括经过与失败命令相同的诊断的有界的、经过编辑的错误代码或名称以及第一条消息行;无法识别的私有文本和堆栈跟踪被排除在公共预览之外。如果无法记录其进度历史记录,Git 预检清理将继续。直接结果保留举报警告;如果更新已经失败,则其异常将保留原始失败和报告失败。仅报告警告并不意味着运行时验证失败。不确定的命令清理仍然会保留临时工件并阻止恢复。

选择 Diagnose update failure 打开 Triage,它在 PATH 上启动第一个可直接启动的编码代理,按以下顺序:Claude Code、Codex、OpenCode、然后是 Pi。它直接传递捕获的更新失败,并将新的 Doctor 检查和诊断收集留给代理,因此损坏的安装不会延迟切换。代理保留其现有的身份验证、沙箱和批准设置。

代理在操作员的原始工作目录中启动,如果该目录不再可访问,则在其 OS 主目录中启动。失败安装的已解决状态、配置和默认工作空间路径仍处于固定状态以进行修复。

经过验证的回滚将使上一代继续运行。交互菜单默认选择Exit;拒绝或取消会保留失败更新的非零退出状态。经过验证的回滚后,--json、--yes、非交互式和托管服务切换运行不会提示或收集自动诊断信息。

对于没有经过验证的回滚的故障,请使用 --yes、--json 或非交互式会话(包括管道输入或输出)进行更新,收集诊断并打印切换命令,而无需启动外部编码代理。更新所有权和服务补偿结算后,符合条件的故障可以在配置的推理上启动 故障后分类 。对于 --json,分类输出将转到 stderr,因此 stdout 保留原始更新结果。诊断收集失败永远不会隐藏更新失败。

对于后台或 Control UI 故障,请使用网关主机上打印的安装特定命令。打印的命令在 Windows 上使用 PowerShell,在 macOS、Linux 和 WSL 上使用 POSIX shell。手动运行分类时,保持相同的配置文件并覆盖 state/config:

bash
openclaw triageopenclaw triage --agent codex

使用 openclaw triage --non-interactive 无需启动代理即可收集诊断信息。添加 --update-result <path> 以包含已保存的更新失败工件。

OpenClaw 保留选择的更新目标和候选准入结果。对配置、包含文件或存储的更新通道的并发编辑不会重新选择目标或重新启动候选验证。激活时配置和架构检查以及配置写入冲突检查仍然适用。避免在更新期间编辑配置;如果稍后的编辑导致启动失败,请更正它或在重新启动之前运行 openclaw doctor。拒绝所选配置的候选者仍然无法通过验证。

验证失败不会影响服务网关。如果停止托管服务将其卸载,然后在激活之前失败,则 OpenClaw 在重新检查服务所有权后尝试恢复已验证的原始运行时。激活后,当数据库架构未更改且配置文件仍与候选者的激活 Doctor 输出匹配时,失败的验证可以 恢复之前的包 。保护迁移状态和历史;仅替换代码无法撤消迁移。即使修复成功,原始失败的更新在代理完成后仍会以非零值存在。

在 Linux 上,systemd 可以在更新程序停止后卸载不活动的单元。拥有的更新程序在重新检查准入时重新加载该单元的元数据,保留原始管理器和服务身份。这不会启动服务或重写其定义。后来的拒绝仍然使用记录的停止来恢复之前的网关;已停止的服务仍保持停止状态。

在 macOS 上,失败的 LaunchAgent 状态探测将记录为失败的恢复尝试及其原因。 OpenClaw 保持服务定义不变并打印 LaunchAgent state could not be inspected。在重试恢复之前,运行 openclaw gateway status --deep 检查服务。

现有的安装仍然需要插件维护。如果更新为 Doctor 停放了其网关并且维护步骤被拒绝,则恢复将使用当前运行的最新停止并在 Doctor 的作者解决后重新启动已安装的软件包。它记录观察到的恢复结果,同时保留失败的更新结果。早期运行的停止收据从未授权重新启动;运营商停止的服务和明确的数据风险拒绝仍然停止。

激活成功后,如果无法读取或发布更新报告,则更新的安装会保留在原处。报告失败不会触发包回滚。当所需的最终确定无法完成时,该命令仍以非零值退出;在所属更新程序退出后遵循其恢复指南。如果更新历史记录已成功记录,则稍后的结果发布错误将是一个警告,并且该命令将成功退出而不提供恢复。

当配置的频道帐户保持停止或抑制状态(包括默认帐户以外的帐户)时,修复会发出警告。运行 openclaw health --json 来检查它们。这些警告不会使经过验证的网关恢复失败、启动已停止的通道或禁用崩溃循环断路器。

激活医生在其自己的实时维护范围内重新检查聊天请求者的权限。这使得它可以在状态数据库离线修复时读取授权策略,而无需授予对不相关操作的访问权限。即使较旧的更新程序启动了 Doctor,候选者也会提供此修复。

具有数据库回滚支持的 Git 更新程序在激活 Doctor 之前对已停止安装的数据库进行快照。如果 Doctor 失败,经过验证的快照会在恢复之前的源、运行时、配置和托管网关之前恢复迁移前的状态。 Doctor 根据该备份记录其已承认和已解决的数据库代,因此其自身的迁移不会阻止回滚。稍后的操作员或运行时写入可防止破坏性恢复:更新程序会保留它们,重新启动并验证迁移安装上的网关,并使用下一个 Doctor 命令报告拒绝情况。失去所有权仍然可以防止未经授权的影响并保留恢复工件。此回滚支持属于已安装的更新程序;新候选者无法将其添加到已运行的旧更新程序中。

试运行和被初始参数、外部主管、状态存储所有权、切换身份或不可变配置检查拒绝的命令不会收集诊断信息或启动代理。一旦这些检查通过,失败的元数据、架构、运行时和托管服务检查将使用上述失败操作,即使安装被阻止也是如此。这包括无法安全停止其父网关进程的更新。诊断会保留这种拒绝:它不会停止网关、重试更新或绕过安全检查。请参阅 更新故障排除。

原始状态捕获

在新的直接 CLI 更新写入运行时状态之前,安装的更新程序会尝试保留原始配置、其包含内容、本地数据库和声明的插件迁移资源。捕获内容保留在 <state-directory>.update-captures/<run-id> 中选定的状态目录旁边。 Doctor 延续保持相同的捕获;他们不会用已经迁移的状态替换它。状态目录重定位保持其原始位置和记录的路径完好无损。继续验证记录的实时更新程序的进程身份和祖先;该更新程序上方的不可读主管不会阻止其医生重新使用捕获。如果无法通过实时更新程序验证血统,Doctor 将推迟维护并发出警告,并将您引导至 openclaw update repair。经过验证的更新保持安装状态;此流程检查失败不会触发回滚。继承的控制平面和托管帮助程序运行保留其现有的捕获行为。独立的doctor --fix保留单独的修复前副本;该副本不会替换早期更新的原始版本。独立的 doctor --fix 通过单个独立的备份工作人员在自己的维护保管下对数据库进行快照。大于 64 MiB 的共享数据库系列将发现副本保留在隔离的进程中,因此缓慢的副本不会阻止 Doctor 的主线程处理取消。官方映像激活为每个容器保留一个这样的副本:捕获成功后,同一容器的后续启动会跳过重复的完整副本,保留该副本,并仍然淘汰其他过期的 Doctor 捕获。独立 Doctor 捕获保留 30 天:下一个独立 doctor --fix 淘汰旧的密封 Doctor 捕获并报告每次删除;不完整的捕获和更新捕获永远不会自动失效,因此当您需要长期副本时,请进行经过验证的备份。使用 openclaw update cleanup 查看并废弃被取代的更新捕获。

在拒绝本机无替换重命名的 Linux 文件系统上,fs-safe 使用独占硬链接发布,然后在本机 auto 模式下删除源代码。现有的捕获永远不会被覆盖;本机 require 模式仍然拒绝不支持的发布。如果发布因两个名字都存在而停止,OpenClaw 会将捕获保留为不完整的证据。即使 manifest.json 包含完整的 JSON,剩余的 manifest.json.partial 也会防止重复使用或自动报废。保留两个名字以供人工检查;他们的存在并不授权恢复。

这些捕获是手动恢复的证据。活跃的写入器可以在捕获期间更改状态;观察到的变化会使捕获不完整并产生警告。对于数据库,警告会命名在快照后发生更改或在此期间没有稳定生成的每个数据库,后跟备份的数据库警告。在捕获期间写入的正在运行的网关足以导致这种情况。捕获是尽力而为:当它失败时,更新会警告它在没有原始状态捕获的情况下继续进行,命名失败的步骤和源路径(例如,数据库生成验证),然后继续。数据库回滚使用网关停止后更新所拍摄的迁移前快照,如 恢复限制 中所述。该集不是跨活动存储的原子快照。丢失、不可读或不完整的捕获不会建立安全回滚点。更新程序进程会禁用可选的调试代理持久性,因为其更新历史记录可以使用较旧的数据库架构。医生可以在保留原始数据并承认修复后的模式后恢复捕获。因此,跳过 Doctor 的成功更新可能会对该调用禁用本地 HTTP 跟踪。启用调试捕获时,直接更新(包括 --dry-run)会报告此限制。

使用openclaw update status --json检查保留的证据。运行时回滚并不能证明较早的原始捕获已恢复。仅当恢复证据识别其清单时,状态报告才捕获为已恢复。独立的 Doctor 副本显示为manual;它们的存在并不记录修复成功或失败。未完成的捕获显示为incomplete除了有效的捕获之外,还包含其目录,并且没有密封的清单参考。在尝试恢复之前保留当前数据并检查原始数据。较旧安装的更新程序可能无法保留或转发原始捕获;较新的医生报告了该限制,而不是将当前字节视为更新前状态。如果捕获发现无法验证旧驱动程序的历史记录,Doctor 会发出警告,并在其现有维护和更新所有权下继续进行修复。所需的迁移备份仍然适用。采取一个已验证的备份在升级之前,当您需要完整的恢复副本时。

检查迁移保存

当原始状态和迁移后状态都已密封恢复捕获时,无需打开实时数据库即可对它们进行比较:

bash
openclaw database verify-preservation /path/to/original/manifest.json /path/to/candidate/manifest.json \  --original-sha256 <recorded-original-manifest-sha256> \  --candidate-sha256 <candidate-manifest-sha256> --json

使用迁移前记录的原始摘要。该命令验证每个捕获的清单和有效负载哈希,然后从原始清单中导出版本化的语义见证。新的捕捉不能取代原始参考。保留的捕获必须保留在其记录位置。

第一个投影支持代理模式 24 和 25、当前共享状态模式以及未更改的声明插件 SQLite 存储。 24 到 25 的转变允许迁移所有者的验证队列、规范收据和模式元数据更改;会话生成、保留的转录字节、快照和插件行必须保留。包括保留的架构对象、行标识、SQLite 应用程序 ID 和文件模式。其他转换因不受支持而失败。共享注册表版本和观察字段只能在验证其内容和目标模式后刷新那些确切的代理存储;注册身份和不相关的行保持准确。记录的文件符号链接是从密封清单中解析的。现有的捕获格式不保留外部父目录别名映射;检查拒绝这些绑定,而不是根据当今的文件系统进行猜测。受保护的文件保持字节精确。未改变的缺失资源和分类历史间隙产生preserved-with-warnings;已更改或不可读的证据存在非零值。

这是显式冷检查,每个数据库最多 4096 个资源和 512 个表。它流式传输所有保留的行,并且可能需要时间进行大型捕获。它不会创建新的备份或见证存储,也不会授权迁移、回滚、启动或激活。更新保留现有的安全门;自动迁移接受是一个单独的集成。

保留更新程序运行时

更新可以将其运行代码保留在安装旁边的 openclaw-update-runtime-* 目录中或系统临时目录中。更新程序在成功、失败、异常或 SIGINT/SIGTERM(包括报告结果时的失败)后解决其工作人员问题。为下一次符合条件的更新或 Doctor 清理完成预测记录 Runtime retained at <path>: <reason>,因此递归删除不会延迟命令退出。不完整的准备会导致立即尽最大努力进行清理。不稳定的工人保留其运行时间并保留失败原因。清理警告不会取代原始更新结果。当工人耗尽时,早期的非零退出仍然是非零。突变和恢复所有者仍然必须排水;即使打印的命令结果成功,它们的失败也会产生非零退出。

保留副本插件清单和由插件安全检查检查的文件,因此保留更新程序不会使签出的插件无法通过硬链接验证。其他运行时文件在受支持时仍保持硬链接。

当容器或文件系统拒绝文件克隆时,使用 @openclaw/fs-safe 0.23.1 或更高版本的更新程序依赖其受保护的字节复制回退。本机文件系统保护、源身份检查、文件模式、快照验证和 SQLite 字节复制空间准入保持活动状态。 Genuine I/O errors still fail the copy.这包括其 seccomp 策略拒绝 FICLONE ioctl 的 Proxmox LXC 容器;对于使用此依赖项的更新程序来说,无需更改该策略。不要全局禁用本机文件系统支持以绕过克隆:医生的状态迁移需要本机保护措施。

当安装的更新程序支持时,这些生命周期和复制更改将适用;安装较新的候选程序无法更改已经运行的更新程序。对于受影响容器中 2026.9.7 的第一跳,请使用 npm 手动安装包含此修复的版本。随后的 openclaw update 运行会继承已安装更新程序的 fs 安全依赖项的回退。

在 Windows 上,激活前的中断仍然允许承认的恢复所有者在挂起的任务操作解决后恢复任务自动启动。取消围栏新的更新工作;恢复仍然需要原始实时安装所有者和经过验证的任务所有权。该更新程序退出后,从原始签出运行较新的 openclaw doctor --fix 以找到其同级运行时目录。 Doctor 还会检查已知的临时目录,包括托管服务的 TMPDIR、TMP 和 TEMP。相对服务路径需要其记录的绝对工作目录。在同一商店内进行版本化包根更改后,旧版 pnpm 投影仍然可识别;查找仅限于 4,096 个直接预计存储条目。公认的运行时间预测是一次性的;当没有工人仍在使用它们时,医生会将它们移除。如果无法验证所有权或进程活跃性,Doctor 会保留目录并报告原因。

候选医生堆栈溢出

聊天触发的 2026.9.6 更新可能会失败,并显示 authority-check-failed: Maximum call stack size exceeded,有时会出现 Update history reconciliation could not complete。这是候选Doctor权限检查缺陷;它可能会在第一次更新时发生,而不会迁移状态或之前失败的运行。纠正候选者可以运行已安装的更新程序,并保留完整的历史记录。运行旧安装的独立 Doctor 无法修复候选包中的代码。

不支持重置保留的更新历史记录的命令。 update repair完成中断定稿,update cleanup废弃符合条件的恢复原件;两者都不会清除运行分类帐。保留历史记录和备份而不是删除数据库行来解决此故障。

Docker 镜像层包更新

Docker OverlayFS 可以拒绝移动安装在具有 EXDEV 的映像层中的 npm 软件包,即使该软件包及其备份位于同一安装上也是如此。具有副本回退功能的更新者会立即保留并验证独立副本,记录其身份以进行恢复,并在发布候选版本之前删除原始副本。不匹配的副本会使原始包装完好无损。在确认激活之前,已验证的副本仍可用于回滚。

来自 2026.9.7 或 2026.9.8 的第一个更新仍然需要手动安装跃点:那些已安装的更新程序运行自己的发布代码,因此候选者无法提供此后备。首选使用所需的 OpenClaw 版本重建 Docker 映像。对于容器内更换,请遵循 手动更新预防措施,包括经过验证的备份并停止托管网关,然后运行 ​​npm install -g openclaw@<version>。在通过服务管理器重新启动之前,从新安装中运行 Doctor 和 openclaw update repair(如果需要)。

update repair

如果持有国家所有权或维护锁定,则在维护之前拒绝维修并报告 Stop the Gateway first (openclaw gateway stop)。在重试之前,停止同一 profile/state 目录的网关。

当较旧的包日志保持挂起并且当前的 CLI 无法解决它时,修复会使用原始恢复命令退出非零。在该记录保留期间,它不会报告成功修复或继续更新后维护。

对于已发布的 2026.9.8 包恢复助手写入的记录,修复可以在回滚后解决中止的操作,或者在 ctime 或链接计数漂移使先前包的历史密封失效时完成发布到丢失的安装。它需要记录的目录标识和软件包版本,验证启动器并记录:legacy package record settled by identity and version; content could not be re-verified。原始日志、助手和剩余的包裹证据均被保留。这接受可重新安装的遗留包代码的未经验证的内容;当前版本写入的记录保留其现有的验证规则。使用包含此修复的 CLI:原始密封助手无法获取更新的恢复行为。

较旧的更新者在发布之前拒绝更新后,可以将包激活保留在 prepared 处。从包含此修复程序的安装中运行 openclaw update repair。修复验证原始包和启动器是否未更改,中止未使用的准备工作,并废弃其恢复工件,以便下一次更新可以继续。它不会公布已上演的候选人。活动更新程序、更改的程序包或启动程序或未完成的状态恢复会保留其现有的恢复检查。候选者无法修补已经运行的旧更新程序;如果安装的 CLI 缺少此修复,请使用下面的手动安装步骤。

对于在外部写入后滞留在 publishing 的发布,当已安装的构建信息报告确切的候选版本、包自己的 dist 内容清单中的每个文件仍然匹配并且没有更新者拥有该安装时,修复可以将其关闭为 publication-settled-external-change。即使旧的租赁商店已被移除或更换,修复也会使用新的执行者所有权。它永远不会执行旧的助手;更改或丢失的辅助字节以及替换的保留目录不需要作为实时候选者的证明。根 package.json 必须使用名称 openclaw、候选版本进行解析,并输入 module;每个 main、exports 和 bin 目标必须解析为包中的文件。必须对 dist/ 内的目标进行盘点;检查 openclaw.mjs 等顶级目标的分辨率,而不进行内容验证。 dist/ 下的额外 package.json 文件拒绝结算,因为它们可以更改库存代码的加载方式。 node_modules/ 下的依赖项清单是预期的并被忽略。其他额外的 dist 文件仍然是警告。在重试之前将任何已更改的清单文件恢复为其打包字节;单独工作的网关并不能免除库存故障。修复会保留以前的软件包和任何剩余的帮助程序,将已安装的软件包和启动器保留在适当的位置,并在更新历史记录中记录警告和额外路径。警告和收据将根清单标识为经过现场验证,而不是经过内容验证。密封树摘要无法识别旧的每个文件元数据差异。使用包含此修复程序的 CLI;原始密封助手保留其原始恢复检查。

记录结算后,修复将完整的控制日志完好无损地移动到报告的恢复证据目录中的 control/ 中。它不再显示为活动的 packageActivation 状态或因不熟悉的解决原因阻止较旧的更新程序。如果报告在该移动之前停止,请从兼容的 CLI 重新运行修复。持久完成后归档失败是一个警告:证据将保留,并且不会阻止修复完成或以后的更新。保留的证据不会被删除或用作以后更新的依据。未完成的操作仍然需要兼容的恢复所有者。此行为不会向已阻止的旧 CLI 提供更新的修复实施。对于完整的 anchor-retired 历史记录,请使用 独立帮助程序恢复 保留收据并解锁原始更新程序,而无需替换其安装。对于经过严格验证的重装publishing案例,独立结算修复也可以在不更换软件包的情况下清除旧更新程序的第一跳块。其他未完成的回收仍需要其原主人。

对于因旧更新程序的启动程序所有权检查而搁浅的软件包更新,请使用手动安装跃点,然后从同一根目录下的新 CLI 进行修复:

bash
npm install -g openclaw@latestopenclaw doctor --fixopenclaw update repair

请遵循 手动更新预防措施 ,包括经过验证的备份并在更换期间停止托管网关。当安装的软件包目录与记录的生成都不匹配时,修复将关闭先前的软件包操作(superseded-by-manual-install),通过其操作 ID 发出警告,并保留安装旁边的所有剩余暂存文件和帮助程序。更改或丢失的历史工件和存档冲突在持久关闭后成为维护警告;它们不会阻止最终确定。原始失败的历史记录条目保持不变。然后,待处理的包恢复门将被清除,以便可以继续进行另一次更新。未完成的恢复保留其原始恢复检查;丢失的软件包、活动更新所有者以及挂起的数据库或配置恢复仍然需要其现有的恢复路径。

如果恢复报告 managed handoff lease database identity changed,请从包含此修复的 CLI 运行 openclaw update repair。修复获取当前租赁数据库的新更新所有权。仍在安装的已发布候选者必须通过上述验证才能关闭其操作。未受影响的过时版本可以作为 recovery-lease-identity-changed 关闭。它会使用旧操作 ID 和保留的工件路径发出警告,将已安装的软件包和启动器保留在适当的位置,并清除下一次更新的软件包准入。原始帮助程序无法针对替换的租用数据库进行恢复。匹配的租赁身份保留原始恢复检查;另一个实时更新所有者仍然阻止结算。不会删除任何恢复工件。较旧安装的 CLI 无法从尚未上演的候选版本获得此修复;使用上面的手动安装步骤。

当记录的切换租用数据库丢失时(例如,在重新启动后清除临时文件系统),相同的修复会处理 ENOENT。其存储所有者重新创建租赁数据库,并且修复在关闭未触及的过时准备(如 recovery-lease-missing)之前获取新的更新所有权。现在由另一个本地用户拥有的记录租赁目录也被视为丢失。修复获取当前用户的私有临时目录的所有权,而无需读取、创建或更改其他用户目录中的文件。新的托管更新租约始终使用每用户临时根目录,因此它们的位置不取决于谁首先创建共享 /tmp/openclaw 目录。丢失或更改的租约决不允许丢弃未完成的回滚。安装的软件包、启动器和保留的恢复证据保留相同的保护。然后通过 Doctor 和插件融合继续修复;仅当其迁移所有者完成所需的工作时,插件 data/settings 警告才会清除。其余警告指定下一个修复操作。

在核心包已经更改,但后续修复工作未能顺利完成后,重新运行更新收尾流程。这是受支持的恢复路径:当 openclaw update 已安装新核心包,但核心包后的插件同步、受管 npm 插件元数据、注册表刷新或 doctor 修复未能收敛时,可使用此命令。

bash
openclaw update repairopenclaw update repair --channel betaopenclaw update repair --jsonopenclaw update repair --accept-capabilities

中断的自动分类可能会在其更新程序和帮助程序退出后留下不确定的安装切换。当两个记录的 PID/start 身份均已证明已失效、完整的主机普查未发现对其运行或保留路径的剩余引用、并且自上次记录的租约活动以来已过去至少 45 分钟时,显式 openclaw update repair 可以回收该切换。可恢复的较大记录超时会延长该宽限期。网关启动和借用的更新进程不会回收这些租约。

修复还会检查手动安装跳跃后留下的遗留更新子沿袭租约,即使安装根租约不存在也是如此。失效的 PID 和不同启动标识重用的 PID 可以被回收。未绑定的血统保留指定相同的执行者和帮助者;具有该数字 ID 的不相关进程组不会使其保持活动状态。绑定子进程组仍然需要经过证明的灭绝。修复在声明安装时保留原始租赁证据,并将回收的密钥记录在更新历史记录中。当仍有多个子租约时,修复会在声明安装之前检查每个子租约的原始运行和回滚证据;一个孩子的历史记录不能授权收回另一个孩子的租约。活着的或无法检查的所有者​​仍然受到保护。在 /proc 可见性受限的 Linux 上,从具有进程检查权限的原始 OS 帐户重试;权限错误永远无法证明所有者已死亡。

普通的安装根更新租约并不是遗留托管,因为它没有突变协议标记。维修租赁给当前所有者的叶子;一旦其所有者和后代安顿下来,正常的更新准入可以收回它。

原始运行必须可以从其保留的帮助程序、更新历史记录或世代限制的修复元数据中识别出来,并且在选定的状态数据库中可读。修复需要该记录来检查回滚和恢复证据。使用与失败更新相同的配置文件和状态覆盖;修复不会用租赁所有者 ID 来代替缺失的运行。

拒绝指明流程、检查间隙或剩余宽限期。通过其所属的终端或服务停止指定的工作,然后重试;不要删除租赁数据库。修复在其普查中保留不可读的帮助程序路径,而不是假设他们的工作已停止。

在 Windows 上,以启动更新的同一 Windows 帐户运行修复并保留其配置文件和状态覆盖。新的切换会在更新历史记录中记录启动帐户的 SID。当 SID 匹配时,完全拒绝访问的进程不能成为切换的子进程,这永远不会提升其子进程;不相关的受保护进程不会阻止修复。积极的进程祖先或保留的工件引用仍然会阻碍修复。没有记录 SID 的旧交接,或者来自不同或未经验证的帐户的修复,保留对不可读进程的保守拒绝。

当未记录回滚步骤时,修复将使用普通的当前安装完成,并在释放所有权之前在更新历史记录中记录移交结算。它保留了保留的工件,并且不会发明所有者死亡时间或之前的网关状态。未解决的状态恢复保留其现有的恢复保障措施。失败的修复保留其原始证据,绑定到新的租赁生成,以供以后的显式修复。每次修复尝试在开始完成工作之前都会记录其自己的运行,因此稍后的修复还会检查中断的修复尝试的后代。

未完成的包或配置回滚可以保持切换及其工件完好无损。检查 openclaw update status --json 并完成记录的恢复,然后重试修复。经验证已完成的回滚和结算收据允许修复,包括在没有运行网关的情况下进行安装。仅跳过回滚步骤和诊断警告并不能阻止修复。

当更新、核心后延续或修复在 Bun 下运行时,其 OpenClaw 维护子项使用相同的 Bun 可执行文件,包括新的 Doctor、配置验证、准备情况、完成和非交互式故障诊断。托管服务运行时选择取决于服务定义及其运行时引脚。

如果较旧的更新程序发布新核心,但随后报告 update-executor-settlement-failed 为 Parent executor is suspended for its candidate.,请等待该更新程序退出并从更新的安装运行 openclaw update repair --yes --json,保留其配置文件和 state/config 覆盖。这通过新的所有者完成了Doctor和post-core的融合。在通过服务所有者重新启动已停止的网关之前检查修复结果。更新候选程序无法更改内存中已有的旧更新程序。

如果托管网关在独立修复之前已停止,则修复会使其脱机并警告您必须运行 openclaw gateway start 才能使其联机。如果其服务定义指向不同的安装,则修复将报告安装修复命令。这些维护警告也出现在postUpdate.doctor.warnings中;否则成功完成会报告 status: "warning" 并成功退出。

标志 描述
--channel <stable|extended-stable|beta|dev> 修复前保留核心更新通道。对于扩展稳定、符合条件的官方 npm 和受信任的官方 ClawHub 插件,遵循 bare/default 或 latest 意图,以确切安装的核心版本为目标。在不更改配置的情况下,Git 签出时的扩展稳定修复会被拒绝。
--json 打印可供机器读取的收尾 JSON。
--timeout <seconds> 覆盖每个修复阶段的截止时间(以秒为单位)。默认值因阶段而异(见下文)。
--yes 跳过确认提示。
--accept-capabilities 在修复插件状态时接受每个插件经过审核的功能更改。
--no-restart 接受平价;修复不请求更新激活。修复父级恢复因维护而停止的网关。

未受影响、无身份的 2026.9.2-era 更新入场会在超过 24 小时后自动愈合。网关启动、openclaw update status 和 openclaw status 将该行保留为已放弃的故障,原因为 legacy-driver-expired 以及运行 openclaw update 进行重试的建议。 Control UI 在拒绝挂起的配置写入之前刷新网关的恢复分类,因此过期的孤立项不会阻止设置或提供商登录。实时更新和待定恢复仍然受到保护。此形状不需要显式修复。

update repair 首先检查过时的更新历史记录。当安装的网关一代运行正常且唯一剩下的问题是不活动的分类账行时,修复记录 failed / abandoned 并成功退出,无需医生、维护或服务停止。然后,openclaw status 和 Control UI 将放弃的运行报告为已协调,没有失败警告或重试提示;其历史故障记录完好无损。它还会在协调后 30 分钟内确认一次网关协调的行。稍后的修复调用使用完全终结,因此历史恢复无法抑制插件收敛。成功的修复会确认 Doctor 最新 100 条历史记录中每一次未完成的放弃运行,无论年龄大小或是否存在更新的更新。原始失败结果仍被记录,包括其目标构建未知时;医生在确认后停止重复修复指示。当每个记录的更新程序进程都被证明已死亡(其 PID 消失或其进程启动标识已更改)时,显式恢复不会等待 30 分钟。无身份行和未记录采用者的运行仍然需要 30 分钟以上的不活动;记录下来的现场或不可检查的驾驶员会阻止遗弃恢复。 JSON 输出标识 reconciledRuns 中协调的运行 ID,包括 status: "ok"、mode: "repair" 和 restart: false。

一旦安装的版本达到或超过解析的目标,修复还会确认未受影响的软件包安装,其更新因其软件包管理器所有者未知而被拒绝。这包括旧的更新程序错误地将拒绝记录为失败的更新。最初的拒绝细节留在了历史中; Repair 无需Doctor 维护或重新启动服务即可清除故障提示。达到安装或完成的运行仍需要正常修复。

Fresh Doctor 子项使用现有的外部服务修复策略运行,因为更新程序拥有服务更改。它们保留运营商的 OPENCLAW_SERVICE_REPAIR_POLICY=external 选择并保留 Gateway/state 协调器和代理数据库租约检查。外部部署所有者仍然拥有停止和重新启动其网关的权利。

自动修复会完成其嵌入式代理轮次并释放该轮次的数据库和进程资源,然后要求更新所有者运行 Doctor 或更新修复。这可以防止修复代理自己的凭据写入阻止维护。其他现场代理租赁仍然阻碍修复。维护保留原始网关激活意图,包括 --no-restart 和有意停止。仅成功的维护命令并不能验证原始症状。

当其继承的运行 ID 和实时进程标识与该所有者匹配时,在拥有的更新中调用的修复可以继续。独立修复记录其新运行的相同延续,并将运行 ID 的操作传递给其 Doctor 子级。修复父级使用 Doctor 的维护生命周期来停止拥有的网关,然后在运行 Doctor 子级之前释放其数据库锁。子级修复状态而不停止或重新启动服务。父级在收敛后恢复并验证相同的服务,包括当 Doctor 子级失败时。已停止的服务将保持停止状态。在每个本机操作之前,都会重新验证服务所有权和调用运行。恢复失败列出原因以及检查和重新启动网关的命令。正常更新完成继续通过其外部更新程序留下激活。

如果 Doctor 报告更新父级必须停止托管网关,请等待该更新退出,然后运行 ​​openclaw gateway stop 并从具有相同配置文件和 state/config 覆盖的独立 shell 重试 openclaw update repair。在 macOS 上,stop 卸载 LaunchAgent 并验证其进程是否已退出。仍然加载的服务或成功停止后仍然存在的 PID 是服务关闭失败。如果 stop 无法卸载服务,请使用在拥有用户的登录 macOS GUI 会话的拒绝中打印的确切 launchctl bootout 命令。

即使在很长一段时间没有活动之后,其驱动程序处于活动状态或无法检查的不相关更新仍然会阻止修复。手册 doctor --fix 也拒绝在更新处于活动状态时停止服务。拒绝标识所属运行、阶段、驱动程序 PID、主机、开始和最后活动时间和年龄以及观察到的活动(alive 或 not observed)。等待更新完成,或停止其主机上的指定驱动程序并在退出后重新运行 openclaw update repair。仅仅经过一段时间的不活动并不能授权接管实时更新程序。

显式的渠道或功能更改以及已知的不完整的核心后工作使用完全最终确定。即使网关已经协调了运行,记录的激活、重新启动、验证或完成步骤也需要收敛。修复检查较新的失败后核心历史记录以及活动行,包括故障原因为空的较旧的最终确定尝试;较旧的陈旧行无法隐藏较新更新中未完成的工作。如果有界历史检查不完整,修复也使用完全终结。在 Doctor 进入维护之前,Parent 停放其拥有的服务; Doctor 子级无法从更新父级获取服务激活。成功的完全最终确定会协调选定的陈旧行,并确认修复准入时捕获的 100 个最新历史行中未确认的放弃结果。这些结果不必是最新的运行结果或少于 30 分钟的结果;时间限制仅适用于跳过完全最终确定的情况。即使最新行符合轻量级修复的条件,其他历史结果也需要完全确定。历史上的失败及其细节仍然完好无损;确认会清除其 Doctor 修复提示,而不是其失败状态。该调用不会确认捕获的历史记录窗口之外的行和修复期间承认的新运行。收敛失败会使选定的行保持不变。如果任何选定的运行在协调之前恢复,则整个选择将被保留。完全终止 JSON 包括选择行进行恢复时的 reconciledRuns,列出该调用新确认的 ID,包括已经终止的废弃行。与非致命警告的成功融合也承认了这些争议。延迟维护会保留选定的历史记录和待处理的迁移义务。

为了完全确定,update repair 运行 openclaw doctor --fix,重新加载修复的配置和安装记录,同步活动更新通道的跟踪插件,更新托管的 npm 插件安装,修复丢失的配置插件有效负载,刷新插件注册表,并写入聚合安装记录元数据。如果插件迁移仍然推迟,即使没有插件包发生更改,最终确定也会在释放安装记录所有权后运行另一个新的 Doctor。这使得已纠正的本地插件可以在同一修复运行中完成其待定确认。当兼容性检查阻止发现时,Doctor 会保留插件的配置,因此更正插件​​不需要重新创建其允许列表或启用的条目。在更新后修复期间,即使更新程序进程在先前版本上启动,也会根据新安装的核心检查版本遵循 OpenClaw 的已配置运行时插件。它不会安装新的核心包或请求更新激活。修复父级恢复其因维护而停止的服务,如上所述。人类输出以最终确定结果结束,该结果区分完成、带警告的完成和失败。

当修复找到配置的 npm 插件有效负载但无法恢复其安装记录时,它将使用活动通道或确切版本 pin 从选定的注册表源重新安装。这需要注册表访问权限;如果验证失败,修复将保留现有有效负载并且不会发布新的安装记录。注册表验证和任何所需的功能审查在修复的安装记录发布之前完成。

当捆绑插件移动到外部包时,失败的重定位会报告未安装替换有效负载并保留底层错误。使用 openclaw update repair 重试之前解决该错误。医生和更新修复重新安装已配置的有效负载,但缺少软件包文件或报告缺少运行时条目;空目录并不代表安装成功。清理暂存文件后,回滚将删除空的托管 npm 项目。即使源签出还包含同一插件的捆绑发现副本,Doctor 也会保留外部配套包及其安装记录。修复诊断必须识别记录的包根;损坏的 Same-ID 源副本不会触发健康受管软件包的替换。

对于 --json,stdout 包含一个 JSON 文档。医生面板和其他诊断信息会发送到 stderr,因此可以直接解析 stdout。 postUpdate.plugins.warnings 中出现仅插件可用性、安装或加载失败;最终确定报告 status: "warning" 并在通过所需检查后成功退出。当没有数据存在风险时,医生维持入院拒绝也会报告警告。修复会恢复其停止的任何服务,并使迁移挂起。当 Doctor 维护推迟时,独立的 update repair 退出,代码为 2;现有更新的委托完成会保留退出代码 0,因此较旧的更新程序可能会在完成时发出警告。当 Doctor 无法运行时,保存的独立运行为 skipped,原因为 doctor-maintenance-pending,报告将引导下一步操作:通过其服务所有者停止网关(对于托管服务为 openclaw gateway stop --force),停止使用该状态的其他 OpenClaw 进程,然后使用相同的配置文件和状态覆盖重新运行 openclaw update repair。停止命令也需要相同的配置文件和状态覆盖; --force 确认非交互式 shell 中的有意停止。独立维修的一般故障记录为repair-failed;属于现有更新的特定故障代码和故障保留其原始原因。修复写入开始后的错误、实时或未经验证的网关、不可读状态、活动迁移写入、未解决的清理、无效配置以及失败的所需准备检查仍然退出非零。

如果所需的修复阶段超过其截止日期,修复将退出并显示代码 1,并且 JSON 报告 status: "failed" 和 stuckPhase。该结果在服务恢复后仍然可用,包括当网关仍在启动或恢复也失败时。 Doctor 修复成功后的启动警告不会清除修复阶段超时。

当插件在迁移所有者的当前状态下不再处于待处理状态时,记录的待迁移警告将停止出现,包括由 Doctor 子项完成后发出的警告。不相关的警告和重新引入的待决义务仍然可见;保留原始更新历史记录。

更新后或完成工作失败且其子进程稳定后,OpenClaw 使用正常启动和准备预算检查已安装的网关。如果维护未发现网关服务或侦听器,恢复会记录跳过准备情况观察,而不是等待网关出现。包和数据库恢复检查仍然适用,并且原始故障仍然被记录。更新历史记录和故障报告记录了观察到的服务版本和准备情况。 Doctor 维护开始之前的独立修复故障使用一个有界观察,因为该修复未请求网关启动。观察还涵盖前景网关。因此,失败的最终确定步骤可以报告 verifiedserving,同时保留其原始故障和修复指南。观察不会重新启动网关或授予维护权限。失败的检查保留其特定的诊断;仍在启动的网关会保留该结果而不是重新启动。如果命令清理仍然不确定,运行将保持打开状态并保留其恢复工件,而不是发布完成或开始另一次修复。

Doctor Repair 使用与普通 Doctor lint 相同的启用插件和默认检查选择。选择加入检查(包括托管 Codex 版本检查)在例程最终确定期间不会运行。当使用 doctor --lint --only codex/managed-app-server 请求时,显式候选检查仍会运行。版本检查有五秒的截止时间,在支持的情况下终止其进程组,并在后代保留管道时限制输出耗尽。超时检查不能仅仅因为其直接子项成功退出而被接受。非致命医生警告出现在 postUpdate.doctor.warnings 中;最终化报告 status: "warning" 并在没有其他步骤失败时成功退出。重新启动后,Codex 运行时就绪状态仍由其插件拥有。

最终确定(包括面向主管的 update finalize 命令)立即在 stderr 和更新运行分类帐中记录阶段开始和完成。预检准入、配置验证、配置备份和核心完成缓存预算可通过共享 SQLite 数据库及其 sidecar 进行扩展,并具有五分钟的启动时间和保守的磁盘吞吐量。修复医生及其封闭的收敛阶段没有自动挂钟截止日期。 Doctor 完成后,插件后配置和准备情况检查共享从现有共享和发现的代理数据库系列派生的预算,包括 WAL 增长。插件更新保留命令所有者的 20 分钟津贴;缺失插件修复保留其安装程序默认值。串行插件阶段和外部终结器进程不会添加竞争的默认截止日期。显式 --timeout 仍会覆盖每个阶段及其子命令。

阶段截止时间会生成退出代码 1 和 JSON 以及 status: "failed"、stuckPhase、elapsedMs、error 和现有的 phaseTimings 阵列。终结器取消该阶段,隔离进一步写入,并等待相同的预算来解决其工作。修复会恢复并验证在报告故障并退出之前停止的网关。服务托管获取和恢复在阶段取消之外保留自己的本地运营预算。账本记录一条警告,指出超时阶段和预算。报告停滞的更新时保留阶段诊断。

当新的 Doctor 在超时阶段运行时,doctorOutput 包括其 phase(pre-plugin 或 post-plugin)以及单独的 stdout 和 stderr 诊断。每个流报告 receivedBytes、lastOutputAgeMs(静默时为 null)以及上限为 256 UTF-8 字节的经过编辑的 excerpt。失败阶段的账本详细信息和 stderr 在退出前保留相同的摘录。每个流的捕获限制为 64 KiB;超过该上限会将文本替换为 omitted: "capture-limit"。不完整的私钥或编辑错误也会忽略流文本。最近的输出年龄表示输出接收;它并不能证明迁移已经进行。输出和心跳不会延长阶段期限。这些诊断并不能确定每个后代都已停止,并且不能用作回滚授权。

共享 CLI 处理器有单独的五秒截止时间。故障诊断和任何交互式恢复在十秒​​退出宽限期开始之前完成。如果终结器在该宽限后仍然处于活动状态,stderr 和分类帐会记录活动资源类型和未解决的处置程序名称,则该进程将以其记录的结果退出。保留的句柄不能无限期地保留主管的结果。两种停顿诊断还包括 childProcesses:最多 8 个带有 pid、parentPid 和可执行文件名称 (command) 的后代进程。省略参数、环境值和可执行路径。 childProcessesTruncated 表示省略的条目; childProcessInspection: "unavailable"表示无法读取进程列表。空 command 表示该进程的可执行文件名称不可用。检查仅在停顿后运行,并且最多向出口边界增加一秒。相故障 JSON 包括相同的字段。报告被阻止的子项时,保留这些诊断信息和阶段收据。当其子级可以在阶段预算内停止时,完成缓存刷新仍会尽力而为。超过总体截止日期的阶段仍然无法最终确定。

如果没有交互式审查或明确的 --accept-capabilities,则不会安装需要功能同意的插件工件。 --yes单独不接受能力变更,JSON模式不提示。未解决的审核会保留之前的插件有效负载,并显示在 postUpdate.plugins.warnings 中,结果为 PLUGIN_CAPABILITY_CONSENT_REQUIRED。当要求的检查通过后,openclaw update可以完成核心更新,并用status: "ok"请求网关重启; update repair 报告 status: "warning",而不请求更新激活。两个命令都成功退出。当捆绑的插件移动到外部包或缺少配置的插件尚未安装记录时,这也适用;未安装未经审查的替代品。当可用的、启用的工件仍然安装时,自动修复可以将延迟替换报告为通知;保留的工件仍在接受有效负载验证。

如果核心包已更改,请在交互式终端中运行 openclaw update repair 以检查插件功能。检查更改后,自动化可以使用 openclaw update repair --accept-capabilities。在此调用期间,接受适用于每个工件重新计算的声明表面;它不批准未来的功能添加。

跳过旧审计恢复

在 Linux 上的本机 auto 模式下,fs-safe 通过发布独占硬链接,然后删除旧名称来处理拒绝无替换重命名的文件系统上的遗留审核移动。当本机助手丢失或禁用时,Doctor 会保留其单独的兼容性发布者。本机 require 模式拒绝不支持的移动。这会保留原始 inode,包括后来从较旧的 CLI 的打开文件描述符中追加的内容。现有目标永远不会被覆盖。 Doctor 在导入前恢复中断的链接对;备份捕获一份经过清理的副本,而不更改任何一个实时名称。

如果文件系统也拒绝硬链接,Doctor 会保留审核文件并报告可恢复的警告,其中包含受影响的文件名和针对该状态目录的命令。其他修复和更新完成工作仍在继续。恢复硬链接支持,或在将完整状态目录移动到兼容文件系统之前停止网关和所有 CLI 编写器,然后运行报告的 openclaw doctor --fix 命令。如果目录已移动,请更新该命令中的 OPENCLAW_STATE_DIR。 Doctor 从不替换文件副本:这样做可能会丢失以后的审核附加。

当旧审计原始存档发生更改而不是通过追加时,Doctor 会将其保留在其自身旁边并带有 .quarantined-<date>-<id> 后缀。该警告命名了隔离路径并解释了预期的仅附加增长和观察到的变化。当经过清理的同伴仍包含历史记录时,没有检查点的空原始存档也会被隔离。 Doctor 保留已清理的记录和现有的 SQLite 行,继续以后的修复,并且不会在后续运行中重复警告。隔离区不会导入更改的字节或删除存档或备份。隔离的原始存档保留在本地,并且不包括在便携式备份中;已清理的同伴和保留的 SQLite 审核历史记录均正常备份。

当原始存档没有检查点并且以不明确的空格开头,或者无法获取另一个持久的原始存档检查点时,Doctor 可以保留其他遗留审计源。这些情况会生成带有警告的 skipped 迁移收据。其他修复仍在继续,更新完成可能会在出现警告的情况下完成。不安全的恢复失败,例如无法恢复的中断存档,仍然会阻止 Doctor。

保留报告的源、其已清理的同伴(例如,logs/config-audit.jsonl.migrated.raw 旁边的 logs/config-audit.jsonl.migrated)以及任何恢复日志或备份。在尝试恢复之前,请遵循 备份指南,并在请求帮助时包含警告和存档文件名。不要删除或重写存档或检查点来抑制警告。

对于留在原处的源的警告会在稍后运行 Doctor 或 openclaw update repair 时重复,直到存档得到解决。成功完成并不意味着该历史审计数据已导入。当原始存档不可用时,当前不支持仅清理导入:接受同伴作为恢复源需要一个明确的协调过程,以保留重复事件、保留的历史记录和检查点证据。

update cleanup

验证升级和会话历史记录有效后,停用迁移恢复原始数据和取代的原始状态更新捕获。从预览开始,预览可以在网关处于活动状态时运行:

bash
openclaw update cleanup --dry-runopenclaw --profile work update cleanup --dry-run --json

清理目标是选定的配置文件和 OPENCLAW_STATE_DIR / OPENCLAW_CONFIG_PATH 覆盖。它显示该状态目录并且不会重定向到托管服务。确认显示的目录是您要清理的安装。 --dry-run 读取配置和恢复元数据,包括启动迁移备份的现有更新历史记录,无需维护锁定、加载插件或创建状态。候选字节仍需要身份验证;历史文物单独列出,需要验证。受保护和阻止的工件包括原因代码。

在应用之前,请停止同一 profile/state 目录的网关,并等待其他 SQLite 维护命令完成。也停止数据库读取器,包括重复运行 openclaw sessions --all-agents --json 的观察程序,并让它们保持停止状态,直到清理退出。只读 SQLite 连接可以创建或更改 WAL/SHM sidecar,即使会话内容未更改,也会使清理的目标检查无效。如果清理报告 Recovery destination database changed; preview cleanup again.,请停止这些读取器,再次预览,然后重试。清理需要独占的离线状态所有权,并且永远不会停止或重新启动服务本身。对于所有者或维护锁争用,在任何删除之前清理会报告 Stop the Gateway first (openclaw gateway stop)。

bash
openclaw update cleanupopenclaw update cleanup --yes --json

交互式确认默认为No。 JSON模式从不提示或授予同意;无人值守删除需要 --yes。同意不会覆盖所有权、文件身份或依赖性检查。适用标志(--dry-run、--yes 和 --json)在 cleanup 之前或之后工作;仅更新标志 --channel、--tag、--timeout、--no-restart 和 --accept-capabilities 被拒绝。

只有拥有者记录且具有完整进口证据的恢复文物才有资格。未知或未导入的历史记录、格式错误的输入、轨迹、取证损坏的数据库、操作员备份和未显示的工件均受到保护。旧清单尽可能进行离线验证;证据缺失是保留文物的一个原因。 Cleanup 没有自动过期策略。不可变的发布保留检查与此迁移备份清理分开,并在兼容的服务桥上保持门控。其描述符策略和发布生成清单记录所有权,而无需删除目录或快照。他们不使不可变版本符合 update cleanup 的条件;请参阅 不可变释放保留库存。 Doctor 的 <database>.pre-startup-migration-<id>.bak 组(包括其 .scoped.bak 成员)仅在 Doctor 验证迁移完成并且更新历史记录记录稍后开始的成功更新后才符合资格。在那之前,它们看起来是受保护的。更改或未记录的备份仍然受到保护或阻止; cleanup 永远不会从文件名中推断出删除的权限。将这些文件与升级前备份一起保留,同时您仍需要恢复匹配的数据库生成。私有包、命令填充程序和 Git 运行时备份仍归更新事务所有,并且不属于此迁移清理范围。更新历史记录中的中断条目不会阻止清理其他符合条件的迁移存档。

还列出了 <state-directory>.update-captures/ 中的原始状态更新捕获,包括迁移后保留在先前默认状态目录旁边的捕获。每个捕获目录报告其逻辑字节。文本摘要添加 Update captures: 行及其总字节数、候选字节数和受保护字节数。 Cleanup 仅通过更新历史记录中的运行 ID 来确定捕获的属性,并且从不读取捕获的有效负载:

  • candidate / superseded-update-capture:当后续更新成功时,已完成更新的密封捕获。
  • candidate / unsealed-update-capture:当后续更新成功时,从未从完成的更新中密封(更新报告为 Original update capture failed)的捕获。没有任何东西可以从未密封的捕获中恢复。
  • protected / awaiting-later-completed-update:捕获最新的成功更新或在此之后完成的任何更新。
  • protected / unfinished-update-run 或 pending-update-recovery:更新仍在运行,或其记录的回滚尚未解决。
  • protected / unresolved-failed-update:失败更新的密封捕获,既不恢复也不向前修复。它仍然是该更新的手动恢复源。
  • protected / unmanifested-update-capture:没有捕获标记或没有匹配的更新运行的目录,例如独立的 Doctor 捕获以及捕获目录中的任何其他文件。 unreadable-update-history 还可以保护每次捕获。

停用捕获会删除其整个目录,包括其中的任何 candidate 和 prepared 恢复代,与其余清理具有相同的独占所有权。中断的删除会将剩余部分归因于同一运行,因此重新运行清理即可完成它。

JSON结果包含stateDir、status、artifacts和totals。每个工件都会报告其路径、运行 ID、逻辑字节、结果和原因;更新捕获还带有 kind: "update-capture"。总计单独候选、需要验证、受保护、阻止和删除的字节,包括更新捕获。删除失败退出非零。保留恢复清单并重新运行清理以完成记录的中断工作;重试不会删除重新创建的文件。删除的逻辑字节不保证克隆或快照文件系统上的等效物理空间回收。当无法检查路径时,其逻辑大小来自记录的工件元数据(如果可用)。 Cleanup 在删除之前记录持久意图,并使用专有的无副本发布。报告故障;重试协调已完成的文件操作。清单文件在删除之前进行同步;在支持的情况下同步父目录。 Windows 不提供相同的父目录持久性保证。

医生恢复报告有意处置原件并明确待清理。更新和清理都不会创建自动全状态备份;这些恢复原始文件是 ,而不是完整的升级前备份。请参阅 更新之前:创建经过验证的备份 以实现备份覆盖,并参阅 Doctor 恢复 以恢复保留的原始文件。

本页有帮助吗?