文章的标题有点奇怪,其内容上也有不少值得商榷之处:
1:
Linux却在整个磁盘上存储文件,所以当文件的大小需要改变的时候,总是有足够的空间。
从数学上来说,只要你给定一个整数k,那么,一定存在一个整数k+1。
所以,根据以上数学定理,无论Linux为两个文件之间保留了多少预留空间,我总能把它填满并溢出……
使用预留空间的做法,只能说降低了发生溢出的几率,而不可能从根本上杜绝这个情况的发生。
至于文中一再强调的“20%”,只能合理的理解为:当磁盘剩余可用空间小于20%的时候,这种溢出的发生几率会大大增加,以至于到了不可忽视的地步。
事实上,MS的NTFS系统用的也是类似的方法,所以不要再抱着FAT/FAT32的老皇历来沾沾自喜了。
2:
第一,为什么类unix系统产生几十年了,没有人做一个磁盘碎片整理软件?而即使是到现在,在这个论坛上也没有朋友提到过遇到linux病毒,我们仍然能找到许多类unix杀毒软件?我就至少能列出3种免费杀毒软件。
第二,很多类unix操作系统都是长年累月不关机的,诸如银行、电信、军工等系统,你能想象它们停止磁盘读写,在长达几小时内进行磁盘碎片整理所带来的后果吗?这些机器的磁盘读写量可是比家用机大多了。
事实上,第二点正是出现第一点的原因。
为什么没有人在*nix中使用磁盘碎片整理软件?那是因为没有人愿意承受由此带来的后果。
为什么没人开发在*nix下的磁盘碎片整理软件?那是因为没有人愿意使用它。
道理是很浅显的,再举个例子吧:
先在美国在伊拉克弄的满头烟,那么它要是把在伊拉克的什叶派和逊尼派都统统三光了,伊拉克不就清静了?
它有这么多原子弹,有这么多的毒气、生化武器,能力绝对不是问题。
但是这么做而带来的后果显然是美国所不能承受,或者说不想承受的,所以它也就没这么做。
所以,当人们没有做一件事情的时候,往往是不愿意承担其风险,或者承受其代价,故而没有需求,也就没有动力。
而不是没有能力,或者真的不需要。
3:
文中一再强调:“内部碎片主要是造成磁盘空间的浪费”
而在它解释Linux为什么不会产生文件碎片的时候,却说Linux文件的存放机制是文件A、B是不会紧密相连的,中间会有一个“预留空间”。那么请问这个“预留空间”的存在会不会造成“磁盘空间的浪费”呢?
事实上Linux在这个问题上仅仅是投机取巧了一点而已:它没有了“簇”的概念,但是不等于它就真的没有了“内碎片”,只不过由FAT的“簇内剩余空间”的“浪费”变成了文件A、B之间的“预留空间”而已。不客气的说一句:那是换汤不换药。
另外,再说一下,FAT的磁盘空间碎片也不是一定有的,只要一个文件的大小增长还是在一个“簇”之内,其实还是不会产生文件碎片的,这个原理和所谓的“Linux不会产生文件碎片”的原理也是完全一样的。
4:
有没有真正没有文件碎片的磁盘文件格式呢?
有,当然有。所有(至少是大部分)一次性写入的格式都是这样的,例如说磁带机的顺序写入、CD/DVD上的文件格式(可能不包括DVD-RAM,因为那个是完全可随机读写的)、还有一些一次性写入的ROM之类的。
从逻辑上来说,只要支持随机文件读写删除的文件系统,就不可避免的产生文件碎片和空间浪费。
而且,从工程上说,“磁盘空间浪费”是为了尽可能减少“文件碎片”所采取的措施的副作用。从目前所有的主流磁盘文件格式来看,它们为了减少“文件碎片”而采取的方法和手段基本上都是类似的,无非就是利用预留磁盘空间,来减少因为文件大小增加所需要的重新分配。所以,在这个问题上,谁也无法独善其身,特别需要强调的是:所有的*nix所用的ext?系统,同样如此。
至于可怜的FAT/FAT32,只不过是它们出现的时间比较早,而且当时计算机的性能也不高,所以就采用了比较机械的“簇”的方式来实现这个功能,因而也被大家老拿来说事。不得不感叹:可怜的老前辈啊~