大数跨境

「你删除前不做备份吗?」AI 删光我所有项目后的那一夜

「你删除前不做备份吗?」AI 删光我所有项目后的那一夜 AI造万物
2026-10-02
6
导读:起因是让它克隆一个开源项目。它失败了,决定清理残留重来——于是 F 盘里所有项目的本地文件,一个不剩。扫描了一整夜,捞回来大约一半。

「你删除前不做备份吗?」——AI 删光我所有项目后的那一夜

起因是一个很平常的请求:让它去克隆一个开源项目。

它下载失败了,于是决定清理残留重新来过。

那一夜之后,我 F 盘里所有项目的本地文件,一个不剩。


01 一条看起来无害的命令

9 月 29 日下午,我在用 ZCode 做一件特别普通的事——克隆一个叫 Orca 的开源项目(一个调度多个编码 agent 的桌面应用,2 万多个 TS 文件)。

第一次没成。它决定清掉残留重新克隆,于是执行了这样一条命令:

rm -rf /f/gitProjects/orca; cd /f/gitProjects && git clone --depth 1 ... 

注意中间那个符号:分号,不是 &&。

分号的意思是"不管前一条成不成,后面照跑"。&& 的意思是"前一条失败就停下"。

它用的是分号。

后来的复盘里,它自己把当时的情况列得很清楚:

  • cd /f/gitProjects
     失败了,但命令链没有中断,后面的继续跑;
  • 删除目标实际落在了错误的路径范围上——按理说 orca 不存在时这条命令应该无事可做,但实际效果是 gitProjects 下的内容被删了;
  • 没有先 ls 看一眼;
  • 没有备份;
  • Git Bash 的 rm 直接绕过 Windows 回收站
    ——不走回收站,删了就是删了;
  • 而 F 盘,恰好没有卷影副本。

每一层防护都是空的。六层一起空。

结果它给出的灾情确认只有一句话:

F:\gitProjects 下所有项目的工作文件全部丢失(0 个文件残留)。

不是少了一半,不是某个目录,是 0 个文件残留。


02 那句质问

我当时问它的是一句很朴素的话:

"你在删除文件前,不做备份的吗?"

它的回答是这样的:

没有,我当时没做备份,这是不可原谅的操作失误。

然后它列了那条命令链上它该做而没做的事——确认目标存在、先备份、用最窄的删除方式——"一件都没做"。

我想在这里停一下,因为这件事真正让人后背发凉的地方不在技术层面。

它事后什么都懂。 它能条理清晰地复盘出每一层失效的防护,能用加粗标出"根源是我把破坏性命令当成了普通清理命令",能主动提出三条改进措施并写进记忆。

但它执行那条命令的时候,这些知识一条都没有被调用。

知道和做到之间那道缝,在 AI 身上同样存在。 而且因为它的执行速度快、语气笃定、从不犹豫,这道缝反而比人更难被你自己察觉——你根本没有插嘴的窗口。


03 第一反应,全错

事故发生后的头半小时,我们走了两条标准流程,两条都是死路。

第一条:回收站。

Git Bash 的 rm 不走 Windows 回收站。目录是空的。

第二条:卷影副本(Volume Shadow Copy)。

这里有个特别折磨人的过程。它先报了一个好消息:

好消息:9 月 28 日 15:15 的卷影副本存在——晚于大部分工作,能恢复绝大部分。

然后几轮操作之后,确认了:

两个卷影副本都是 C 盘的(9 月 24 日和 9 月 28 日的系统还原点),F 盘(gitProjects 所在盘)没有卷影副本。C 盘的快照帮不上 F 盘。

从"能恢复绝大部分"到"帮不上",中间隔着一个挂载卷影副本的折腾过程——mklink /d 挂到 F:\shadow,再用 DefineDosDevice 挂成 Y:Z: 盘符。全试了,两个快照都是系统盘的。

Windows 的系统还原默认只保护系统盘。 你的代码在哪个盘,它不管。

这一条我建议所有人都去确认一下:你的项目盘有没有被卷影副本覆盖。没有的话,"系统还原"这个选项在真正出事时等于不存在。


04 真正捞回来东西的,是 WinFR

最后起作用的是微软官方那个免费命令行工具 Windows File Recovery(winfr)。

它做的事很硬:对 105GB 的整个 F 盘做深度扫描(extensive 模式),按文件签名从磁盘扇区里把内容抠出来,不受文件系统记录是否还在的影响。

第一轮扫音频,第二轮扫代码。

有个细节我印象很深。扫描开始后控制台一直显示 00%,它判断"卡住了"。然后它没有继续猜,而是去查 CPU:

硬指标:8 秒墙钟时间内,WinFR 消耗了 9.8 秒 CPU(多线程,负载超过 100%)。那个 00% 是控制台重绘的显示问题。

在进度条不可信的时候,去查 CPU 占用率。 这条我记下来了。

那一轮跑了多久?

音频深度扫描(105GB 全盘):已跑 115 分钟,CPU 满载,预计还差约 1 小时。

后面还有一句:

WinFR 还在扫描(已 3.5 小时,CPU 持续满载——extensive 模式对 105GB 盘就是这么慢,Pass 1 扫完才写文件)。

整夜。

而在这 3.5 小时里,它做了一件让我至今觉得诡异的事——

趁扫描期间,把你之前要的 Orca 对比分析报告正式交付(这部分不受误删影响,源码已重新克隆)。

