磁盘碎片整理原理

  只要存在硬盘,就会有磁盘碎片。如果您非常关注自己的系统,就应该定期对其进行碎片整理。就像我们要让牙医清洁牙齿一样,碎片整理也同样重要。除非您的计算机始终闲置不用,否则碎片会越来越多。稍后,我将向您演示如何进行碎片整理,但现在先让我们来稍微了解一下碎片整理的历史。

  碎片整理和 Windows NT

  Windows NT® 没有内置的碎片整理实用工具,当时人们普遍认为不需要这个工具。毕竟,NTFS 在构建时进行了优化,而且它不像 FAT 卷那样容易产生大量碎片。但是随着时间的推移,NTFS 性能也可能由于文件位置不佳而产生碎片。大量第三方碎片整理工具即应运而生。最受 IT 专业人员欢迎的一个产品是 Executive Software(现为 Diskeeper Corporation)的 Diskeeper 产品。Windows 2000 增加碎片整理功能后,Microsoft 从 Executive Software 获得了技术授权。Windows® 2000 碎片整理功能可从其自身的 Microsoft® 管理控制台 (MMC) 管理单元 (dfrg.msc) 运行,单击某个卷或手动从命令行中运行 defrag.exe 即可调用该管理单元。虽然这个内置版本无法进行日程安排且只能使用一些受限的命令行,但是许多 IT 专业人员仍创建功能脚本来使用它自动进行碎片整理。Windows XP 和 Windows Server® 2003 中的 defrag.exe 在早期版本的基础上做出了一些改进,但也只能提供有限的自动化 — 您仍需要编写脚本。

  许多供应商(包括我以前的雇主 Winternals Software),都开发了用于企业空间碎片整理的软件。其中大多数产品的工作原理都相同:使用集中式控制台、依赖于客户端系统(可能始终依赖,也可能只按需依赖)的某种类型的代理以及指示碎片整理任务运行时间和方法的结构。

  Windows Vista® 基本上仍采用单系统碎片整理,同时优化了碎片整理程序,还包括一些选项,如对小型文件碎片(64MB 或更小)进行碎片整理,此选项加快了碎片整理速度但会在磁盘上保留许多较大的文件碎片。与 Windows 以前版本相比,Windows Vista 和 Windows Server 2008 中的碎片整理引擎本身的功能更加强大。它还能自动运行而不需要手动安排运行时间。但是,如果您经营一个大型组织或希望采用默认情况下碎片整理不支持的方法来优化系统,可能仍需要使用第三方软件。在早期版本中,对于已启用 NTFS 压缩并且使用很频繁的卷,您可能无法对其进行碎片整理。在这种情况下,第三方工具可能有所帮助。

  碎片是如何产生的?

  随着时间的推移,文件会发生更改,进而就会产生碎片。理论上,Windows 文件自身不会发生更改,或者至少不会经常发生更改。实际上,只有在安装 Service Pack 和软件更新时,Windows 文件才会发生更改。否则,系统文件属于相对稳定。执行大型更新(如安装 Service Pack)后,由于通常无法覆盖磁盘上正进行更新的文件,所以自然会产生碎片,而且更新可能需要重新启动,这也会导致更多的碎片。

  另一方面,用户文件和数据(以及 Windows 注册表)都在不断变化。读取、写入、编辑、复制和删除文件都会导致大量碎片,尤其是在驱动器容量已满的情况下。

  为了形象地说明这种情况,请设想一个组织方式良好的磁盘,其中文件连续占据空间,而文件之间没有多余的空间。假设您打开了一个文件并对其进行编辑,然后试图保存。如果文件已增长,则 Windows 必须将文件完整地保存在磁盘的某个位置(假定在文件 N 后面),或将最新的数据保存在文件 N 后面。这意味着文件 2 现在非常零散。如果现在编辑文件 1,就会出现两个零碎的文件。随着时间的推移,如果一直重复此类过程,最终会得到一个非常零散的系统,其中驱动器需要查看多个位置才能访问单个文件。在大型数据库文件、用于虚拟计算技术的高成本硬盘文件以及一般磁盘中存储的各种视频和音频中,碎片很常见。当然,目前硬盘空间越来越大,碎片算不上大问题,但其影响始终存在。硬盘较小的旧便携式计算机的响应速度会变得越来越慢,打开和保存文件花费的时间也会越来越长。

  关键问题不在于系统的零碎程度,而在于单个文件的零碎程度。从看到第一个磁盘碎片整理程序以彩色视觉效果在屏幕中显示开始,用户就在想“我需要彩色实心块。”但实际上,那是您最不需要的东西。一些产品尝试使其磁盘显示为两个实心块 — 一种为彩色(文件数据),另一种通常为白色(可用空间)。遗憾的是,如果您希望尽可能降低碎片整理的频率和成本,对磁盘进行此操作是最糟糕的事情之一。当您继续对文件进行编辑时,如果已将所有文件数据强行压缩到磁盘的前面部分,并腾出了大量可用空间,则必须将所有这些编辑写入到文件数据的末尾,因此如果通过上述方式进行碎片整理,从下一次文件编辑开始您实际上已经导致了碎片的产生。良好的碎片整理不一定要产生两个经过组织的整齐文件数据块,而是产生一个未必完美的映像。有关进行碎片整理前测试系统的示例,请参阅图 1。然后,请参阅图 2 中 Windows 完成碎片整理后同一系统的状况。

  图 1 进行碎片整理前的驱动器状态

  图 1 进行碎片整理前的驱动器状态 (单击该图像获得较大视图)

