说起来有点丢人,我第一次意识到「预先分配」这回事,是在下载《荒野大镖客2》的时候。那游戏超过150GB,我满怀期待地点了下载,结果进度条就在「预先分配」卡了将近半小时。我又急又气,一度以为是Steam服务器崩了,还跑去论坛发帖求助。后来才知道,这个阶段跟网速没关系,完全是硬盘在「加班」。
预先分配到底在做什么?
简单说,Steam在正式下载前,会先开辟一块和游戏体积一样大的空间,并且把这块空间完全用「写一遍」的方式占满。这样后续下载过来的数据就能直接塞进已经规划好的位置,避免文件碎片,也提高读取速度。这有点像演唱会前先划好座区,每个座位都贴上名字,等粉丝来了直接对号入座——而不是到了现场再临时摆椅子。
但为什么一定要「写一遍」?直接创建一个空文件不行吗?事实上,Windows下创建一个稀疏文件或者快速分配空间(比如使用SetEndOfFile)可以瞬间完成,但这样的逻辑文件并非真正占用了物理扇区。一旦后续写入,仍然可能需要重新分配簇,而且如果中途断电或崩溃,容易留下空洞。Steam选择了最稳妥的方式:用实际数据去填充,保证每个字节都实实在在待在物理位置上。这也是为什么「预先分配」期间磁盘写入指示灯会一直闪个不停。
为什么卡住的总是我?
经过那次痛苦的等待,我把所有可能的原因都排查了一遍,它们大多和硬盘的写入性能相关:
- 剩余空间不足:Steam通常需要游戏体积的1.2倍空闲空间,才能正常预分配。
- 机械硬盘的宿命:HDD在写入大文件时,如果文件系统碎片严重,或者磁头需要频繁寻道,速度会慢得离谱。
- 后台程序抢资源:杀毒软件、系统更新,甚至OneDrive同步,都会与Steam争夺磁盘I/O。
- 驱动或固件问题:我曾试过更新主板芯片组驱动,也把硬盘接口从IDE改为AHCI,每次改动都带来一些差异。
- Windows写入缓存策略:在磁盘管理器里开启「更好的性能」并启用设备写入缓存,确实能缓解预分配的卡顿,但风险是意外断电可能丢数据。
我当时对照着排错,发现我的机械硬盘剩余空间只多了30GB,而且碎片整理报告碎片率高达15%。另外杀毒软件的正监控每个扇区的写入,让本已惨烈的磁盘性能雪上加霜。
我的解决之路
第一次尝试很简单:腾出更多空间。我把一些很少玩的游戏移到了移动硬盘,给系统盘(也是Steam库盘)留下了超过200GB的空闲。这次预分配速度快了一些,但依然需要几分钟。后来我索性换了块固态硬盘(SATA SSD),整个下载过程从预分配到最后安装完成,时间缩短了不知多少。
此外,我还做了一件事:把Steam文件夹加入了杀毒软件排除列表,并且关掉了一部分实时扫描。效果立竿见影,预分配不再卡在99%过不去。对于还在用机械硬盘的朋友,可能定期碎片整理、避免同时下载多个游戏,也能减少卡顿。
需要提醒的是,预分配也跟游戏本身有关。有些游戏体积小,或者文件结构简单,预分配只需几秒;但像某些自带大量加密文件或需要预先计算校验值的游戏,这个过程就会特别长。
另一种视角
现在每次预分配出现,我都会想起当初那个手足无措的自己。这种设计从用户表面看是「延迟满足」,但背后是对数据完整性的坚持。虽然有时不免急躁,但经历过一两次因断电导致的游戏文件损坏后,我开始理解为什么Steam要花这个「笨功夫」。
也许正因为这样,每次看到「预先分配」的进度条,我反而能静下心来倒杯水,听听音乐,等待那一声清脆的下载完成音。这不是妥协,而是一种默契。
