[控场AI]
· 5 分钟阅读· 2,655 字

Reddit网友想用WinRAR压缩系统盘,结果差点翻车

Reddit网友想用WinRAR压缩系统盘,结果差点翻车

Reddit网友想用WinRAR压缩Windows文件夹省空间,引出压缩技术四十年演进史。

文章从Reddit用户想用WinRAR压缩Windows文件夹的帖子切入,指出该操作虽被WinRAR允许却可能删除原文件、损坏系统。随后梳理压缩技术演进:早期为减少扇区内部碎片,tar将小文件打包共享空间;LZ算法通过寻找重复模式真正缩小数据;80年代Stacker结合两者实现全盘压缩,因硬盘慢反而提升读取性能。如今压缩已内建在文件系统和Compact OS中,但默认不开启,因为大量文件本身已是压缩格式,且存储成本极低。文章最后指出,该网友真正需要的是Compact OS而非WinRAR,且收益有限。

最近,一位Reddit用户NoDifference412在社区里分享了自己的“天才”想法:硬盘空间不够,游戏下不下来,删文件舍不得,买新盘又嫌贵,那为什么不直接把Windows文件夹压缩一下呢?点一下“添加到压缩文件”,等它慢慢压完,岂不是凭空多出一大块空间?

这个帖子很快引来了大量围观。懂行的人一眼就看出问题所在,但更让人意外的是,有科技博主真的动手测试了——结果WinRAR居然真的允许你这么做,它会一边抱怨某些系统文件正在使用中,一边继续把Windows目录里能碰的文件全部打包,甚至在你选错选项的情况下,压完就直接把原文件删掉。

好在博主及时踩了刹车,并顺势聊了一个更有意思的话题:压缩整个硬盘,到底是不是一个疯狂的想法?答案其实是否定的。但“不疯狂”不等于“值得做”。这背后的技术演变,比一个Reddit翻车帖要精彩得多。

磁盘上按扇区存储数据,存在浪费空间

压缩的起点:扇区浪费与tar的局限

要理解为什么有人会想压缩整个系统盘,得先回到数据存储的基本单位。磁盘被划分为一个个扇区,传统上每个扇区512字节,如今常见的是4096字节。扇区是磁盘上最小的可写单位,这意味着如果你要写入的数据没填满一个扇区,剩下那点空间就白白浪费了,通常被填零。

在硬盘只有10MB、20MB的年代,这种浪费是致命的。于是有人想到一个办法:把许多小文件打包成一个大容器,让它们共享扇区,减少内部碎片。这就是tar文件的核心思路——它本身不改变数据大小,只是把东西规整地装到一起。博主用了一个很形象的比喻:把袋子里的空气抽掉,能让冷冻室装得更满,但鸡肉本身并没有变小。

真正让文件“变小”的,是另一条技术路线:寻找数据中的重复模式。比如连续出现12个“red”,就记成“12个red”;或者更通用地,在文件里找重复的字节序列,只存一个位置标记。这类算法简单却有效,当年能把一个160KB的共享软件压到95KB,在1982年相当于省下近20美元的硬盘成本。

内部碎片与簇:扇区是物理单位,而文件系统通常以“簇”(cluster)为单位分配空间,一个簇包含一个或多个扇区。即便文件只占簇的一部分,剩余空间也无法被其他文件使用,这就是内部碎片。tar通过将多个小文件串成一个连续流,让它们共享簇,从而减少浪费,但代价是随机访问变差——要读取其中一个文件,可能需要顺序扫描整个归档。

LZ算法、Stacker与全盘压缩的黄金年代

几乎所有这些压缩格式,底层都建立在Lempel和Ziv提出的算法之上,这也是为什么大量压缩方案都以“LZ”开头。利益当前,专利和律师也随之而来,围绕GIF的商业使用曾有过一段法律上相当麻烦的时期,这反倒促成了PNG格式的诞生。

压缩格式大多建立在LZ算法之上

上世纪80年代初,一家叫Stack(带c)的公司把tar的容器思路和LZ压缩结合起来,做出了Stacker。它的做法是:先压缩文件,再把压缩后的数据包进一个虚拟硬盘容器里,整个过程对用户完全透明,效果相当于硬盘容量翻倍。更妙的是,当时硬盘速度只有每秒5兆比特左右,读压缩数据反而更快——读5兆比特,解压后进内存变成10兆比特。花点小钱还能加一块硬件压缩卡,进一步提速。

这个思路迅速普及。几年之内,全盘压缩几乎成了标配,被捆绑进各种DOS系统和早期Windows,通常能提供约2:1的存储比。当然,也有一小部分硬盘因此直接报废。

LZ算法的核心思想:LZ77用“长度-距离”对表示重复,即在滑动窗口内查找之前出现过的相同字节串,用(距离,长度)指向它;LZ78则构建字典,将重复出现的字符串编码为索引。二者都利用数据的局部重复性,实现无损压缩。现代变种如LZ4、Zstandard在压缩比与速度之间做不同权衡,广泛用于文件系统、网络传输和内存压缩。

为什么现在没人默认压缩系统盘了

今天,压缩能力已经内建在许多文件系统里。Windows 10和11甚至自带一个叫Compact OS的工具,专门用来压缩操作系统文件,用一点计算开销换回几个GB的空间。

现代设备算力充足,但压缩收益有限

那为什么不默认开启?博主的解释是:三十多年来,这笔账变了。我们依然面对大量小文件,但当年的.txt早已被.docx等格式取代,而这些新格式本身就是伪装成文档的zip包。网页端超过90%的站点都在使用某种压缩,很多是现代版的LZ变种。更关键的是,压缩有上限,越过某个点就会丢掉有意义的数据;而今天的存储便宜到离谱,为几KB的文档空间折腾并不划算。

那照片、音乐、电影呢?答案是你早就压过了。这正是无损与有损压缩的分野:无损算法可以完美还原原始数据,压缩比相对低,适合游戏资源或软件这类每个比特都重要的场景;有损算法则尽量只丢弃人耳人眼不易察觉的数据,JPEG、MP3、AAC、MPEG都属于这一类。它们已经压到接近感知极限,再压就明显掉质量了。

现代多媒体格式早已是有损压缩

Compact OS的工作原理:Windows 10引入的Compact OS使用类似WIMBoot的机制,将系统文件以压缩形式存储在单独的数据区,并通过重解析点让系统文件“看起来”仍在原位置。它采用XPRESS或LZX算法,压缩率约1.5:1到2:1,但会牺牲部分读取性能。用户可通过compact.exe /compactos:always手动启用,系统会根据磁盘类型和容量自动决定是否默认开启。

回到那位Reddit网友

所以,那位网友的思路方向没错,只是选错了工具。他真正想要的应该是Compact OS,而不是WinRAR。而且即便用了对的工具,收益也相当有限,因为他的硬盘上大部分内容——照片、音乐、视频、文档——早已是压缩过的格式,压不出多少空间。最多也就是让系统重新上线,好让他下单买一块更大的硬盘。

这个故事的有趣之处在于,它把一个看似愚蠢的提问,变成了一次关于压缩技术四十多年演进的梳理。Reddit上的建议不一定靠谱,但一个好问题往往比一个标准答案更有价值。

#WinRAR压缩系统盘#全盘压缩#Compact OS#无损压缩与有损压缩#LZ算法#Stacker#磁盘空间#文件压缩原理
分享:

相关推荐