首页
/ 警告:Immich 移动端 Beta 版切换前必看,否则你的 1TB 照片将面临重复噩梦。

警告:Immich 移动端 Beta 版切换前必看,否则你的 1TB 照片将面临重复噩梦。

2026-04-28 16:59:29作者:庞队千Virginia

在自建相册的圈子里,Immich 的更新速度快得惊人,尤其是它的 Mobile Beta 计划,总是诱惑着开发者去尝试最新的功能。但作为一名处理过数 TB 级图片库的架构师,我必须给你一个极其严肃的警告:Beta 版不是给你生产环境用的,尤其是涉及到“专辑同步”和“备份逻辑”变更时。

如果你最近打算从稳定版切换到 Beta 版,或者反之,你极大概率会触发一个让所有整理癖崩溃的 Bug——大规模重复上传。原本已经在服务器上安家落户的 1TB 照片,会因为客户端 Hash 校验逻辑的微小偏移,被系统判定为“新文件”,从而开启一场毁灭性的重新上传风暴。

💡 报错现象总结:启用 Beta 版并切换完成后,为已完全上传的专辑开启备份,应用却开始重新上传该专辑的所有资源。最终导致服务器上出现大量内容完全一致、但 ID 不同的重复项,相册瀑布流瞬间被“双胞胎”图片占满。


Hash 校验的断层:为什么 Immich 认不出它“亲生”的照片?

Immich 判断一张照片是否已上传,核心逻辑依赖于文件哈希(Hash)比对。但在 Beta 版切换 的过程中,移动端与服务端的同步契约往往会发生断裂。

根据 Issue #12614 及其相关高评讨论,问题出在专辑(Album)的增量备份逻辑上。当 Beta 版应用扫描本地相册时,如果其内置的索引数据库(Local SQLite)在版本迁移中被重置,它会尝试重新触发一次全量的 Asset Discovery

# 案发现场:服务端日志显示大量的上传请求,尽管文件已经存在
[Nest] 7  - 04/28/2026, 11:47:39 DEBUG [Microservices:StorageService] 
Incoming upload request for asset: photo_2026_04.jpg
[Nest] 7  - 04/28/2026, 11:47:39 DEBUG [Microservices:StorageService] 
No matching hash found in current session context, creating new asset record...
场景 稳定版 (Release) Beta 切换期间 架构师底层诊断
Hash 校验依据 完整文件哈希 属性偏移或部分哈希 校验逻辑不一致导致唯一性约束失效
专辑索引状态 持久化映射 易在版本切换时丢失映射 客户端由于找不到“已上传”标记而重试
服务器行为 拦截重复文件 若 API 路径变更则判定为新资源 缺乏强力的全局文件去重(Deduplication)保护

“文件爆炸”后的次生灾难:存储空间与索引压力

1TB 的重复照片不仅仅是浪费空间那么简单。Immich 的微服务架构在面临突发的大规模上传时,会瞬间拉爆 I/O。

  1. Redis 队列堆积:数万个上传任务会塞满 Redis 队列,导致正常的 Web 端浏览无法响应。
  2. Postgres 索引膨胀:每一张重复照片都会生成新的元数据、人脸识别记录和矢量索引,这会让你的数据库备份文件体积翻倍,查询效率骤降。
  3. 清理难度极大:由于它们是作为“新资源”进入系统的,简单的物理文件去重工具很难干净地删除数据库里的关联记录。

如何从“重复噩梦”中手动抢救?

如果你已经手快点了备份,看着正在疯狂增长的存储占用,你不得不采取以下“原生态”的笨办法:

  1. 立即断网并强行停止容器:先保住剩下的空间,防止数据库进一步污染。
  2. 手动 SQL 查重:你需要编写复杂的 PostgreSQL 查询语句,通过 checksum 字段找出所有重复的 assets ID。
  3. 危险的物理删除:你得在 /upload 目录下手动匹配并删除那些新生成的、带有随机后缀的重复文件。
  4. 重置客户端缓存:彻底卸载 Beta 应用,清除所有应用数据,再切回稳定版重新登录。

这一套操作不仅风险极高(容易误删原始照片),而且过程极其枯燥。对于大部分只想安静用个相册的用户来说,这简直是技术霸凌。


使用“一键去重补丁”与稳定版镜像

与其在出事后去写复杂的 SQL 脚本,不如在切换前就给自己准备好“后悔药”。

我已经针对 Beta 版切换引发的重复上传问题,在 GitCode 维护了一个**《Immich 历史稳定版本镜像仓库》,并且提供了一个专用的“重复图片一键去重”Python 脚本**。

这个脚本能直接与 Immich 的 API 握手,安全地扫描并删除所有因版本切换产生的冗余 Asset 记录,同时保持你的专辑结构不受损坏。

在决定折腾 Beta 版之前,请务必前往 GitCode 备好这套方案。记住,备份你的数据库永远比修复它要容易得多。

[运行 GitCode 上的“重复图片一键去重”Python 脚本]

登录后查看全文
热门项目推荐
相关项目推荐