适用版本: 7.14-8.9
1. 错误异常的基本描述 #
failed to get snapshot info 表示 Elasticsearch 已经定位到某个快照 ID,但在进一步读取这个快照的详情元数据时失败了。它通常出现在列举快照、查询快照详情、恢复前检查快照信息等场景。
常见现象 #
GET /_snapshot/{repository}/{snapshot}返回500。- 某些快照可以正常列出,但个别快照一读取详情就失败。
- 日志里可能同时出现
NoSuchFileException、NotXContentException、SnapshotMissingException或底层存储读取异常。
典型报错与异常栈 #
org.elasticsearch.snapshots.SnapshotException: [prod-backup:snap-2026.03.30] failed to get snapshot info
Caused by: java.io.IOException / org.elasticsearch.common.compress.NotXContentException
2. 为什么会发生这个错误 #
Elasticsearch 在读取快照详情时,需要从仓库中加载该快照对应的元数据 blob。如果文件缺失、内容损坏或底层读取失败,就会抛出这个异常。常见原因包括:
- 快照元数据文件缺失,导致触发
NoSuchFileException。 - 快照详情文件内容损坏或格式异常,触发
NotXContentException。 - 对象存储、共享文件系统或远程仓库读取失败。
- 仓库曾被人工修改、迁移不完整,或多个集群并发写入造成快照记录与文件不一致。
3. 如何排查和解决这个异常和解决这个异常 #
建议把重点放在“具体哪个快照的哪个元数据文件读失败”。
- 先定位报错中的仓库名和快照名。
- 用接口确认是否只有单个快照失败,还是整个仓库读取都异常:
GET /_snapshot/prod-backup/_all
GET /_snapshot/prod-backup/snap-2026.03.30
- 查看主节点日志里的完整
Caused by,判断是文件缺失、内容损坏还是底层 IO 失败。 - 如果仓库在对象存储上,检查目标快照相关 blob 是否存在,权限是否完整,最近是否有人做过人工清理或生命周期回收。
- 如果是共享文件系统仓库,检查挂载一致性、路径配置和底层文件是否被误删或覆盖。
排查时需要注意的问题 #
failed to get snapshot info说明问题已经落到某个具体快照,而不是泛泛的仓库不可用。- 如果
_all能列出快照,但读取单个快照详情失败,通常是该快照自己的元数据文件有问题。 - 不要因为仓库里还能看到其他快照就排除存储层故障,局部对象缺失也很常见。
4. 如何解决这个错误 #
常用修复思路 #
- 如果是权限或连通性问题,修复仓库访问权限和网络后重新验证读取。
- 如果是个别快照元数据缺失或损坏,需要评估该快照是否还能使用,必要时删除损坏快照并重新备份。
- 如果是仓库迁移或人工改动引起的不一致,先停止仓库写入,再检查元数据与底层文件的对应关系。
- 如果多个集群共享写入同一仓库,改为单写多读模式,避免继续制造不一致。
相关 Elasticsearch API #
GET /_snapshot/{repository}/_all:列出全部快照。GET /_snapshot/{repository}/{snapshot}:读取指定快照详情。POST /_snapshot/{repository}/_verify:验证仓库是否可正常访问。
借助 INFINI 产品提升排障效率 #
- INFINI Console 可集中查看快照任务、节点异常和仓库访问日志,便于确认是单个快照问题还是仓库整体问题。
- INFINI Gateway 可辅助定位上游是否持续请求一个已经损坏或缺失元数据的快照。
5. 小结 #
failed to get snapshot info 的本质是“快照记录找到了,但快照详情读不出来”。处理时应优先判断是单个快照元数据损坏、底层文件缺失,还是仓库访问本身异常,再决定是修复存储、删除坏快照还是调整仓库访问方式。
相关错误 #
- snapshot [snapName] not found in repository [repoName]:仓库里已经连目标快照记录都不可见
- Unexpected exception when loading repository data:连仓库元数据入口都加载失败
- could not read repository data from index blob:仓库基础元数据 blob 无法读取
- detected a corrupted repository index:仓库索引文件已发生损坏或不一致
- index [indexName] not found in repository [repoName]:快照可以打开,但请求索引不在其中
附:日志上下文 #
try {
snapshotInfo = SNAPSHOT_FORMAT.read(metadata.name(), blobContainer(), snapshotId.getUUID(), namedXContentRegistry);
} catch (NoSuchFileException ex) {
failure = new SnapshotMissingException(metadata.name(), snapshotId, ex);
} catch (IOException | NotXContentException ex) {
failure = new SnapshotException(metadata.name(), snapshotId, "failed to get snapshot info " + snapshotId, ex);
}





