第五十五章 · 两清¶
三月十五号早上九点四十一分,安全合规工单 SEC-20270312-0031 被驳回。
批语一行:「事件描述缺少资产责任主体。请补充责任人姓名与工号,二十四小时内重新提交。」
陈稳把工单展开,找责任主体那一栏。登记使用人:孙宇,离职十四个月。二月盘点签字:张毅,上周五最后一个工作日。系统要一个在职的名字,而跟这台机器有关的两个名字,都已经不在花名册里。
纪衡提交工单的时候说过,范围一台设备、一段流量,不带人名。系统比他先破了例。
陈稳截了屏发给纪衡,正文一行:「安全部要责任人。写谁。」
九点五十八分,纪衡回:「写我。工号 0417。」
名字和工号填进去,另附一句说明:登记人已离职,设备封存待查,责任暂时上移。十点零二分重新提交,十点十四分受理。系统自动给工单挂了个黄标:责任主体与资产归属不一致,转人工复核。
记事本新起一行:
SEC 工单责任人:纪衡。他把自己的名字,放在那台机器底下。
上午剩下的时间,陈稳把那两件事并排写在一张纸上,画了个十字。左上:3.8 GB 去向境外网盘,密文,内容未知。右上:系统要责任人,纪衡把自己的工号填了进去。左下:三个月里,这台机器只发起过两回主动连接,一回上传,一回查询,都挑在组里人心浮动的时候。右下:能靠近那台机器的人,越来越少,每走一个,窗口就窄一寸。
他盯着右下那一格看了很久。这不是四个问题。这是一张收网的时间表,收网的人还没露面,网先收紧了。
有一件事他现在就能做,但还没做:给那张快照表再上一次 hash 校验,接进每日巡检。做这件事要动归档库,动了,纸面上会多一条他自己的操作记录。他把它写进待办,排在周三。
十点四十,周其正到岗。
工位分在王磊斜对面,显示器是蒋辉留下的那一批里的一台。王磊把三条便利贴原样留着,「口头的话,人一走就死」在最上头。
周其正读完,问王磊:「这是守则?」
「交接守则。」王磊说。「写的人上周还在。」
「那当遗训用。」
陈稳给他排第一周的活:差异通知改造的模板,先拿汇金线试,马菁那边打过招呼;差异单快照表的结构,今天过一遍;三月十六迁库夜,他盯差异。
周其正翻差异单快照表翻到一半,抬头:「这四千四百一十二笔,通知改造以后,第一批发给谁。」
「汇金。马菁。」
「发之前,把八月到现在的数先整份给她。」周其正说。「人家五年的对账岗,头一回从系统侧拿到证据,别让第一封信就是一张账单。」
「按这个办。」
下午两点预演,校验脚本跑 2023 年 6 月的分片,报差 214 笔。周其正把差异单导出来,从头翻,翻到第四十一笔停住。
「不是丢数据,是状态字段。」他说。「2023 年状态枚举有七种,第七种叫『审批驳回』,后来并进『已撤销』。映射表只写了六种。」
「你怎么知道有第七种。」
「我做过两年人工对账,2023 年的单子我一张一张过。审批驳回的单子不走钱,走流程,票面跟撤销长得不一样。」
映射表补一行,重跑,差异归零。
王磊在旁边说:「他做人工对账的时候,一天两千条,做了两年。」
「所以别拿枚举表骗我。」周其正把脚本合上。「枚举表是后来的人写的,单子是最早的人开的。」
散会前,周其正把玻璃板下压着的 runbook 第三页抽出来,指着那行回退线。
「单日差异超五十笔,冻结切实时。五十笔,怎么来的。」
「拍的。」
「拍的可以上线?」
「可以。夜里我在线,不对就冻结。」
「那你一晚上不能离屏。」周其正把页纸放回去。「我把五十笔变成算出来的,你就可以只在线半小时。」
下午他把周报模板抄了一份,照着王磊带新人的那套填。最后一栏他空着,问陈稳:「这栏什么时候写。」
「答不上来的时候写。」陈稳说。「把问题原样放进去。放进去了,下周就有人答。」
周其正想了想,写了一行:「八月一日配置变更与索引删除间隔五分零一秒,先改配置再删索引,顺序反常。索引删除对自动核销没有依赖,为什么先删。」写完,他存了草稿,没有提交。
「周一再发。」他说。「有些问题,放一周,答案自己会走到门口。」
陈稳把这句记下了。周其正留问题的手法,跟留证据的手法,是同一双手。
三月十六号晚上九点五十,三楼机房外的值班位。
调度平台上,迁移任务排着五十一片,按月切,2023 年 1 月到 2027 年 3 月。源表两亿零一百八十四万行,一百二十 GB,走内网专线。窗口二十二点到一点,王磊盯前半程。
十点整,启动。窗口内历史表转只读,新写入先进消息队列,迁完回放。进度条一格一格往前爬,速率稳在每秒四十兆。
二十三点零七分,速率掉到十一兆。
赵岩在电话里查了两分钟:「专线同跑着一个备份任务。财务共享中心的月结备份,排期每月十六号二十三点起,创建于 2024 年 11 月,负责人栏空白。」
「又是没人认的排期。」陈稳说。「停得掉吗。」
「停不得,财务月底要用。能限速,压到五兆,凌晨四点前完得成。」
「压。」
速率回到三十四兆。进度条继续走。
周其正在另一台屏幕上盯差异比对的预跑。十二点过十分,他递过来一页纸。
「五十笔,我给你换成算出来的。日均写入三万笔,五十笔是千分之一点六七。近两年单日差异率,中位数千分之零点四,P97 千分之一点五。这根线画在历史分布外面,压得住,不算宽得离谱。」
陈稳把这段写进 runbook 第四页,打印出来,压在玻璃板下,跟第三页并排。
「半小时的活。」他说。
「你欠我一顿夜宵。」周其正说。「我在数据平台半年,没人为一句话请我吃过东西。」
「记在迁库夜账上。」
十二点五十八分,三段全绿:搬运完成,行数 201,847,662,两侧一致;金额累计到分,两侧一致;最大主键一致。增量回放 1,447 条,一点十九分清零。
王磊在交接本上写:五十一片,零红。笔顿了一下,又补一句——214 笔差异系映射漏项,非数据问题,周其正发现。
回放清零之后,陈稳让双写挂上,先不切。新链路接单,旧表继续进,两边的数一秒一秒对着走。他调出比对视图:两侧延迟三秒以内,差异栏空着。
周其正把泡面汤喝完,说:「我以前人工对账,最怕迁库。今天这台机器替我熬了四年的班,总算有人替它搬家。」
「以后它自己搬家,不用人盯。」
「迁移这个动作,永远要人。」周其正说。「机器只会照脚本走。脚本没写到的,才叫事故。今天那 214 笔,脚本没写第七种状态。写脚本的人不知道有第七种,因为枚举表上没有。」
「枚举表也是人写的。」
「对。所以最老的那批单子里,藏着最多的『当年』。」周其正把筷子折断扔进面桶。「我明天把 2023 年全年的单子再扫一遍,七种枚举,一种一种对。扫完给你个准数:历史里还有多少个『当年』没进映射表。」
一点四十,机房空调停了。三个人下楼。夜里三点,赵岩的巡检消息进来:专线备份恢复全速,四点零二分完成。
第三天早上,陈稳把日历翻到三月十六那格。「别出错」三个字后面,他添了两个字:没出。
周其正的周报当天下午进了系统,那行草稿原样提交了。抄送列表里,纪衡的名字在第一个。十分钟后,纪衡的批注下来,只有四个字:
「为什么先删。」
批注下面没有人回答。这个问题在系统里挂着,像一枚钉进去的钉子,谁路过都得看它一眼。
三月十七号,双写第一天。
差异九笔,全部归因撤销状态的时间差,回放后归零。
下午四点,安全合规二组的初报进来,赶在响应时限内:TLS 客户端指纹为 rclone 1.63;上行分片 64 MB,共 61 片;对端网盘账号为匿名注册,调取内容需跨境司法协助,周期以月计。末尾一行小字:如需加快,可提供发起端同步工具的配置凭据。
陈稳把初报转给纪衡,加了一句:「密钥应该就在那台机器里。」
纪衡的电话直接过来。
「在哪。」
「库里那台。rclone 的配置文件,要是在,就在那块盘上。」
电话里停了两秒。
「所以更不能动。」纪衡说。「钥匙在锁里,撬锁的人比钥匙先到就行。」
「资产清退呢。」
「走到物理处置那一步,盘要消磁,处置方式要登记使用人确认。孙宇签不了,流程会往下落,落到盘点签字人头上。」
「张毅。」
「到那一步,他自己会来找我们。」纪衡说。「钥匙还没到锁跟前,别先撬。」
挂了电话,陈稳登资产门户。TPL-TC-0342,状态「待处置」,现场核验预约三月二十四日,处置意见栏空白。
记事本补一行:
处置意见栏空着。轮到落笔的人,还没出场。
他把快照表的 hash 校验挂进了每日巡检,commit message 写:chore: 快照表每日校验——4,412 行,96,340.00 元,变了就响。 比待办里的周三早了两天。校验任务跑完,绿。
傍晚六点半,他爸来电话。
「厂里今年稳不稳。」
「稳。」
「小何来过电话。」他爸说。「说了你们的事。她说不怪你,是排期的问题,不怪你。」
水壶在灶上响。陈稳把它提下来。
「她还说,问你药吃没吃。」
「吃了。」
「那就行。你们大人的事,自己拿主意。厂里忙,忙你的。」
挂了电话,陈稳把水灌进壶里。何晚说过,爸那边她来打招呼。她真的打了。打招呼的内容里,有药。
三月十九号,蒋辉最后一个工作日。
他的工位下午就清完了,两只纸箱摞在过道边,箱子上没有写字。排班规则留在系统里,运维手册的纸质版上个月就交了。五点四十,茶水间只剩他们两个人。蒋辉给自己接了杯咖啡,顺手给陈稳也接了一杯。
「说话算话。」蒋辉说。「三月十九。」
「说。」
「十二月二十一号凌晨,P1。我跟纪衡说是我处理的。」
「处理的是复盘。」陈稳说。「修复的不是你。」
「我写复盘,要调堡垒机会话录像。」蒋辉说。「我的会话调完了,隔壁时段有一条你的。查 POD 环境变量,改回调地址,都在。最后两行,是把这两条从 history 里删掉。」
咖啡机在后台响,跟去年冬天一个声。
「那两帧,我当天就截下来了。」蒋辉说。「存在我自己电脑里,三个多月。」
「为什么不说。」
「说出来,对你没好处,对我多一张牌。」蒋辉说。「你说你欠我两次。这张牌比那两次都重。我一直没打。」
「那现在为什么说。」
「昨天清电脑,我把截图删了。」他说。「牌不能带去新公司,也不能烂在手里。删了就得说,这两件事只能一起做。」
陈稳端着杯子。那两行命令他记得。删之前他在屏幕前坐了十分钟,删完去食堂吃了早饭。他以为这件事只有一个人知道。现在是两个。明天起,又只剩一个。
「我不是来还人情的。」蒋辉说。「人情还不清,我早说过,欠着才有人记得。我是来交接的。你那天凌晨做过的事,我做过不止一次。你要是觉得自己跟我们不一样,这三个月你就栽了。我们没有那么不一样。」
「知道了。」
蒋辉把咖啡喝完,杯子冲了,倒扣在沥水板上。
「auto_brief 我抄走的那份跑通了,新公司下周五上线。」他从口袋里摸出一张便签,压在隔板上,一串邮箱地址,不是恒澜的域。「数据对不上,我第一个找你。用不上最好。」
纸箱推走了。茶水间的灯是感应的,人少了,一半先灭。
陈稳回到工位,翻开记事本:
3 月 19 日。蒋辉最后一天。P1 那两行 history,他存了三个月,删了,说了。
他说我们没有那么不一样。这句话我不打算还给他。
他删牌,是为了说这句话。我删那两行,是为了什么。
第三行写完,他没有划掉。笔帽合上,按了两下。
陈稳把便签收进抽屉,跟胃药放在一层。
十点四十一分,赵岩的消息进来。
「告警响了。二十一号口。」
「多大。」
「上行 6 KB,下行 464 KB,两分五十秒。TLS,对端是境内一家云厂商的 CDN。」
「有人登录吗。」
「没有。最后一次登录记录还是三月十一号的 console。流量是机器自己发起来的——像个定时任务,到点了,伸手出去拿了个东西。」
陈稳把消息读了两遍。三月十一号,它往外搬了 3.8 GB。今天,它伸手回来取。上周五张毅走了,今天蒋辉走了。这台 10.14.1.88 的物理载体,挑在今天夜里动。要么是巧合,要么它在数着谁还在。
「电别断,告警别停。上行下行两个方向,原样导出,二十分钟到我。」
「这有什么好看的,明早看不行?」
「它在等人走光。」陈稳回。「我也想看看,它数的是谁。」
「那台机器落灰十九天,你早不查晚不查。」
「三月十一号它往外搬了 3.8 GB。今天它伸手回来取。」陈稳回。「搬走的东西,只有两种人会回来查:销毁证据的人,和留底的人。」
「万一是第三种呢。」
「第三种是什么。」
「回来看一眼的。」赵岩说。「跟人一样。走之前,总有人想回头看一眼。」
胃药在抽屉最外层。他倒出一粒,干咽了。玄关的鞋架上,四百八那双皮鞋在最上层,鞋油的光还没暗。他换上鞋,关了厨房的灯。
← 第五十四章 沉默 · 目录 · 第五十六章 核验 →