碎片重组

电子档案系统的碎片重组（defragmentation）是指减少档案系统中碎片化的程度。其作法是重新整理大容量存储设备中的内容，让电脑档案存放在较连续的位置，减少档案的各部分分散在不连续位置的情形，同时也会让存储设备中未使用的区域变得连续。

碎片重组对于电磁式碟盘存储（例如硬盘、软盘、光盘驱动器）里的档案系统是有益的。因为若档案分散在不同的区域（碎片化），读写时磁盘读写头在不同区域移动的时间会比较花时间。若是针对由非挥发性内存组成固态硬盘，读写时在不同位置存取资料的时间和在连续位置存取的时间相当，就不需要进行碎片重组，而且固态硬盘写入次数受限，碎片重组时的资料写入会减少其使用寿命。

## 磁盘碎片的原因

当档案系统无法找到够大的连续空间来储存档案，需要将档案分成多份，并且在已有的档案之间，没储存资料的位置找数个空间（这些空间可能之前有存放资料，后来删除了，或是之前储存档案时，规划的空间比档案实际的空间要大）来存放档案，这就出现了磁盘碎片。经常要在档案后新增资料的档案（例如记录档）、经常会新增及删除的档案（像是邮件中的档案以及网页的快取）、较大的档案（例如影片档）比较容易受到碎片化的影响，因此在读写这些档案时，效能会下降。碎片重组就是要解决这些问题。

### 例子

<image>

磁盘中有五个档案，分别用A到E来表示，其他的位置空白没有储存资料。每一个档案用了十个区块的空间（此段中，区块是档案系统分配空间的单位，区块大小是在磁盘格式化时决定，会是档案系统所支援的大小）。在磁盘空白的部分，档案要分配空间时，会在相邻的位置上，一个接着一个的分配所需的空间（如图中的(1)）。若删除档案B，就会出现二个可行的作法：将原来档案B的位置设定为空白，以便后续可以分配给其他的档案，或是将B后面的档案都往前移，让空白的位置集中在后面。若有许多资料要移动，移动档案就会变成很花时间的事情，因此常见的情形就是只将档案B的位置设定为空白，可以再分配给其他的档案，其他的资料就不移动（如图中的(2)）实务上，删除档案只是将该位置设定为空白，后面可以使用此位置，不会删除档案的实际内容，因此才能进行反删除，反删除是复原那些在目录中删除了对应资讯，但其内容都还在磁盘中，而且其位置没被其他档案使用的档案。当有新的档案F需要六个区块的空间，系统会用之前档案B使用位置的前六个区块给档案F，后面四个区块仍设定为空白（如图中的(3)）。若另外一个档案G需要四个区块的空间，就会使用在F和C之间的四个区块给档案G使用（如图中的(4)）。

不过，当档案F再扩充时时，原来档案F后面已没有空间可以储存资料，需要在以下三个方法中选择一个来进行。

- 将档案F移到有够大连续空间可以存放的位置。若这个档案比所有空间都要大，此一方法就不适用。而且，若档案很大时，要搬移档案也要花相当长的时间。
- 在F档案后面的档案往后移动，以保留足够的空间给档案F。若要移动的档案不多，或是资料量不大，此方法可行。但若要移动的资料很多，就要花很长的时间移动这些档案。
- 将新增的内容放在其他的位置，并且标示档案F有第二部分的内容，以及第二部分内容的位置（如图中的(5)）。

目前的档案系统会依上述的第三个方法进行。若这类的事出现上百次，档案系统中会有很多小的档案片段，分散在不同位置。某些档案会分成几个存放在不同位置的片段。这样的档案系统会让存取时间拉长，因为需要读写不同位置的磁盘内容（随机存取），这很花时间。

另外，“碎片化”的概念也不只于一个档案会分成多段，储存在不连续区域的情形。例如，若有一些会以固定顺序读取的档案（例如在载入软件时要读取的档案，可能包括一些动态链接库，各种资源档、游戏的声音或是影像档），若不是以其读取的顺序，存放在连续位置，若以这一组档案来看也可以算是“碎片化”（即使个别的档案都是连续存放，没有分成多段储存的情形，也是一样）。在读取这些档案时，读写头在读完一个档案后，可能要移到其他不连续的位置来读下一个档案。有些群组的档案一开始会储存在连续位置，但若其中部分档案删除或是更新时，就会出现碎片化的情形。常见的理由是更新，为了要更新档案，会先删除旧档案，再写入新的档案，并且找地方存放。但大多数的档案系统不会将新的档案放在原来放旧档案的位置，而此位置后续会放入不相关的资料内容。因此造成碎片化。

## 碎片问题的处理

碎片重组的目的就是要处理碎片问题，碎片重组会将分成多段的档案进行整合，让档案分段的数量可以降低，最后理想上档案会变得不分段，在不同位置储存的档案。碎片重组一般而言至少需要二次的复制程序：第一次是将在磁盘中位在某档案后面的资料复制到其他位置。第二次则是将该档案没有储存在连续区域的部分资料复制到第一个步骤预备的位置。在此作法下，不会从磁盘中删除任何资料，因此就算是在过程中断电，让上述动作在中间中断，仍然是安全的，不会破坏资料。

若要进行磁盘的碎片重组，碎片重组软件（defragmenter）复制的资料量不会大过未使用的空间。若磁盘里未使用的空间很小，或是所有空间都已使用，就无法进行碎片重组。重组过程会降低系统效能，在重组时最好不要执行其他的程式，以免档案系统在重整过程中仍有资料的变更，造成资料的不同步。碎片重组有不同的算法，有些适合一阶段进行重组，有些则适合多阶段重组。碎片重组不会调整档案的逻辑位置（就是在目录结构下的档案位置）。

