适用版本: 7.x-8.x
1. 错误异常的基本描述 #
Failed to get store file metadata 表示快照流程已经拿到了当前分片的 IndexCommit,但在读取该提交对应的本地 store 元数据时失败。
这说明问题发生在“从本地分片读取待快照文件信息”这一步,还没有进入远端仓库上传阶段。
常见现象 #
- 某个分片快照失败,但仓库本身可能仍然可访问。
- 日志中出现
IndexShardSnapshotFailedException,并带有底层IOException。 - 同一快照任务中,个别分片失败而其他分片继续执行。
2. 为什么会发生这个错误 #
源码先记录当前 IndexCommit,随后执行 store.getMetadata(snapshotIndexCommit) 和 snapshotIndexCommit.getFileNames()。只要读取提交点对应的本地文件元数据失败,就会抛出这个异常。
常见原因包括:
- 分片本地段文件缺失、损坏或无法读取。
- 节点磁盘异常、文件系统抖动或 I/O 故障。
- 分片在快照期间正经历恢复、关闭或并发异常。
- 底层 Lucene commit 信息与实际文件状态不一致。
3. 如何排查和解决这个异常和解决这个异常 #
- 先确认失败的是哪个索引、分片和快照任务。
- 查看分片所在节点日志,定位
IOException的底层原因。 - 检查本地磁盘、文件系统、段文件和分片恢复状态。
- 确认该分片是否近期发生过异常重启、磁盘迁移或文件损坏。
- 如果只有单个副本异常,考虑切换到健康副本后重试快照。
4. 如何解决这个错误 #
常用修复思路 #
- 修复分片所在节点的磁盘或文件系统问题。
- 让分片恢复到稳定状态后重新执行快照。
- 对已损坏的分片通过副本恢复或重建索引进行修复。
- 不要把这个错误误判成仓库权限问题,因为失败点还在本地 store 元数据读取。
5. 小结 #
Failed to get store file metadata 指向的是快照前半段的本地文件元数据收集失败。先看分片本地健康度,再看仓库侧,排查路径会更高效。
相关错误 #
- failed-to-get-snapshot-info:读取快照元数据详情失败
- failed-to-get-snapshots:列举快照失败
- failed-to-read-shard-snapshot-file-for:读取分片快照文件失败
- failed-to-snapshot:分片快照流程的更上层失败
附:日志上下文 #
final IndexCommit snapshotIndexCommit = context.indexCommit();
logger.trace("[{}] [{}] Loading store metadata using index commit [{}]"; shardId; snapshotId; snapshotIndexCommit);
metadataFromStore = store.getMetadata(snapshotIndexCommit);
fileNames = snapshotIndexCommit.getFileNames();
} catch (IOException e) {
throw new IndexShardSnapshotFailedException(shardId; "Failed to get store file metadata"; e);
}
}
for (String fileName : fileNames) {
if (snapshotStatus.isAborted()) {
logger.debug("[{}] [{}] Aborted on the file [{}]; exiting"; shardId; snapshotId; fileName);