图 2 进行碎片整理后的驱动器状态

  图 2 进行碎片整理后的驱动器状态 (单击该图像获得较大视图)

  请注意,Windows 并不关注跨磁盘的文件碎片,而是关注单个文件碎片本身(有关我对系统进行碎片整理之前的大多数零碎文件的碎片整理报告部分,请参阅图 3)。

  图 3 碎片整理报告

  图 3 碎片整理报告

  这样,即使在进行碎片整理后,Windows 也不会在磁盘前面部分显示完全压缩的文件数据集。还要注意图 1 和图 2 中大的绿色数据部分,那是 Windows 页面文件,稍后我会简要介绍一下。如果在 Windows 系统中启用了休眠,它同样会显示在碎片整理中。

  常规的碎片整理是必要的

  就像定期清洁牙齿一样,定期对系统进行碎片整理最重要。如果不经常进行碎片整理,处理过程就会花费很长时间,并且使您的服务器不可用或停止响应(因为碎片整理很费时,而且特定阶段的碎片整理还会占用大量 CPU),所以经常对使用率高的系统(如服务器)进行碎片整理非常重要。

  即使最好的联机碎片整理程序也无法对所有内容进行碎片整理。例如,碎片整理程序无法始终对已打开或锁定的文件(如页面文件或注册表文件)进行碎片整理,而且必须解决可能存在的休眠文件(该休眠文件与系统中正在使用的 RAM 一样大)。要优化锁定的文件,请参阅下一部分中关于碎片整理技巧的内容。

  我认为了解关于碎片整理的误解和事实非常重要。图 4图 5 列出了在讨论碎片整理经常提出来的一些主题并指出了这些问题发生的实际几率。

  碎片整理作为基础结构的一部分

  您应该认真考虑在所有系统中定期运行碎片整理程序。您可以选择使用 Windows 中内置的碎片整理程序或使用第三方产品。这主要取决于您需要进行多少工程处理。Windows XP 及更高版本允许您将 defrag.exe 添加为计划任务,support.microsoft.com/kb/555098 上的相应知识库文章向您显示了添加方法。请注意,便携式计算机碎片整理有一些特殊的注意事项。您想在用户系统启动(最好通过交流电源)时对其进行碎片整理,并且不希望在移动用户正努力完成工作时占用 CPU 和磁盘周期。但遗憾的是,在移动用户未使用自己的系统时,很可能是系统断开了交流电源或者处于待机或休眠状态(从电源管理和计划任务角度出发断开电源)。在 Winternals(其他公司可能也一样),我们花费了很多时间尝试设计一个理想的移动用户方案。如果您使用 Windows Vista,因为它与早期版本相比具有更强的电源感知能力,所以使用内置碎片整理程序和计划任务的解决方案完全可以解决问题。否则,您可能必须使用适用于移动系统的第三方解决方案。某些第三方解决方案实际上是启动碎片整理任务,让您了解该任务是否正在运行、何时运行(和运行频率)以及运行花费的时间。

  除了移动方案,您还需要考虑文件系统之外的碎片。通常,您无须针对桌面或移动系统考虑这一问题,但是服务器、Microsoft Exchange、SQL ServerTM 或其他数据存储可能要求自己进行碎片整理。在此类情况下,您需要决定在执行文件系统碎片整理之前还是之后进行该过程。

  如果您正使用第三方碎片整理程序,还需要确保它使用了 Windows 碎片整理 API。从 Windows NT 4.0 开始,Windows 已经拥有自己的碎片整理 API 以避免意外的数据丢失。例如,如果在移动文件的过程中系统断电,会出现不完整的移动碎片,这会导致数据丢失甚至无法启动系统。

  最后,如果您正使用虚拟计算技术,可能还需要考虑如何管理虚拟磁盘的碎片整理。因为它们同样有可能面临诸多碎片整理问题,在某种意义上还会因大小限制而使情况变得更糟。此外,如果虚拟化解决方案允许压缩磁盘或分区,您可能需要先进行碎片整理,以便释放空间(或者至少可以缩短压缩操作所需的时间)。

  其他工具

  现在,您应该相信碎片整理是一项重要而有价值的功能了吧!即使不使用第三方工具对自身进行碎片整理,您还可以考虑由 Mark Russinovich 提供的一个称为 PageDefrag 的工具,此工具可从 Microsoft Sysinternals 工具站点获得(请参阅 microsoft.com/technet/sysinternals/FileAndDisk/PageDefrag.mspx)。如上所述,在 Windows 联机时无法对 Windows 页面文件进行碎片整理。实际上,这同样适用于 Windows 注册表文件和事件日志。通过 PageDefrag,您可以在 Windows 完成启动并锁定这些文件之前使用体积小巧的驱动程序对其进行碎片整理。若要使用它,只需运行 PageDefrag 并将其设置为下次重新启动或每次启动时执行即可。当系统重新启动时(在启动过程中您可能会看到磁盘检查已提前运行),将对列表中的指定文件进行碎片整理(请参阅图 6)。

  图 6 在 PageDefrag 中进行碎片整理的文件

  图 6 在 PageDefrag 中进行碎片整理的文件

  PageDefrag 完成后,系统通常会自动启动。有关 PageDefrag 的详细信息,Lance Whitney 在九月份的实用工具特别推荐安装中进行了介绍(请参阅 technetmagazine.com/issues/2007/09/UtilitySpotlight)。请注意,只有 Windows NT 4.0、Windows 2000、Windows XP 和 Windows Server 2003 支持 PageDefrag,它当前并不受 Windows Vista 支持。

  除了 PageDefrag,您还可以使用 Sysinternals 提供的另一个称为 Contig 的工具,手动对特定文件进行碎片整理(请参阅 microsoft.com/technet/sysinternals/FileAndDisk/Contig.mspx)。如果无法通过正常碎片整理任务对特定文件进行碎片整理或该文件已变得零碎(但卷的其余部分并不零碎),此工具将非常有用。

  Contig 还可以使用通配符对整个目录或子目录进行碎片整理。下面将对 Windows 目录下的所有文件进行碎片整理,无论这些文件位于何处。

  Contig –s c:\Windows\*.*

  应用 –v 开关可进行细节操作,而 –q 开关可使其安静地运行。

你可能感兴趣的:(虚拟机,windows,应用服务器,XP,Microsoft)