适用版本: 6.8-8.11
1. 错误异常的基本描述 #
index [index] wasn't fully snapshotted - cannot restore 表示当前要恢复的索引,在源快照里并没有完整快照成功,因此 Elasticsearch 拒绝执行完整恢复。
从源码逻辑看,只有当快照记录显示该索引失败且本次 restore 请求不是 partial 模式时,才会抛出这条异常。
常见现象 #
- 执行
/_snapshot/.../_restore时直接失败。 - 同一个 snapshot 可能整体存在,但其中部分索引或部分分片并未成功完成快照。
- 日志中常可看到
SnapshotRestoreException,以及更早阶段的 snapshot 失败记录。
典型报错 #
SnapshotRestoreException: index [my_index] wasn't fully snapshotted - cannot restore
2. 为什么会发生这个错误 #
这不是 restore 过程中新产生的损坏,而是 restore 在读取 snapshot 元数据时,发现该索引原本就没有被完整快照。
常见来源包括:
- 创建 snapshot 时该索引已有失败分片。
- 快照结果是
PARTIAL,但现在按完整 restore 去恢复。 - repository 中保存的是一个不完整的索引备份状态。
3. 如何排查和解决这个异常和解决这个异常 #
- 先查看源 snapshot 的
state、failures和索引级分片结果。 - 确认出错索引在创建快照时是否已经失败或仅部分成功。
- 检查本次 restore 是否允许
partial。 - 若业务要求完整恢复,应改用一个对该索引完全成功的 snapshot。
重点判断 #
- 如果你需要严格一致的完整恢复,不应对不完整 snapshot 继续恢复。
- 如果只是尽量恢复可用数据,可以评估是否允许
partial restore。
4. 如何解决这个错误 #
常用修复思路 #
- 选择一个对该索引完全成功的快照重新恢复。
- 若业务允许部分恢复,在 restore 请求中显式使用
partial。 - 回头修复最初导致 snapshot 不完整的 repository、分片或节点问题。
5. 小结 #
这条异常本质上是在说:问题出在“源快照不完整”,不是 restore API 本身写错。先确认 snapshot 的真实性和完整性,再决定是换快照还是接受 partial 恢复。
相关错误 #
附:日志上下文 #
// Make sure that index was fully snapshotted
if (failed(snapshotInfo, index)) {
if (request.partial()) {
return true;
} else {
throw new SnapshotRestoreException(snapshot, "index [" + index + "] wasn't fully snapshotted - cannot restore");
}
} else {
return false;
}





