适用版本: 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”的顺序处理:
- 查看目标 snapshot 的状态信息,确认失败是否只影响当前索引。
- 检查该索引在快照时是否有 shard failure。
- 判断业务上是否允许接受 partial restore。
- 若不允许,改用一份完整成功的快照恢复。
相关 Elasticsearch API #
GET /_snapshot/{repository}/{snapshot}:查看快照中索引与 shard 的状态。GET /_snapshot/{repository}/{snapshot}/_status:查看更细的 snapshot 执行情况。GET /_cat/shards/{index}:回看原索引快照前后的分片状态线索。
排查时需要注意的问题 #
partial=true和partial=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。
相关错误 #
- 无法恢复不兼容的快照:恢复入口更早的快照兼容性校验失败
- 无法还原部分索引因为索引已存在:允许 partial 时的相邻索引级校验异常
- 无法恢复部分索引:partial restore 的通用语义页
- 恢复失败:通过前置校验后在执行阶段失败
附:日志上下文 #
if (failed(snapshotInfo, index)) {
if (request.partial()) {
return true;
} else {
throw new SnapshotRestoreException(snapshot, "index [" + index + "] wasn't fully snapshotted - cannot restore");
}
}





