上周五下班,我兴冲冲点开Steam,准备安装新入库的《心灵杀手2》。游戏容量标着80GB,而我系统盘还躺着90GB的空闲。照理说绰绰有余,可刚点击“下载”没几分钟,进度条才爬到15%,系统就弹出了“磁盘空间不足”的红色警告。我点开Steam的下载管理器一看——好家伙,明明下载量才不到12GB,磁盘上却已经占据了82GB的空间。那一刻我对着屏幕愣了几秒,内心那股无名火“噌”地就窜上来了。
后来我才慢慢摸清楚,Steam在下载时并不是下载了多少就占用多少,而是会提前“画地为牢”,把你硬盘上整整一份游戏容量的空间给圈起来,然后再往里面填数据。这“分配空间占用下载”的机制,可以说让无数玩家又爱又恨。
预分配空间:Steam的“占车位”逻辑
很多人跟我一样,第一次遇到这个状况还以为硬盘坏了或者Steam出了bug。实际上Steam这么做完全是故意的。当你点击下载,Steam会立刻在磁盘上创建一个和游戏完整体积相等的空白文件(或者预先保留对应的簇),这叫作“预分配”。这样做的首要目的是保证数据写入时能够连续、不碎片化。Windows的NTFS文件系统如果在写入过程中一边分配新空间一边写数据,很容易产生大量碎片,日后游戏加载时就会因为频繁寻道而变得奇慢无比。预分配等于一次性把车位占好,后续的数据统统往这个固定的位置塞,磁盘的寿命和读取性能都能得到保障。
但这一个“车位”占下来,硬盘就瞬间少了80GB,哪怕才下载了10%,这80GB也不会再还给其他程序。因为Steam认为这些空间已经属于你那个游戏了,后续下载的每一个字节都要落进这个事先挖好的坑里。换个说法,Steam是用暂时的空间浪费,换来了长期的性能稳定。虽然理解归理解,可每次遇到硬盘吃紧的时候,这个机制还是让我挺憋屈的。
更新时的“双重占用”才是真正杀手
如果说首次下载的预分配还只是小打小闹,那游戏更新的空间占用才真叫“噩梦”。我印象最深的是《使命召唤:战区》有一次季中大更新,版本号后面跟着一个几乎等于重装的文件大小。Steam更新并不是直接覆盖旧文件,而是先在游戏目录旁边创建一个“staging”临时文件夹,把旧版本的所有数据复制一份进去,然后在临时副本上打补丁,打完了再替换回原目录。这样一搞,你硬盘上同时存着旧版一份(原目录)、新版一份(临时目录),再加上额外预留的补丁数据,空间占用直接翻倍甚至翻三倍。那次更新我就吃了亏,强行提示磁盘不足,我只能硬着头皮卸载了三个冷门游戏才腾出120GB的空闲去跑这个更新。
不止是《使命召唤》,像《绝地求生》《命运2》这些频繁更新的网络游戏,每次大更都像一次磁盘空间的极限挑战。Steam这么设计的初衷是保证更新过程的安全——万一更新崩溃或者下载损坏,还能退回到旧版本继续玩。这个理念没错,但落到我们普通玩家的硬盘上,就是一次次的“空间压榨”。
Steam为什么不能学其他平台“边下边写”?
我一度很羡慕Epic Games Store或者GOG Galaxy,它们似乎没有这种烦人的预分配机制,下载时占用空间和实际下载进度几乎同步。后来我了解到,Steam的预分配和分段下载机制其实很“古老”,早年机械硬盘是主流,连续的写入能极大减少坏道和碎片问题,Steam这套设计在那时候是绝对正确的。现在固态硬盘普及了,碎片对性能的影响已经微乎其微,但Steam为了兼容老硬件和保证跨平台的一致性,并没有彻底放弃预分配。加上Steam有着极其庞大的用户基数,任何改动都必须谨慎再谨慎。所以直到今天,这套“古老但可靠”的机制依然在运行。
我是怎么跟这个机制“和平共处”的
吃了这么多次亏,我也总结了一些应对办法。首先,我会用Steam自带的“转移安装文件夹”功能,把大型游戏挪到空间充裕的机械硬盘上,等着玩的时候再从机械硬盘复制回固态。Steam支持创建多个库文件夹,我把下载的默认位置设置在一块独立的数据盘上,系统盘只放操作系统和几个常玩的竞技游戏。这样一来,系统盘不会被Steam的预分配塞满,日常使用也不会受到磁盘报红的困扰。
其次,每次大型游戏更新前,我都会用WizTree检查一下磁盘占用,提前把那些“通关后再也没打开过”的游戏删掉或备份到外置硬盘。Steam的“清除下载缓存”偶尔也会帮点小忙,但它主要是清理一些临时文件,对于预分配的空间帮助不大。真正有效的还是手动管理,或者迁移游戏。
我也试过第三方工具如Steam Cleaner,它可以帮你清理多国语音包和多余的着色器缓存,但使用的时候要小心,别把重要的存档或Mod误删了。至于网上流传的“禁用Steam预分配”的注册表修改,我试过一次,结果游戏下载完成后完整性验证报错,被迫重新下载,之后我再也不敢乱动了。
关于增量更新的一点点期待
最近Steam已经开始小范围测试一种新的更新模式,据说是真正的增量更新——只下载文件变化的差值,不再需要先复制一份完整的旧数据。如果这个功能全面推广,以后更新时“双重占用”的老大难问题可能会得到很大缓解。不过目前来看,大部分游戏还是沿用老一套的更新流程。我参加过一次Beta测试,感觉变化并不明显,可能还需要几个大版本的迭代才能真正落地。
说实话,虽然每次碰到空间不够都忍不住骂两句,但站在Steam的角度想一想,它要维持全球数亿不同硬件、不同网络环境的用户体验,任何底层改动都需要时间来验证。预分配空间占用下载这个机制,就像厨房里的抽油烟机——噪音大,油网难洗,但没了它,整个屋子都会被油烟糊住。我们一边抱怨一边擦着额头的汗,却也知道它确实在保护着更重要的东西。