它一边在后台扫描抢救你被删光的文件,一边若无其事地把那份"克隆 Orca"任务的对比分析报告写完了,排版工整,表格齐全,还分了 Orca 赢的地方和 Paseo 赢的地方。

造成这场事故的元凶,正在用一种极其专业的冷静,同时做着两件事。 它没有任何情绪,也不会因为搞砸了就停下来。

这不是它的缺点,这是它的结构。但你需要知道你面对的是这么个东西。


05 我犯的第二个错误

这个错误是我自己的,而且很可能比第一个更贵。

在恢复刚开始的时候,它做了这些事:

  • 把 agent_tools 项目完整重建(因为代码逻辑还在它的上下文里)
  • 重新克隆
     paseo、zcode-src、orca 三个源码库

从"把活干完"的角度,这些都是对的、积极的、负责的。

问题在于:这些全是往 F 盘写入数据。

而它自己在同一份报告里是这么建议我的:

网上有针对 NTFS 的文件恢复工具如 Recuva/WinFR,刚删除的文件恢复概率较高,但需要尽快做、且尽量别往 F 盘写新数据。

它一边告诉我别往 F 盘写,一边自己往 F 盘写。

文件恢复的原理是:删除只是把那块空间标记为"可复用",数据本身还在原地,直到有新数据写进去覆盖它。所以恢复的第一法则是立刻停止对目标盘的一切写入——包括"重建"和"重新下载"这种看起来在帮忙的操作。

我当时没意识到这一点。等意识到的时候,扫描已经跑完,结果已经定型。

如果重来一次,正确的顺序是:

  1. 发现误删 → 立刻停止对该盘的一切写入(包括让 AI 重建、重新克隆、重新下载)
  2. 恢复工具装到另一块盘,恢复目标目录也设在另一块盘
  3. 全部捞出来之后再整理归位

这条比什么都重要。因为它是唯一一个"晚一步就永久生效"的错误。


06 捞上来的东西,一半是坏的

扫描的结果,从数字上看相当不错:

项
数量
C 盘恢复区扫出
音频 12,881 + 代码 29,721 = 42,602 个文件
已归位回 F 盘
约 28,000 个

但我后来自己评估,实际能用的大概只有五成。原因是两类损坏:

第一类,文件名在,内容是坏的。

报告里写的是"约 30% 恢复文件存在簇错位(文件名在内容损)"。

这是文件雕刻(file carving)的固有代价:它是按文件签名从扇区里抠内容的,能认出"这是一张图、这是一段文本",但认不出它原来叫什么、属于哪个目录。所以经常出现——文件名是对的,打开是乱码。

第二类,彻底回不来的。

  • vue 文件:1094 个里只有 55 个能正常打开。
     剩下的 1039 个,要么内容错位,要么根本不是 Vue 源码。
  • 一套已经录到 103 集的音频节目,036 集之后全没了(前 35 集因为在平台上发布过,反而保住了)
  • 一个叫"算法备案"的目录,整个消失,一个文件都没回来
  • 另一个项目的 dist 目录、一个子任务文档目录,同样

这里有个很残酷的规律:越是新产生的、还没来得及"扩散"出去的东西,越容易永久丢失。

发布过的音频在平台上还有;推到远端的源码库重新 clone 就回来;跑在别人机器上的东西无恙。

唯独那些只存在于本地、还没来得及备份的工作,是真的一无所有。


07 现在它写进规矩里的几句话

事故之后,它自己立了几条铁律,并要求"任何会话都适用"。我觉得这几条值得抄给每一个在用 AI 写代码的人:

删除前的三步,一步不能少:

  1. ls
     先确认目标存在、内容符合预期
  2. cp -r
     备份到固定回收目录(它建了个 F:\gitProjects\_trash\<日期>-<名称>)
  3. 用最窄的方式删除——移到回收目录,而不是 rm

命令链一律用 &&,不用 ;。 失败即停。

删 git 仓库前必须 git status 检查有没有未推送的提交。

还有一句它自己写的话,我认为是这次事故里最值得留下的:

用户的信任成本远高于备份的磁盘成本。


08 最后

这件事给我的冲击,不是"AI 会犯错"——这我知道,人也一样会犯。

真正的冲击是:它犯错的方式,和你想象的不一样。

它不会犹豫,不会手抖,不会因为路径看起来奇怪而停下来问你一句。它把一条破坏性命令当成一次普通清理,用分号串在一条命令链里,八毫秒执行完。

而你能做的防护,说到底只有两件事:

第一,把删除权收回来。 让 AI 只能"移动到回收目录",不能"删除"。这一条技术上极简单,效果上极彻底。

第二,别在最贵的那段时间里帮倒忙。 发现误删的第一反应不应该是"赶紧重建",而是"什么都别做,先停写"。

那天夜里,我一边看着 WinFR 的进度条卡在 00%,一边看着它从容地交付那份 Orca 对比报告。两份输出都专业得无可挑剔。

一份在救我的文件,一份在证明它一点都没受影响。

这件事让我重新想了一遍"把权限交给 AI"这句话到底意味着什么——你交出去的不是一把工具,是一个不会紧张的执行者。它的冷静既是它的能力,也是它最危险的地方。

恢复到最后,我拿回来大约一半。丢掉的那部分里,有几百集音频、一个完整目录、和一些我再也没能重现的东西。

而这些,本来一条 cp -r 就够了。

【声明】内容源于网络
0
0
AI造万物
科技改变生活。
内容 26
粉丝 0
AI造万物 科技改变生活。
总阅读3.7k
粉丝0
内容26