tanzn78 发表于 2007-3-14 14:49

[原创]浅谈磁盘碎片

浅谈磁盘碎片

看到Vista的精华帖里面对磁盘碎片争论得热火朝天,我来浅谈一下磁盘碎片吧。首先磁盘碎片的多寡取决于文件系统的类型。有人问什么是文件系统,就是平常我们说的Fat32,NTFS,Ext2等。曾经有一种说法说Unix/Linux的文件系统不存在碎片,这种说法是不正确的!任何文件系统都存在碎片,所有的文件系统随着时间的推移都趋向于碎片化。问题在于哪种文件系统能在不影响系统性的前提下(或者找到平衡点),合理得避免碎片或者合并碎片。

碎片分为内部碎片,外部碎片和数据碎片(详见http://en.wikipedia.org/wiki/Fragmentation_%28computer%29)。我们通常讨论的碎片整理指的对象是外部碎片。外部碎片的产生原因大家是由于文件没有被连续存储,而是被系统见缝插针得存储在分区的不同地方:
在磁盘分区中,文件会被分散保存到磁盘的不同地方,而不是连续地保存在磁盘连续的簇中。又因为在文件操作过程中,Windows系统可能会调用虚拟内存来同步管理程序,这样就会导致各个程序对硬盘频繁读写,从而产生磁盘碎片。

Windows总是试图把文件存储在尽量靠近磁盘开始位置的地方,这导致当磁盘利用率变高的时候它经常会产生磁盘碎片。Linux却在整个磁盘上存储文件,所以当文件的大小需要改变的时候,总是有足够的空间。当然当磁盘利用率接近饱和的时候Linux也会需要文件整理。但是只要磁盘还有20%以上的可用空间,那么这种整理是基本不会发生的。所以说正确的说法是Windows所使用的文件系统更容易产生碎片,Linux也有文件碎片,但是不需要我们多去担心。(更多内容见http://forum.ubuntu.org.cn/about27451.html)

就是因为Windows的文件系统很容易产生碎片,所以微软要将碎片整理工具纳入系统。而现代的Linux/Unix文件系统不仅不容易产生碎片,而且引入了日志式文件系统的概念(journalling filesystems),更在很大程度上避免了系统突然断电或崩溃所造成的文件丢失或破坏。因此不需要专门的磁盘工具进行碎片整理。Linux下通常碎片整理的方法是将文件备份到存储设备,再从存储设备将备份文件恢复到硬盘上就完成了碎片整理。这个过程比较漫长,但是我们基本不需要进行这样的操作。

在争论的帖子里面提到了Mac OS X文件碎片的问题。众所周知,OS X基于Unix,所以它有与Windows相比更先进的文件系统(相当少的文件碎片)就不足为奇了。OS X默认的文件系统是HFS+,是改进了的HFS文件系统。“Mac OS X Internals”的作者Amit Singh为了探讨HFS+文件系统,开发了一个工具软件叫“hfsdebug”。在他在网站上有一篇文章对HFS+文件系统的碎片进行了详细的讨论(http://www.kernelthread.com/mac/apme/fragmentation/)。既然Linux,Unix和Mac OS X没有很多文件碎片的,所以没有必要象Windows一样,专门弄个碎片整理程序。Amit的文章指出Mac OS X确实有后台自动碎片整理,但是只在下列情况下发生:
On-the-fly Defragmentation

When a file is opened on an HFS+ volume, the following conditions are tested:

    * If the file is less than 20 MB in size
    * If the file is not already busy
    * If the file is not read-only
    * If the file has more than eight extents
    * If the system has been up for at least three minutes

If all of the above conditions are satisfied, the file is relocated -- it is defragmented on-the-fly.

实际的情况就是Mac OS X下碎片很少,只有这么点小活,没有必要像Windows一样开发一共碎片整理程序,系统在后台就给你搞定了。

关于Linux下日志式文件系统的选择,有一篇文章给大家参考:
http://www.debian-administration.org/articles/388
上文的部分中文翻译:
http://os.yesky.com/lin/474/2661474.shtml



aaa

[ 本帖最后由 tanzn78 于 2007-3-14 14:01 编辑 ]

茄子 发表于 2007-3-14 15:39

$支持$ $支持$ $支持$

糖醋黄花鱼 发表于 2007-3-14 19:51

$支持$ $支持$ $支持$

mymy365 发表于 2007-3-15 03:30

如果一个评论被带上了感情色彩就没有意义了。
如果一个硬盘的使用率总是在50%以下,那么你觉得是正常的吗?如果总是你需要100G空间,所以你得买一个200G硬盘,有意义吗?我这里50%是一个比方,没有任何的依据,可以任意批判。
关于虚拟内存的说法就有点。。。了.....是因为不断的读写所以造成磁盘碎片,还是因为文件不断的改变大小造成碎片?如果是不断的读写,那么BT一个东西,得造成多少磁盘碎片阿。。。。。你见过Pagefile总是不停的改变大小的吗?
Windows的磁盘碎片清理有些过度的被妖魔化了,试问究竟有多少人在XP之后的系统下清理过磁盘碎片?
我有一个硬盘(Win2003系统),从开始用,1年半的时间,160G的空间一直几乎是满的,文件当然一直在不停的变动,每天都有十几G的增加删除,但从未进行过碎片清理,速度从未有过任何影响。但最近却被迫做了一次碎片清理,因为我里面大约有近一万首KTV,上个星期跟国内做了一次同步更新,统计了一下,其中大约有3000来首的大小改变了,其实每首歌可能改变也就是几十K,但是。。。产生了大量的碎片,使得硬盘读写速度严重下降,只能做碎片清理。
其实这种情况,在任何一种文件系统下,问题都会存在。而且,这样的情况更接近于很多用户的实际情况,塞得满满的硬盘,有歌曲,有照片,有电影,有视频。。。。。
当文章试图用更简单的例子来说明情况是,其实它悄悄地把事实情况也简单化了。想一想,如果用户都是买400G的硬盘,只是存40G的东西,400G的硬盘真能卖出去那么多吗?想一想,如果真的存了东西就不改了,那直接刻盘好了。想一想,有几个用户的硬盘能迁就举例当中,Linux或者Mac的那么的理想化的存储。

从不迷信任何专家,任何权威。

tanzn78 发表于 2007-3-15 11:26

回复 #4 mymy365 的帖子

如果一个评论被带上了感情色彩就没有意义了。
我的评论没有感情色彩,因为我Linux和Win都用。而且我觉得在最大程度上的软硬件兼容性上,Win做的很好。

如果一个硬盘的使用率总是在50%以下,那么你觉得是正常的吗?如果总是你需要100G空间,所以你得买一个200G硬盘,有意义吗?我这里50%是一个比方,没有任何的依据,可以任意批判。
。。。。。。。
想一想,如果用户都是买400G的硬盘,只是存40G的东西,400G的硬盘真能卖出去那么多吗?想一想,如果真的存了东西就不改了,那直接刻盘好了。想一想,有几个用户的硬盘能迁就举例当中,Linux或者Mac的那么的理想化的存储。
C盘的利用率绝对小于别的分区,但是却是碎片的重灾区。放满电影的D盘可以不用经常整理碎片,因为都是大块文件拷贝或者删除。40GB是400GB的10%,而且前面提到的20%也是适用于服务器上的值,在个人桌面系统上,这个值为5%。Debian在仅剩8%空间时会提醒。

Windows的磁盘碎片清理有些过度的被妖魔化了,试问究竟有多少人在XP之后的系统下清理过磁盘碎片?
不是说不做就不需要做。你仔细看http://forum.ubuntu.org.cn/about27451.html里面的存储原理,你就明白了。

1年半的时间,160G的空间一直几乎是满的,文件当然一直在不停的变动,每天都有十几G的增加删除,但从未进行过碎片清理,速度从未有过任何影响。
如上所说,大文件删除和存储,不会引起很多碎片。速度未有影响,你测试过吗?这是你妄下的结论,比起上面列举的文章里面的"举例,列数据,分析,实验,总结"得出的结果,你的结论毫无可信度。而且速度影响是在C盘碎片化的情况下才让人明显察觉,因为你的程序是从那里开始执行的。或者你整个硬盘只有一个分区??

关于虚拟内存的说法就有点。。。了.....是因为不断的读写所以造成磁盘碎片,还是因为文件不断的改变大小造成碎片?如果是不断的读写,那么BT一个东西,得造成多少磁盘碎片阿。。。。。你见过Pagefile总是不停的改变大小的吗?
Windows没有专门的分区给虚拟内存,而Linux有Swap分区。不知道Mac是什么样。$frage$

如果你一定要说占满空间的情况,确实,空间都占满的情况下,什么文件系统的碎片问题都很严重。但是Windows下面C盘是不会被占满的,不要忽略这个情况。

坚持不相信的话,你可以把上面连接里面的文章好好读一下。
因为这个东西不是信仰,不是任由人相信或者不相信。文中的作者还提供了工具,你也可以下载下来自己验证一下。上文的结论能重复验证。

[ 本帖最后由 tanzn78 于 2007-3-15 14:48 编辑 ]

varus 发表于 2007-3-15 14:55

$支持$ $支持$ $支持$

varus 发表于 2007-3-15 15:00

原帖由 mymy365 于 2007-3-15 02:30 发表 http://www.dolc.de/forum/images/common/back.gif
从不迷信任何专家,任何权威。
您就是权威啊:D 咱这里东西太浅显,明显不合您口味$汗$

lois 发表于 2007-3-15 16:35

因为兼容性问题,我对苹果望而却步
因正常审美能力,我对MAC义无返顾

给我1000个反对的理由,我也会用XP
给我100000000000000个反对的理由,我却会用MAC.

因为她满足了我的审美观:最简洁的就是最华丽的,OH YEAH!!!!!!!!!$bye$

漂来漂去 发表于 2007-3-15 18:36

mymy365 发表于 2007-3-15 23:30

我不相信任何专家,也就是说,大多数专家都是为了金钱而工作,就像大多数程序员都是为了金钱而工作。一个为了金钱而说的话干的事,没什么好说的。
比尔同志曾经说不干CEO了,要专心搞技术,我信。丁磊同志曾经说不干CEO了,要专心搞技术,鬼才信!或者,一个人想的是技术,而另一个人想的是技术。。。
又扯远了。。。。
我举的例子的是一台服务器的具体实例,没有叫你信。因为我也不是专家,我说出来没人信,这不是再正常不过了。
只是告诉您,Windows的Pagefile对于大多数电脑来说,512M就是512,1024就是1024,不是说你这次开机512,下次开机就变成1024了。所以跟Linux的swap想做的事情是差不多的。好了,请您告诉我,或者请那个专家告诉我,当一个文件一直固定是512M的时候,他是怎么认为Windows通过频繁的读写虚拟内存而产生了大量的碎片......
肯定不是广告或者专家说什么洗衣粉好,就是什么牌子的好。
也肯定不能说自己家洗一次衣服,就说什么洗衣粉不好。得想想,大家都还在穿的确良的时候,您穿个真丝,大家还不在一个起跑线上呢。
多想想,多想想,咱们大家都多想想。。。。。。

tanzn78 发表于 2007-3-16 00:39

原帖由 mymy365 于 2007-3-15 22:30 发表 http://www.dolc.de/forum/images/common/back.gif
只是告诉您,Windows的Pagefile对于大多数电脑来说,512M就是512,1024就是1024,不是说你这次开机512,下次开机就变成 1024了。所以跟Linux的swap想做的事情是差不多的。好了,请您告诉我,或者请那个专家告诉我,当一个文件一直固定是512M的时候,他是怎么认为Windows通过频繁的读写虚拟内存而产生了大量的碎片......
这个是正解,只要Paging File的尺寸没有变化,那么就不会因为Paging File的尺寸变化而造成磁盘碎片。就是说Paging File的最大和最小尺寸要设的一样,微软建议为系统内存的1,5倍。但是Windows默认的Paging File的尺寸不是固定的,会随系统使用而变大,固定Paging File大小这个设置要用户手动设定。

varus 发表于 2007-3-16 00:43

原帖由 mymy365 于 2007-3-15 22:30 发表 http://www.dolc.de/forum/images/common/back.gif
我不相信任何专家,也就是说,大多数专家都是为了金钱而工作,就像大多数程序员都是为了金钱而工作。一个为了金钱而说的话干的事,没什么好说的。
比尔同志曾经说不干CEO了,要专心搞技术,我信。丁磊同志曾经 ...
学哲学的,肯定是学哲学的$汗$

mymy365 发表于 2007-3-16 00:44

再多观察观察。。。比如Windows告诉你说虚拟内存会在768-1024之间,就是告诉你是在这个范围。并不是说它就是随时或者每次重开机都变来变去。。。。。甚至可能你就永远是768。。。。当然可能比较倒霉,永远都是1024。
页: [1]
查看完整版本: [原创]浅谈磁盘碎片