Contents — find the section you need
Change parameters and verify
Open the panel, then press Run to load Python. You can stop execution and reset parameters. Results are computed on this device. No Python installation is required.
Local execution steps below are optional for reproducing the source results; they are not required for the browser experiment.
The experiment controls are in English.
备份成功的退出代码并不能证明服务可以从已保存的数据重新启动。文件恢复、数据库可读性以及所需的应用程序操作需要分开考虑。首先进行一个不会访问生产数据的练习。
定义成功恢复
照片服务需要图像和数据库记录之间的关联。身份验证也可能依赖于配置和加密密钥。将可接受的数据丢失窗口 (RPO) 与可接受的恢复时间 (RTO) 分开定义。备份频率和恢复时间是不同的衡量标准。
运行一个独立的练习
保存 restore_lab.py 并运行 python3 restore_lab.py。它使用 Python 3.12.3 标准库。每次运行都会创建一个新的临时目录、一个文本文件和一个 SQLite 记录。它不会停止或删除现有服务或数据集。
该脚本使用 SQLite 的备份 API 复制数据库,将其与文本文件打包成 ZIP 文件,然后恢复到另一个空目录中。它会检查 SHA-256 哈希值、PRAGMA integrity_check 以及一条已知的 SQL 记录。请参阅 SQLite 的官方备份 API 说明。
file_hashes: pass
sqlite_integrity: pass
application_read: pass
scope: synthetic fixture only
所有三项检查均于 2026 年 9 月 7 日通过。此处,应用程序读取指的是已知的 SQL 查询,而不是启动 Immich 或 Nextcloud。打印的 directory 包含保留的证据。该临时目录中的 ZIP 文件只是一个演练产物,并非用于防止存储设备丢失。
一致地捕获真实服务
对实时数据库文件进行普通复制可能无法保留恢复所需的一致性。对于 PostgreSQL,请查看诸如 SQL 转储 等方法的要求。数据库快照与引用的外部文件之间的一致性是另一个需要考虑的问题。
| 组件 | 保留 | 恢复检查 |
|---|---|---|
| 配置 | 组合、设置和镜像版本 | 重建预期设置 |
| 数据库 | 一致性转储或受支持的备份 | 加载和完整性检查通过 |
| 上传 | 文件和元数据关系 | 打开已知文件 |
| 密钥 | 密钥和身份验证材料 | 授权管理员可以恢复 |
匹配的哈希值表明与捕获的副本相等。但这并不能证明整个应用程序在捕获时是一致的。
使用 restic 的附加检查
以下步骤适用于已安装 restic 的环境;本练习中未执行 restic。分别配置存储库和凭据,并记录 restic version。选择一个快照并将其恢复到空目标位置。
restic snapshots
restic check --read-data
restic restore SNAPSHOT_ID --target /path/to/empty-restore
替换为您的环境的 ID 和路径。 恢复 和 存储库检查 回答不同的问题。使用 --read-data 读取存储数据时,应考虑运行时成本和传输成本。
保留恢复记录
记录捕获时间、恢复开始和结束时间、数据量、版本、文件检查结果和应用程序操作。在替换生产数据之前,请在隔离环境中进行验证,并禁用出站电子邮件和 Webhook。身份验证和文件读取检查会将此小型练习转化为 home-server 平台 的特定服务流程。
评论
请先登录。
暂无数据。