📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

适用版本: 7.14-8.9

1. 错误异常的基本描述 #

index [name] wasn't fully snapshotted - cannot restore 表示 Elasticsearch 在校验待恢复索引时,发现该索引在原始快照中存在失败记录,也就是 snapshotInfo 显示它并没有被完整、成功地快照下来。因此在 request.partial()false 的情况下,会直接抛出 SnapshotRestoreException,拒绝恢复。

这不是恢复执行中断,而是“索引快照本身就不完整”的前置检查失败。

常见现象 #

  • 恢复请求很快失败,但错误只针对某个索引而不是整个快照。
  • 同一个快照中部分索引可以恢复,部分索引不行。
  • 如果启用了 partial restore,请求行为会不同,不一定直接报错。
  • 通常能在原始 snapshot 状态里找到该索引或其分片失败记录。

典型报错与异常栈 #

SnapshotRestoreException: [repo:snap-20260331] index [orders-2024] wasn't fully snapshotted - cannot restore

2. 为什么会发生这个错误 #

Elasticsearch 会在 restore 前确认目标索引是不是“完整快照”。如果 snapshot 过程中某些分片失败,或者索引整体只形成了不完整结果,那么在非 partial restore 模式下,该索引就不允许恢复。

常见原因通常包括:

  • 快照时该索引有分片失败,导致 snapshotInfo 记录为 failed。
  • 快照期间索引分片状态不稳定,未能全部纳入快照。
  • 用户请求的是完整恢复,但源快照只包含部分成功内容。

3. 如何排查和解决这个异常和解决这个异常 #

建议按“先确认快照里这个索引是否真的不完整,再决定是否接受 partial restore”的顺序处理:

  1. 查看目标 snapshot 的状态信息,确认失败是否只影响当前索引。
  2. 检查该索引在快照时是否有 shard failure。
  3. 判断业务上是否允许接受 partial restore。
  4. 若不允许,改用一份完整成功的快照恢复。

相关 Elasticsearch API #

  • GET /_snapshot/{repository}/{snapshot}:查看快照中索引与 shard 的状态。
  • GET /_snapshot/{repository}/{snapshot}/_status:查看更细的 snapshot 执行情况。
  • GET /_cat/shards/{index}:回看原索引快照前后的分片状态线索。

排查时需要注意的问题 #

  • partial=truepartial=false 的行为不同,先确认恢复请求参数。
  • 这条异常说明问题出在“源快照质量”,不是目标集群执行 restore 时突然出错。
  • 即使只有少量 shard 失败,也会让完整恢复被拒绝。

4. 如何解决这个错误 #

常用修复思路 #

  • 优先选择状态完整、无 shard failure 的快照进行恢复。
  • 若业务允许不完整数据,可评估 partial restore,但要明确数据缺口风险。
  • 对关键索引建立快照结果校验,不要只看 snapshot 任务是否结束,还要看是否 fully snapshotted。

借助 INFINI 产品提升排障效率 #

  • INFINI Console 适合查看快照结果、失败分片分布和索引级异常趋势。
  • INFINI Gateway 可帮助审计是否有自动化任务在使用错误的 snapshot 恢复。

5. 小结 #

index [name] wasn't fully snapshotted - cannot restore 的核心不是 restore 命令有问题,而是源快照对这个索引并不完整。解决重点是确认 snapshotInfo 的失败记录,并决定改用完整快照还是接受 partial restore。

相关错误 #

附:日志上下文 #

if (failed(snapshotInfo, index)) {
	if (request.partial()) {
		return true;
	} else {
		throw new SnapshotRestoreException(snapshot, "index [" + index + "] wasn't fully snapshotted - cannot restore");
	}
}