碎片重组软件除了针对档案进行碎片重组外，也会减少载入程式以及开启档案的时间。例如微软的磁盘重组工具有加入Intel应用程序载入加速器，会依各档案的相依性决定其储存的位置，让载入程式，读取档案时，可以依在磁盘上的位置依序存取，加速程式载入时间。有些碎片重组软件会读取预取器档案，识别哪些档案可以整合成一组，存放在相邻位置，并且在读取时可以依序读取。

硬盘上，在较外围的磁道（在硬盘启始的磁区）资料传输速率要比较内围的要快。因此将常存取的资料放在较外围的磁道，可以提供性能。第三方的碎片重组工具（像是MyDefrag）会将常存取的档案放在较外围的磁道，并且让这些档案储存在连续位置。

近期磁盘技术的进步，像是RAM快取、较快的磁片转速、指令伫列（SCSI/ATA 标签指令伫列或SATA NCQ）以及较高的资料密度，一定程度减轻了碎片化对系统效能的负面影响，不过常用资料量的增加抵消了一些减轻的效果。不过，现代系统的效能主要是因为大的硬盘容量而有获益，因为半满的磁盘其碎片化程度会比几乎全满的磁盘要好很多，在大容量硬盘里，相同的资料在碟片中占的实体空间较小，因此找的会比较快。不过平均的存取时间大约就是碟片旋转半圈的时间，而碟片转速（单位是rpm）是硬盘机的速度特性。相于资料传输速率，碟片转速的进步程度要慢很多，因此减少搜寻次数对经常存取的大型储存设备而言，还是有帮助的。

### 分割

要在碎片重组上最佳化并减少碎片化影响，有一种常见策略是硬盘分区，当档案系统分为二区，将常读取，不常写入的部分和常常新增及删除的档案分开。像包括暂存目录或是浏览器快取资料的目录（大约几天后就会被删除）就会固定更改。若这类的档案放在专属的分区（例如UNIX建议的文件系统层次结构标准，一般会储存在/var partition里），碎片重组程式会运作的比较好，因为不需处理其他不常变更的资料（有些碎片重组软件也可以排除特定的目录）。对于很少写入活动的磁盘分区，第一次的碎片重组会让碎片化情形大幅改善，之后的碎片重组只需要处理少部分的档案修改。

### 离线碎片重组

不可移动系统档的存在（尤其是分页档）会影响碎片重组。若在操作系统没有执行时，可以安全的移动这些档案。例如ntfsresize可以在NTFS系统里移动这些档案，调整各磁盘的容量。PageDefrag软件可以碎片重组Windows的系统档案，像是swap档，或是储存注册表的档案，其作法是在开机后，GUI载入之前就执行应用程序。自从Windows Vista开始，就已不完全支援此功能，也没有再更新软件。

在NTFS系统里，当有档案加到磁盘中，磁盘的主文件表（MFT）大小会增加，以储存新增档案的资料。若MFT大小无法增加时，就会出现档案碎片。在早期的Windows版本，若MFT分成多段储存，就无法安全的进行碎片重组，因此微软在碎片重组的API中增加了一个hardblock。不过自从Windows XP开始，因为Windows碎片重组API已经改进，并且支移动功能，越来越多的碎片重组可以重组分段的MFT。不过即使在改进之后，MFT的前四个磁簇仍然是Windows碎片重组API无法移动的，因此有些碎片重组软件可能会将MFT分成二段，前四个磁簇会留在一开始初始化时的位置。

### 固态磁盘

在从传统的机械式硬盘读取资料时，硬盘控制器要以较慢的速度将读写头定位到要读写的轨，之后等碟片转到让要读写资料到读写头时才作读写。固态硬盘（SSD）是以闪存为基础，没有可动件，因此固态硬盘的随机存取不会有时间过长的问题，也就不需要用碎片重组来优化读写时间。而且，闪存可以写入的次数是有限的，写入次数超过时就会损坏。因此，碎片重组对固态硬盘反而有破坏力（除非是用在补救灾难性故障）。不过，Windows仍会自动的对SSD进行较小型的碎片重组，以避免档案系统到达最大允许碎片化（maximum fragmentation tolerance）的限制。若到达该制制值时，写入磁盘的动作会失效。

## 书目

- Norton, Peter (1994) Peter Norton's Complete Guide to DOS 6.22, page 521 – Sams (067230614X)
- Woody Leonhard, Justin Leonhard (2005) Windows XP Timesaving Techniques For Dummies, Second Edition page 456 – For Dummies .
- Jensen, Craig (1994). Fragmentation: The Condition, the Cause, the Cure. Executive Software International .
- Dave Kleiman, Laura Hunter, Mahesh Satyanarayana, Kimon Andreou, Nancy G Altholz, Lawrence Abrams, Darren Windham, Tony Bradley and Brian Barber (2006) Winternals: Defragmentation, Recovery, and Administration Field Guide – Syngress
- Robb, Drew (2003) Server Disk Management in a Windows Environment Chapter 7 – AUERBACH

## 外部链接

- The Big Windows 7 Defragmenter Test Benchmarks of popular defrag utilities
- Microsoft Windows XP defragmentation - How to schedule a weekly defragmentation Microsoft Windows 2000 Professional and Server defragmentation - How to schedule defragmentation
- SST Hard Disk Optimizer
- How Linux avoids making files fragmented
- How defragmentation was changed for Windows 7
- Complete list of Defragmentation Utilities for Windows
- Does Your SSD's File System Affect Performance?