--- title: "验证快照仓库" date: 2026-03-18 lastmod: 2026-03-18 description: "验证快照仓库的完整性" tags: ["快照", "验证", "仓库"] summary: "验证指定的快照仓库,检查其配置、存储访问和完整性。 API 格式 # POST /_snapshot/{repository}/_verify API 作用 # 该 API 用于验证快照仓库的健康状态: 验证仓库配置是否正确 检查底层存储系统是否正常工作 确认仓库可以被访问用于快照操作 验证所有仓库设置和参数 API 参数 # 路径参数 # 参数 类型 是否必填 默认值 描述 {repository} String 是 - 要验证的快照仓库名称 查询参数 # 参数 类型 是否必填 默认值 描述 timeout Time 否 30s 操作超时时间 master_timeout Time 否 30s 连接主节点的超时时间 请求示例 # 验证指定仓库 # POST /_snapshot/my_backup/_verify 设置超时时间 # POST /_snapshot/my_backup/_verify?" --- 验证指定的快照仓库,检查其配置、存储访问和完整性。 ## API 格式 ``` POST /_snapshot/{repository}/_verify ``` ## API 作用 该 API 用于验证快照仓库的健康状态: - 验证仓库配置是否正确 - 检查底层存储系统是否正常工作 - 确认仓库可以被访问用于快照操作 - 验证所有仓库设置和参数 ## API 参数 ### 路径参数 | 参数 | 类型 | 是否必填 | 默认值 | 描述 | |------|------|----------|--------|------| | `{repository}` | String | **是** | - | 要验证的快照仓库名称 | ### 查询参数 | 参数 | 类型 | 是否必填 | 默认值 | 描述 | |------|------|----------|--------|------| | `timeout` | Time | 否 | `30s` | 操作超时时间 | | `master_timeout` | Time | 否 | `30s` | 连接主节点的超时时间 | ## 请求示例 ### 验证指定仓库 ``` POST /_snapshot/my_backup/_verify ``` ### 设置超时时间 ``` POST /_snapshot/my_backup/_verify?timeout=5m ``` ## 响应示例 ### 成功响应 ```json { "verified": true, "repository": "my_backup", "verified_at": "2026-02-04T10:00:00Z", "checks": { "repository_exists": true, "storage_accessible": true, "configuration_valid": true, "permissions_ok": true }, "details": { "location": "/mnt/backup/my_backup", "type": "fs", "size": "1.5GB", "snapshot_count": 5 } } ``` ### 错误响应 ```json { "error": { "root_cause": [ { "type": "repository_exception", "reason": "failed to verify repository [my_backup]" } ], "type": "repository_exception", "reason": "failed to verify repository [my_backup]", "caused_by": { "type": "io_exception", "reason": "No such file or directory" } } } ``` ## 响应字段说明 ### 成功响应字段 | 字段 | 类型 | 描述 | |------|------|------| | `verified` | Boolean | 仓库验证是否成功 | | `repository` | String | 被验证的仓库名称 | | `verified_at` | String | 验证时间戳 | | `checks` | Object | 各项检查结果 | | `details` | Object | 验证成功时的仓库详情 | ### 检查结果 (checks) | 字段 | 类型 | 描述 | |------|------|------| | `repository_exists` | Boolean | 仓库是否存在于集群中 | | `storage_accessible` | Boolean | 底层存储是否可访问 | | `configuration_valid` | Boolean | 所有仓库设置是否有效 | | `permissions_ok` | Boolean | 节点是否有访问存储的适当权限 | ### 仓库详情 (details) | 字段 | 类型 | 描述 | |------|------|------| | `location` | String | 仓库存储路径 | | `type` | String | 仓库类型(如 `fs`、`s3`、`azure` 等) | | `size` | String | 仓库大小 | | `snapshot_count` | Integer | 仓库中的快照数量 | ## 使用场景 1. **部署前检查**:在创建关键快照之前验证仓库 2. **健康监控**:定期检查仓库健康状态 3. **故障排查**:当快照操作失败时验证仓库 4. **仓库迁移**:将仓库移动到新存储后进行验证 ## 验证检查项目 API 执行以下验证: 1. **仓库存在性**:确认仓库在集群配置中存在 2. **存储可访问性**:验证底层存储可以访问 3. **配置有效性**:检查所有仓库设置正确 4. **权限检查**:确认节点有访问存储的权限 ## 错误条件 验证可能因以下原因失败: - 仓库不存在 - 存储路径不可访问 - 网络连接问题(对于远程存储) - 权限不足 - 配置参数无效 ## 相关操作 - **PUT /_snapshot/{repository}**:创建快照仓库 - **GET /_snapshot/{repository}**:查询仓库信息 - **POST /_snapshot/{repository}/_cleanup**:清理仓库 - **POST /_snapshot/{repository}/{snapshot}**:创建快照 ## 最佳实践 1. **使用前验证**:创建关键快照前始终验证仓库 2. **定期检查**:定期验证仓库以发现存储问题 3. **错误处理**:检查响应中是否有失败的验证项 4. **存储监控**:结合存储监控系统进行全面健康检查 ## 注意事项 1. **只读操作**:验证操作不会修改仓库数据 2. **执行时间**:大型仓库的验证可能需要较长时间 3. **并发操作**:验证期间可能影响其他快照操作 4. **网络依赖**:对于云存储,验证需要网络连接 ## 实现文件 - **REST 处理器**:`RestVerifyRepositoryAction.java` - **Transport Action**:`TransportVerifyRepositoryAction.java` - **请求类**:`VerifyRepositoryRequest.java` - **响应类**:`VerifyRepositoryResponse.java` - **结果类**:`RepositoryVerificationResult.java`