Nov 172013
 

Linux的宣传文章一直以来都在强调Linux的ext 2/3/4「不会产生磁碟碎片」,因此「不需要磁碟碎片整理」。无论是两岸还是全世界,都有这样的说法,在中文世界更为常见。在中文版Google中搜寻「Linux 磁碟碎片整理」(或者「Linux 磁盘碎片整理」),通常都会见到不少「解释」性的文章,说Linux「足够优秀得不会产生磁盘碎片」,或者「有优秀的机制尽量避免碎片产生」。但对此怀疑的人难道就没有吗?当然不是,只不过持怀疑观点的人不知道如何解释。若在英文版Google中搜寻“linux defrag”同样可以见到类似的文章,但有一点不同,那就是可以找到碎片整理工具!它的名字叫做“Linux File-system defragmenter”,可以在sourceforge.net找到(下文亦会提到)。

ext 2/3/4都是Linux最常用的FS (File System,档案系统/文件系统),ext 2于1993年1月正式被Linux采纳,ext 3与4分别于2001年、2008年正式推出。初代ext于1992年出现,只存在不到1年就被ext 2取代。换句话说,ext系列已被Linux使用超过20年,使用者产生疑问很正常。但可惜的是,能正视、面对的人实在不多,「卸膊」的人反而一大堆。或许叫「卸膊」不够合适,毕竟他们并非开发者而只是普通使用者,更合适的形容词应该会是「雄辩」。因为真正的开发者确实做到了正视问题,并予以解决。

那么ext到底会不会产生磁碟碎片呢?答案是:会。证据很多,其中一条就来自维基百科:ext3#磁盘碎片

在这里可以提取出几个关键点:

  • ext 2及ext 3都会产生磁碟碎片,有些时候甚至是快速产生碎片。
  • 可以使用碎片整理工具来重组,例如Shakedefrag,但使用在ext 3就会很容易出事。
  • 作业系统应该尽力消除碎片带来的负面影响,而不是自己附带一个碎片整理工具交由使用者自行解决。

产生碎片其实不难理解。例如频繁地在大档案的不同位置(尤其是中间)插入新的内容,特别是磁碟空间即将填满的时候,碎片就容易产生。要解决产生的碎片,在ext 2及ext 3的唯一办法就是重新复制(自从2011年出现Linux File-system defragmenter之后就不需要这样了)。

作业系统确实应该尽可能减少碎片的负面影响,例如使用高效率的演算法使用户感觉不到碎片带来的影响。因为这一切早就交由作业系统去管理,作业系统自己造成的「问题」不应由使用者承担,而应由自身尽力解决。早期的DOS及Windows在消除负面影响的演算法做得不够好,以至于要过一段时间就要使用专门的工具去整理碎片消除负面影响,这一习惯被长久地继承下来了。

当然了,虽然一般情况下ext的磁碟碎片不会很多,但若ext 2/3的使用者很介意碎片带来的负面影响(比如不满意少量的影响或者已经达到严重的程度),同样应该有自由选择权,使用专门的工具去整理碎片、重组空间。既然使用者确实有需要使用,就没必要千方百计大写文章去阻止。除了维基百科提到的Shake及defrag工具,还有一个叫做“Linux File-system defragmenter”的工具,在英文版Google中搜寻“linux defrag”即可见到。

实际上,ext的开发者亦注意到磁碟碎片的问题,并想办法解决这个问题。在ext 4当中,他们增加了一个新的功能,叫做「在线磁盘整理」(Online defragmentation)。有了这个内建的工具,即使出现碎片亦可以随时重组。其实这个工具就是e4defrag。当然,亦只限于ext 4。如果想在ext 3上使用碎片整理工具,那就要Linux File-system defragmenter了。

微软亦采用了类似的做法。由Windows 7开始,Windows就会自行整理磁碟碎片、重组空间,以消除碎片的负面影响。

一直以来,Linux社区总有不少比较极端的人,他们提出一些极端的观点去反驳使用者的需求,甚至出言阻碍自由使用权。比如这次所说的「磁碟碎片整理」,在他们的眼中,「尽力减少负面影响以至于使用者察觉不到」等于「感觉不到磁碟碎片」,「感觉不到磁碟碎片」等于「没有磁碟碎片」,既然「没有磁碟碎片」就不需要「整理磁碟碎片」。看不见的事情一定就不存在?不要太极端。

然后还有「Windows能做而Linux不能做的事就是不需要做的事情」(如果再激烈些的话,难保不出现「Mac OS能做而Linux不能做的事情就是不需要做的事」)。早期的Linux确实有很多事情没法做,但好在开发者不是狂暴分子,他们并不会如此极端粗暴地说「做不到的事情就是不需要做的」,相反,开发者会一直吸收别人的优点并不断地完善它,比如3D应用。以前很多厂商都未曾推出针对Linux的游戏,现在呢?游戏数量多得多,并且Intel与AMD还有NVIDIA亦推出了针对Linux的硬件驱动,虽然执行效率还不算高(落后于对应的Windows版及Mac OS版)。如果「不需要做」这一说法被开发者采纳的话,那么Linux就会止步不前、固步自封,这不利于发展。

这类极端的说法等于变相地阻碍使用者的自由选择权,还好的是总会有人为了使用自由而推出对应的软件,直接无视那些极端人士的说辞,使用户可以自由地使用自己想要的功能。特别是Linux file-system defragmentation的作者,还有各开发者的努力,他们做得真的很好。