那个下午我蹲在机房地板上数硬盘指示灯,旁边站着机房管理员老周,他手里捏着一张打印出来的目录树,上面用红笔标了 47 个文件夹。事情本身不复杂:搬迁时三块盘顺序插反,系统重新挂载后按卷标重新分配了盘符,缩略图数据库里存的路径是旧的,原图却还在,只是"搬家"了。对 17 图库这类以缩略图索引为核心的图片站来说,这种错位比彻底丢盘还难受——图没丢,但你看不见它。
我先说结论:恢复的第一步永远是重建索引,不是扫描扇区。
我把这个过程整理成一份对照表,条目按操作顺序排,每一条都对应一个具体的库表或文件路径。先看缩略图缓存目录 /var/cache/17tuku/thumbs/ 下的分片命名规则,再比对主库 gallery_index.sqlite 里的 asset_id 与 thumb_path 两列。如果两列的偏移量成固定差值,就说明是整卷平移而不是个别损坏,这决定了后面用脚本批量重写路径还是逐条人工修复。老周当时问了一句"能不能直接全量重新生成",我说不行,因为原图本身没有缩略图缓存那么快,4TB 的 JPEG 重新走一遍 libjpeg 解码至少要九个小时,而站点缓存过期时间是六小时。
顺带说一句,恢复过程中我用到的部分工具链和查资料习惯,和平时整理 qq浏览器换主页 时记的那些笔记是同一套思路——先定位状态,再决定动作。另外,缩略图库的重建脚本我参考了 49图库资料中心在线编辑器 里的一段 SQL 示例,改了三处才跑通。
个人观点,可能有人不同意:我认为 17 图库图片恢复这件事,九成的工作量不在"恢复"二字上,而在"确认恢复对象"上。很多教程一上来就推荐扫描扇区、跑 photorec,我不推荐这种做法。原因很具体——2026 年 6 月 14 日这次事故里,47 个文件夹、大约 18 万张图片,没有一张因为物理损坏而丢失,跑底层扫描只会把本来清晰的索引关系搅得更乱。先看清什么丢了、什么没丢,比急着"救"更省时间,也更安全。这个判断听起来保守,但在实际现场,老周按我的建议先停掉自动缩略图生成任务,省下的九个小时足够我们手工核对三遍目录。
停掉后台任务,先做映射表。这一步不能省。
映射表怎么做,我举个具体的:打开 49图库精准资料查询 里公布的旧版索引结构说明,把 17 图库的 gallery_index.sqlite 导成 CSV,用 Python 把 thumb_path 按分隔符切分,取第二段作为卷标,第三段作为目录,再和 df -h 输出的挂载点做 join。整个过程不长,但需要耐心。那天晚上八点二十,我跑完第一版脚本,屏幕上出现了 47 行匹配、0 行冲突,老周在旁边说了句"成了",然后我们才去楼下便利店买了两瓶水。这个细节我记得很清楚,因为那是当天唯一一个不带"恢复"两个字的时刻。
关于我
我是江晚,写东西的习惯是先列证据再下判断,所以这篇看起来像实验记录。
我在做「17图库图片恢复」这个站,专门整理图片库、缩略图索引和目录映射有关的恢复过程,每一条都尽量带上时间、盘位和具体命令。
起因是 2024 年我自己的移动硬盘出过一次一模一样的错位,当时网上能查到的教程大多停在"用软件扫一遍"这一步,没讲清后面索引怎么重建。
所以站里的内容偏向操作顺序和校验数据,不太写"十分钟搞定"那种。如果你也在处理类似的问题,香港黄大仙66309论坛 里有一篇讨论旧卷标识别的帖子可以对照看。
恢复流程的后半段其实更琐碎。缩略图库重建完成之后,还需要确认原图的 EXIF 方向和缓存生成的缩略图方向一致,否则站内展示会出现横竖颠倒。那天我们抽了 300 张带旋转标记的图逐张看,发现 4 张方向不对,原因是 exiftool 版本不一致导致的 tag 读取差异。修正之后,我顺手把校验脚本挂到日常巡检里,每十二小时跑一次抽样比对。相关的浏览器入口和现场直播回放我整理在 49619浏览器打开49719入口 和 583333现场直播 两处,有需要对照时间线的可以翻一下。
方向校验这一步,多数教程会漏掉。
最后补充一点工具取舍。恢复脚本我最终写成了幂等模式,三个约束:不覆盖已存在且校验通过的缩略图;写库前先写临时表;失败回滚到上一次备份的 gallery_index.sqlite。这个思路和 六合宝彩库 里一篇讲备份策略的旧文一致,只是那篇用的是 MySQL,我这边是 SQLite,事务粒度不同。整件事做完是 6 月 16 日凌晨一点四十分,总耗时约 31 小时,其中真正"恢复"数据的部分不到两小时,剩下的都在核对和校验。
核对与善后(3 则)
第一则:抽检比例定为 2000 张中抽 300 张,错误率低于 0.5% 才允许重新开启自动生成任务,这个阈值是参照 永不收费的网站 里一份 2025 年的图库运维记录定的,数字不算权威,但够用。
第二则:12 个隐藏目录里有一个名字是 .thumbs_backup,里面躺着 2024 年 11 月的旧缓存,没有纳入主库。老周说这些不参与展示,我们确认之后单独打包留存,没有删除。
第三则:恢复完成后我把整个流程写成 21 页的 Markdown,存放在站内知识库,带时间戳和命令原文。写的过程本身也是二次校验,因为很多默认参数在记录时才暴露出来。
作者:江晚 · 发布于 2026-07-26 · 约 3100 字