# Telegram · 存储与恢复

Canonical page: https://phishdestroy.github.io/TgWitness/zh/docs/reference/storage/

备份、将旧文件移至云端、Object Lock 下的副本以及在新设备上的恢复。

[Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/)

[Documentation index](https://phishdestroy.github.io/TgWitness/zh/llms.txt)

备份、将旧文件移至云端、Object Lock 下的副本以及在新设备上的恢复。

[TgWitness](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [文档](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) · [部署与恢复](https://phishdestroy.github.io/TgWitness/zh/docs/reference/deployment/)

![部署与恢复](https://phishdestroy.github.io/TgWitness/assets/chapter-operate.svg)

该面板将任务分为三类：

| 任务 | 功能介绍 |
| --- | --- |
| 保留备份 | 将已签名的日志、检查点、已保存的文件和队列中的导出内容复制到配置好的 S3 目标位置。 |
| 免费本地存储空间 | 将选定的旧附件复制到 S3 或 rclone 云远程存储中，完整读取这些附件，验证加密字节，然后删除已验证的本地副本。 |
| 保留一份证据副本 | 配置 S3 Object Lock 并检查返回的保留状态。该服务必须确认请求的模式和日期。 |

释放空间时绝不会删除或覆盖已签名的日志。每个附件都会保留 其原始SHA-256以及一份恢复凭证。可选的 gzip 压缩会在 经过身份验证的加密之前进行。云端文件名不包含 Telegram 用户名、 聊天 ID 或原始附件名称。单个附件最大可达 32 GiB。

仅凭上传响应本身并不意味着可以删除文件。TgWitness会下载 完整的加密对象并验证其大小，SHA-256保存收据， 然后在删除前立即再次检查本地字节。如果上传失败、 回读结果不同或传输被取消，本地文件将保留原位。如果 已启用的证据备份尚未复制该文件，删除操作也会等待备份完成。

**本页内容**

- [当磁盘空间即将用尽时](https://phishdestroy.github.io/TgWitness/zh/docs/reference/storage/#when-the-disk-is-filling-up)
- [连接目标](https://phishdestroy.github.io/TgWitness/zh/docs/reference/storage/#connect-a-destination)
- [保留恢复文件](https://phishdestroy.github.io/TgWitness/zh/docs/reference/storage/#keep-the-recovery-file)
- [安装丢失后的恢复](https://phishdestroy.github.io/TgWitness/zh/docs/reference/storage/#recover-after-losing-the-installation)
- [操作员机器人和操作提示](https://phishdestroy.github.io/TgWitness/zh/docs/reference/storage/#operator-bot-and-completion-notices)

## 磁盘空间即将耗尽时

当可用空间低于**参数 → 附件 → 可用磁盘空间**中的阈值（默认 1 GiB）时，附件下载会暂停并保留队列。文本观察继续进行。这不受通知设置影响：关闭通知不会关闭下载预留空间或存储保护措施。

若要更早介入，请启用**自动运行**，选择**删除本地文件以释放空间**，并启用**磁盘空间不足时额外执行一次转存**。此可选规则默认在可用空间低于 5120 MiB 时启动，分批处理直到可用空间达到 10240 MiB。两个阈值均可配置。它与手动执行使用相同的目标位置、文件最小存放时间、批量上限、完整回读验证和证据备份前提条件，不会自行启用目标位置。每 30 秒检查一次；发生错误或没有进展时，下次尝试推迟五分钟。规则状态和重试时间在重启后保留。规则未激活时，定时任务仍按正常间隔运行。

面板显示可用空间、打包预留空间、空间不足规则是否就绪，以及因临时空间不足而跳过的文件。打包和恢复在开始前检查临时空间峰值需求，并在写入过程中检查可用空间。预留量使用下载设置，但存储操作至少保留 64 MiB。这些检查不是文件系统配额；其他进程仍可能在两次检查之间消耗空间。

Gzip 对远程对象进行无损压缩，不会缩小活动日志，也不会创建本地归档。JPEG、视频和 ZIP 可能几乎不缩小，甚至略微增大。启用压缩时，当前打包流程可能临时需要约两倍附件大小的空间，再加上预留量。请为最大的文件选择足够早的启动阈值。无法打包的过大文件会被保留并报告；较小文件和已验证的远程副本仍可帮助释放空间。已有验证通过的副本时，无需再次创建本地打包文件即可移除本地文件。恢复同样需要临时空间，空间不足时可能被拒绝。

没有符合条件的可移动文件或未配置目标位置时，TgWitness 无法自动回收空间。存储管理绝不会裁剪或重写签名日志。新的文本观察仍需要磁盘空间。

## 连接目标

**在“附加功能”→“存储与磁盘空间”→“管理存储”中**，选择任务和目标位置， 保存后，选择**“测试上传与下载**”。该测试会上传一个随机的微小探测数据并将其 读回。此过程不会使用 Telegram 内容。

对于 S3，请使用服务提供商的实际端点、区域和存储桶。Wasabi、Backblaze、 Cloudflare R2 及其他兼容服务均使用相同的 S3 设置。仅具备兼容 API 并不意味着支持 Object Lock。治理模式可能允许 授权管理员绕过保留策略；合规模式则有不同的 限制。在依赖保留策略之前，请先阅读返回的 Object Lock 状态。

对于 rclone 目标，请使用 rclone 的提供商设置创建一个远程，并将 该远程的 `[name]` 部分粘贴到面板中。已安装的辅助程序支持 MEGA、Google Drive、OneDrive、Dropbox、Box、pCloud 以及 选择器中显示的其他提供商。凭据保存在该工作区的加密保险库中。OAuth 刷新信息也会保存回保险库。凭据不会添加到日志 事件中，也不会包含在恢复下载中。

该辅助工具安装在工作区内部，包含一个固定版本和 SHA-256。 它不会被添加到系统 PATH 中。配置文件和工作文件是 该工作区内的临时文件。基于命令行和本地文件的远程连接将被 拒绝。rclone 目前要求为 外部请求显式选择 **直接** 路由。请使用原生 S3 存储作为工作区的 SOCKS5 或 HTTP 路由； rclone 不会在路由不可用时静默绕过。

## 请妥善保存恢复文件

请选择“复制文件后**保存恢复文件**”，并将该文件保存在 与安装目录分开的位置。该文件包含解密密钥和已签名的对象 收据，因此请将其视为私钥备份。请将原始远程配置 和目标凭据也分别单独保存。在后续复制操作之前 生成的恢复文件不包含该后续文件的收据。

签名密钥的指纹应已独立记录。仅通过 与同一文件内提供的密钥进行比对的签名，无法确定该 恢复文件属于谁。

若要修复现有工作区中缺失的存储收据，请打开**“从已保存的恢复文件中恢复文件**”， 并选择该文件。该面板会验证签名，并要求使用相同的工作区 签名密钥。若存储密钥不同，系统将拒绝替换。随后选择**“恢复 所有文件**”。恢复过程会暂停自动存储规则，以确保下一次计划的 处理不会立即再次删除已恢复的文件。当 本地副本处理完毕后，请重新启用该规则。

恢复操作会验证密文、认证解密过程、在 必要时进行解压，并检查原始明文SHA-256，然后将文件放入 `media/`。 损坏的远程对象绝不会替换本地文件。若现有本地文件的 字节内容不同，则会保留该文件以供审查，而非被覆盖。

## 安装丢失后的恢复方法

在另一台机器上安装 TgWitness。使用私有恢复文件、单独 记录的指纹以及原始目标凭据：

```
python -m tgwitness.storage recover \
  --recovery storage-recovery.json \
  --fingerprint TRUSTED_WORKSPACE_SHA256 \
  --credentials original-rclone.conf \
  --output recovered-attachments
```

对于 S3， `--credentials` 指向一个包含 `access_key` 和 `secret_key`；已签名的恢复文件提供目标设置。 该命令使用直接外部连接，并在 rclone 远程需要时下载固定的辅助程序 。它拒绝使用现有的输出目录。

恢复的原始字节将写入 `recovered-attachments/media/`，文件名由 其SHA-256决定。 `recovery-log.jsonl` 是一个关于恢复操作的未签名记录。 该命令不会重建丢失的已签名日志或其签名密钥。请保留 完整的工作区备份以备不时之需。存储恢复文件并非完整的工作区 备份。

## 操作员机器人和完成通知

该 Telegram 机器人归操作员所有。请通过 BotFather 创建该机器人，并在控制面板中设置其 令牌、目标聊天室以及明确允许的 Telegram 用户 ID。 发件人和聊天室必须一致。转发消息以及来自其他 机器人的命令将被忽略。

`/status` 并且 `/stats` 可在默认的“仅状态”模式下使用。可选的 控制模式还增加了 `/pause`, `/resume` 和 `/copy`. `/copy` 并请求已配置的 存储任务；这并不意味着远程上传已经完成。命令 不能提供任意的 URL、文件或 shell 程序。

请分别设置提醒和任务完成的通知。完成 通知会区分存在缺失的账户导出与完整的导出，并显示 历史记录和存储数量。除非在通知设置中单独 启用，否则不会包含消息摘录。服务选择器是根据实际 安装的 Apprise 目录生成的，而非一组固定的提供商示例。
