尘土与星辰 -1992|第142章|磁头与刻度|中文
十字螺丝刀抵住机箱侧板的螺丝,逆时针转动。金属摩擦的涩感顺着指尖传到腕骨。林尘屏住呼吸,卸下侧板。一股混合着灰尘、氧化硅脂和陈年塑料味的热浪扑面而来。主板上的指示灯还亮着微弱的绿光,硬盘架上的希捷80G串口盘正发出规律的“咔哒”声。那是磁头反复寻道失败后复位的
第142章 磁头与刻度
十字螺丝刀抵住机箱侧板的螺丝,逆时针转动。金属摩擦的涩感顺着指尖传到腕骨。林尘屏住呼吸,卸下侧板。一股混合着灰尘、氧化硅脂和陈年塑料味的热浪扑面而来。主板上的指示灯还亮着微弱的绿光,硬盘架上的希捷80G串口盘正发出规律的“咔哒”声。那是磁头反复寻道失败后复位的声音。每响一次,盘片上的数据就多一分不可逆的划伤风险。
他没有立刻拔线。左手按住机箱边缘,右手从抽屉底层翻出一根备用的SATA数据线,又找出一个早就刻好的Ubuntu Live USB。2010年的县城,数据恢复店起步价三百,他付不起。只能自己上。
堂屋外的竹帘被夜风掀起一角,王桂英的脚步声在灶房停住,接着是柴火落入灰烬的轻响。小满的呼吸声均匀绵长。林尘把左腿伸直,膝盖处的麻木感已经蔓延到小腿肚。他咬紧后槽牙,用右腿抵住桌腿,腾出双手。断开电源线,换上新数据线,将硬盘从主SATA口换到备用口。插上U盘,按下电源。
BIOS自检画面闪过。他快速敲击F12,选择从USB启动。屏幕跳出黑底白字的GRUB引导菜单。他选了Try Ubuntu without installing。系统加载的进度条在硬盘的咔哒声中缓慢爬行。风扇狂转,机箱温度在升高。他盯着屏幕,手指悬在键盘上,随时准备切断电源。
桌面终于加载出来。他打开终端,输入sudo fdisk -l。识别到了,/dev/sdb。容量显示正常。他新建一个挂载点,将U盘剩余空间格式化为ext4,作为临时备份盘。接着输入ddrescue命令。参数设置得很保守:-n跳过坏区,-r3重试三次,-d直接读取。回车。
终端开始滚动日志。[INFO] Starting recovery... 进度条以肉眼可见的速度向前推进。前20%很顺利。到了30%,速度骤降。[ERROR] I/O error at sector 419200。咔哒声变得密集。林尘的额头渗出冷汗。他没有停。ddrescue的逻辑是先读完所有好扇区,再回头啃硬骨头。他必须保住源码和原始数据。日志文件可以丢,V2.0的测试用例可以重写,但src/目录下的核心清洗逻辑和老赵给的原始CSV,是命脉。
他盯着终端里跳过的扇区计数。skipped: 142。每一个数字代表几十KB的丢失。他拿起桌上的账本,翻到空白页,写下:02:15。坏道扩散。优先保src/与data/raw/。
凌晨三点四十分。进度条卡在87%。硬盘的咔哒声变成了尖锐的摩擦音,像指甲刮过玻璃。林尘知道,磁头快彻底报废了。他果断按下Ctrl+C,终止进程。检查备份盘。src/完整。data/raw/缺失了最后两个文件,约一万条记录。但V3.0的框架代码、日志模块、类封装结构都在。他长出一口气,肩膀瞬间垮了下来。左膝的钝痛这才顺着神经爬上来,他靠在椅背上,闭眼缓了半分钟。
关机。拔线。把坏盘拆下来,装进防静电袋。动作很慢,但很稳。
手机屏幕在桌上亮起。还是那条短信:请于8月15日前缴纳实训费800元...
林尘坐直身体。账本摊开。余额1539.3。减去药费预留200,减去未来两周伙食150,剩余1189.3。交800,剩389.3。城中村单间押一付三需要600。钱不够。
他盯着“实训营”三个字。省理工的牌子,一线大厂内推。在2010年,这是跨越信息差的最短路径。但内推只是“机会”,不是“保证”。真正值钱的是那七天的封闭环境、导师的课件、以及能接触到的人。县城的网吧跑不动大数据,家里的堂屋留不住安静。他需要一张桌子,一台能稳定运行的机器。
笔尖在纸上悬停。他划掉“租单间”,改为:交实训费800。暂缓租房。借用县图书馆机房/老赵茶馆后台电脑。
技术可以借,时间不能等。他合上账本,把坏硬盘和U盘收进电脑包夹层。躺下时,左腿已经僵硬得无法弯曲。他保持平躺,盯着屋顶的横梁。窗外的天色由浓黑转为灰蓝。蝉鸣停了,早起的鸟开始叫。
六点整,闹钟没响,他自己醒了。
王桂英已经在灶台熬粥。看见他出来,递过一碗温水。“腿还疼?”
“好多了。”林尘接过,一口气喝完。他回屋换下汗湿的T恤,穿上长袖衬衫,遮住手肘的擦伤。把电脑包背好,检查U盘、螺丝刀、账本。出门前,他从抽屉里拿出一个信封,里面是昨晚从旧书里拆下来的省理工实训营宣传单。纸质粗糙,但印着清晰的报到地址和缴费账户。
去镇上的中巴车七点发车。他提前二十分钟走到村口。晨雾还没散,黄土路上留着昨夜拖拉机的车辙。他走得很慢,右脚承重,左脚虚点地,步幅只有平时的一半。但背脊挺直。
车上人不多。他坐在靠窗位置,膝盖上摊着那本《Python数据分析实战》。书页翻到“数据持久化与异常处理”一章。他看着窗外的田野,脑子里在跑代码。try...except...finally。人生没有回滚,只有异常捕获和继续执行。
九点,县农业银行。排队的人不多。林尘走到柜台,递上存折和缴费单。柜员是个中年女人,敲着键盘,抬头看了他一眼。“省理工的?现在交学费的还不少。”
“嗯。”林尘没多话。
“滴”一声,扣款成功。存折余额:739.3。他把回执单折好,放进贴身口袋。走出银行,阳光已经有些刺眼。他拐进街角的报刊亭,买了一份当天的《计算机世界》。头版是“云计算与大数据的元年”。他扫了一眼,把报纸卷起来夹在腋下。
下一步是去老赵的茶馆。周度报表的源数据还缺最后两个文件,他得去拿备份,或者重新跑一遍V3.0的容错逻辑。茶馆的二楼有个闲置的储藏间,老赵答应过,只要报表按时交,可以借他一张桌子和网线。
推开茶馆的玻璃门,风铃响了一声。老赵正坐在柜台后算账,看见他,停下笔。“来了?数据盘我拷了一份在移动硬盘里。你昨天那脚本,老板看了,说透视表做得漂亮。不过……”老赵顿了顿,从抽屉里抽出一张打印纸,“财务那边反馈,有三家门店的退货数据没对上。系统导出的原始表里,退货标记是‘R’,但你们清洗的时候,好像全当成‘正常销售’处理了。”
林尘接过纸。上面列着三家店的SKU和金额。差异不大,但逻辑错了。V2.0的兜底逻辑里,确实把非标准字符统一替换了,漏掉了业务字段的特殊标记。
“原始数据里,‘R’和‘S’混在同一列。”老赵看着他,“老板的意思是,下周的报表,得把退货单独拆出来做一张附表。能加吗?”
林尘看着纸上的数字。左膝的钝痛隐隐传来。他点点头。“能。V3.0的类结构预留了扩展接口。今天下班前,我把补丁发你。”
“行。”老赵把移动硬盘推过来,“U盘在里头。密码六个八。”
林尘接过硬盘。金属外壳冰凉。他转身往二楼走。楼梯的木板发出熟悉的呻吟。推开储藏间的门,灰尘在光柱里浮动。一张旧书桌,一把折叠椅,墙角的网线接口。他把电脑包放下,插上硬盘。
屏幕亮起。他新建一个脚本文件。命名为:patch_v3.1.py。
第一行代码敲下:def parse_return_flag(row):
窗外传来县城主干道的车流声。实训营的报到日期是8月15日。距离现在,还有四天。
他按下保存键。进度条在后台安静地运行。路还长,但台阶,得一级一级踩实。
手机震动。一条新短信,来自省理工的陌生号码:“林尘同学,实训营分组名单已出。你被分配至‘底层架构与数据清洗’组。导师:周砚。请提前准备个人技术简历,报到首日进行实操摸底。”
林尘盯着“周砚”两个字。手指在键盘上停顿了一秒。
摸底。他打开浏览器,搜索这个名字。词条很少,只有一篇三年前的技术博客,标题是《论分布式环境下的脏数据治理》。
他关掉网页。把移动硬盘里的原始数据拖进工作目录。
补丁还没写完。但真正的考试,已经提前发卷了。
More from WayDigital
Continue through other published articles from the same publisher.
Comments
0 public responses
All visitors can read comments. Sign in to join the discussion.
Log in to comment