为什么Linux不需要碎片整理?

本文由 极客范 - 只爱看海 翻译自 Chris Hoffman。欢迎加入极客翻译小组,同我们一道翻译与分享。转载请参见文章末尾处的要求。

image509

如果你是一个Linux用户,你可能会听说Linux的文件系统不需要碎片整理。你也可能会注意到Linux的发行版本也都没有磁盘碎片整理的功能。这是为什么呢?

要理解为什么Linux的文件系统不会想Windows的文件系统一样产生碎片,你首先要明白碎片到底是如何产生的,还有这两大操作系统的文件系统的工作方式到底有什么不同。

什么是磁盘碎片?

很多Windows的用户,甚至包括一些没有经验的用户,都相信定时整理文件系统中的碎片会让他们的电脑运行得更快。但他们都不知道这是为什么。

简单来说,一个硬盘驱动器里面包含了很多扇区,每一个扇区都可以存储一小块数据。对于文件,尤其是比较大的文件来说,他们必须要存储在很多不同的扇区内。假设你的文件系统中有很多不同的文件,每一个文件都被存储在连续的扇区群中。然后,你对增加了其中某一个文件的大小。文件系统首先会尝试对该文件新增加的部分存储在紧挨着原来的扇区群的某个扇区中。但是如果当中没有足够的连续扇区,这个文件就必须要被分解成多个小块,这些操作对于你来说都是可见的。当你的硬盘读取这些文件的时候,他的磁头必须在不同的物理位置间跳转以读取连续的扇区群,这会降低它的速度。

碎片整理就是一个通过逐位(位是文件在磁盘中存储的最小单位)移动文件来减少碎片的精密的过程,以此来确保每一个文件在硬盘中都是连续存储的。

image510

当然,对于固态硬盘来说这又有点不一样,固态硬盘不需要移动文件也不需要碎片整理。因为对一个SSD(固态硬盘)做碎片整理会减少它的寿命。而且,在最新版本的Windows系统中,你也不再需要为碎片整理担心,因为Windows会自动帮你完成。

Windows的文件系统如何工作

从前微软使用的FAT文件系统——最后一次作为默认系统被看到是在Windows 98和ME,尽管这个系统还在USB驱动器中使用——并不能够很好地排列文件。当你在FAT文件系统中保存文件时,它会尽可能地将文件排列在磁盘的首部。当你存放下一个文件时,它会将这个文件直接存放在第一个文件的后面,以此类推。所以当文件变大,永远都会有碎片产生,因为文件的旁边已经没有空间来存放增加的部分。

微软在Windows XP和2000中使用的较新的NTFS文件系统就尝试变得更聪明一点。这个文件系统会在文件周围放置更多名为”缓冲区“的自由空间,但是,任何一个Windows用户都会告诉你,NTFS文件系统总有一天也会产生碎片的。

因为文件系统这样的表现,他们需要碎片整理来保持性能。微软只能在最新版的Windows系统中通过在后台自动运行碎片整理程序来减轻这个问题。

image511

Linux的文件系统如何工作

Linux的ext2,ext3,ext4文件系统——ext4是Ubuntu和目前大多发行版所采用的文件系统——会以一种更加智能的方式来放置文件。Linux的文件系统会将文件分散在整个磁盘,在文件之间留有大量的自由空间,而不是像Windows那样将文件一个接一个的放置。当一个文件被编辑了并且变大了,一般都会有足够的自由空间来保存文件。如果碎片真的产生了,文件系统就会尝试在日常使用中将文件移动来减少碎片,所以不需要专门的碎片整理程序。

image512

因为这样的工作方式,你可能会在你的文件系统塞满之后看到碎片。如果文件系统95%(甚至80%)的空间被占用了,你就会开始看到一些碎片。然而,这样的文件系统本来就是设计来在普通使用中减少碎片的。

如果你真的在Linux上出现了碎片的烦恼,你可能就需要一个更大的硬盘了。如果你真的需要对一个文件系统做碎片整理,最简单的可能也是最可靠的方法就是将所有文件拷贝出来,然后清空原来的分区,再将文件拷贝回去。文件系统就会在你拷贝回去的过程中智能地将文件放置好。

你可以使用fsck命令来检测一下一个Linux文件系统的碎片化程度,只需要在输出中查看非连续i节点个数(non-contiguous inodes)就可以了。



原文链接: Chris Hoffman 翻译: 极客范 - 只爱看海

译文链接: http://www.geekfan.net/5281/

[ 转载请保留原文出处、译者和译文链接。]

11 评论

  1. 刘冬  /  2014 年 1 月 16 日, 下午 12:12 回复

    buddy和slab是linux最基本的解决外、内碎片的方法

    Thumb up 1 Thumb down 0

    • yjie  /  2014 年 1 月 16 日, 下午 5:05 回复

      buddy和slab是内存管理的,不是磁盘管理的

      Thumb up 2 Thumb down 0

  2. 阿布扎比  /  2014 年 1 月 20 日, 下午 2:03 回复

    看完了感觉如下:
    “你好,贵姓?”
    “姓魏”
    “魏什么?”
    “不为什么,爹姓魏”

    Thumb up 12 Thumb down 0

  3. cifer  /  2014 年 1 月 20 日, 下午 7:41 回复

    看这篇文章的长度就知道说的东西有多肤浅
    翻译就翻译点有营养的行吗?

    Thumb up 1 Thumb down 0

    • fff  /  2014 年 3 月 22 日, 上午 10:29 回复

      Dddd

      Thumb up 0 Thumb down 0

  4. Felix  /  2014 年 1 月 21 日, 上午 10:12 回复

    SSD 不需要整理碎片的原因是它没有磁头、没有分散存储带来的寻道时间增加的问题,整理碎片的害处(不是原因)才是会缩短寿命。

    Thumb up 2 Thumb down 0

  5. cheerment  /  2014 年 2 月 10 日, 上午 9:38 回复

    文章中说磁盘整理会降低ssd寿命,同时又说在最新windows系统中磁盘整理是自动完成的,这把我搞得一下子不敢换ssd了

    Thumb up 4 Thumb down 0

    • songyue  /  2014 年 5 月 19 日, 下午 3:35 回复

      手工关闭磁盘整理程序就行了,当然也推荐你用ubuntu linux系统,非常的棒!

      Thumb up 0 Thumb down 0

  6. dfds  /  2014 年 4 月 21 日, 下午 3:24 回复

    标题说linux不需要碎片整理,后来又说会在日常中整理,前后矛盾

    Thumb up 0 Thumb down 0

    • yxr  /  2014 年 4 月 30 日, 上午 12:31 回复

      那是windows啊

      Thumb up 0 Thumb down 0

  7. yangling  /  2014 年 9 月 17 日, 上午 9:52 回复

    不是LINUX不需要整理,也不是WINDOWS需要整理,需要给大家一个准确的概念。是文件系统的问题。和操作系统没有关系,。LINUX操作系统也可以挂接 NTFS /FAT16./32的文件系统。所以说,碎片问题和操作系统没有任何的关系。EXT2/3/4不是没有碎片。同样也有。EXT文件系统是散列索引方式。FAT是簇连接方式。简单说类似单向链表。

    Thumb up 3 Thumb down 0

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">