Windows Server 2012/2012R2 中的碎片整理新功能

大家好,我叫 Palash Acharyya,是微软平台核心团队的支持专家级工程师。在过去的十年中,我们的工作取得了长足的进展,从 Windows Server 2003 一直升级到 Windows Server 2012 R2。整个操作系统发生了翻天覆地的变化,我们添加/修改了大量功能。磁盘碎片整理就是其中之一,今天我将会向大家进行相关介绍。

我需要进行碎片整理吗?

简单来说,碎片整理是一项在文件系统级别完成的整理工作,旨在减缓文件系统碎片的持续增长速度。自 Windows XP/2003 年代至今,我们已经取得了长足的发展,当时我们使用 GUI 进行碎片整理,并且还会显示卷上的碎片。磁盘碎片是一种缓慢而又持续的现象,每当为将文件安装到卷上而将其拆分为小块时都会产生碎片。由于人们不断编写、删除和调整文件,将文件从一个位置移动到另一个位置,因此自然而然会产生碎片。当一个文件散布于多个位置时,磁盘将需要更长的时间来读取或写入 IO。因此,从磁盘 IO 的角度而言,碎片整理是提高吞吐量的必然要求。例如,当使用 Windows Server 备份(甚至采用 VSS 的第三方备份解决方案)时,需要设置最小差异区域 (MinDiffArea) 来准备快照。您可以使用 vssadmin list shadowstorage 命令查询此区域(有关详细信息,请阅读此处)。重点在于,需要不含文件碎片的大量连续可用空间。前面引用的文章中对 MinDiffArea 的最低要求进行了说明。

问:我需要对我的计算机运行碎片整理吗?

答:您可以先使用 Sysinternal 工具 Contig.exe 检查碎片级别,然后再决定是否运行碎片整理。您可以在此处获取该工具。下面是我们可能获得输出示例:

 clip_image001

共计 13,486 个碎片,那么是否应该为此而感到烦恼呢?答案是不用烦恼。为什么?

大家可以清楚地观察到,我的 C: 盘有 96GB 可用空间,其中最大可用空间块(也就是最大连续可用空间块)约为 54GB。因此,我的数据并未占满整个磁盘。换句话说,我的磁盘在读取/写入 IO 操作期间不会遭受重创,运行碎片整理毫无意义。

问:再次回到上一个问题,碎片整理究竟有没有必要?

答:视情况而定。我们只能判断碎片整理要求;如果碎片会导致某些严重性能问题则有必要,否则得不偿失。我们需要明白的是,文件碎片并不总会导致性能低下,也不是导致性能低下的唯一原因。例如,一个卷上可能包含很多以碎片形式存在但不常访问的文件。人们判断是否需要进行碎片整理的唯一途径是衡量工作负载,确定随时间的推移碎片是否会导致性能越来越慢。如果您确定碎片是问题症结,那么需要思考长期运行碎片整理的效果如何,或者运行碎片整理的整体代价如何。代价一词形象地表明从操作系统角度而言,运行此任务需要付出的努力。换句话说,大家见到的所有改善都是通过一段时期运行碎片整理为代价换来的,并且这很可能会对生产工作负载带来的干扰。当需要运行碎片整理来清除备份障碍时,我们的指示是,如果用户由于持续可用空间不足遇到此类错误,那么应该运行碎片整理。我不建议按计划运行碎片整理,除非备份功能至关重要并且一贯由于可用空间不足而导致失败。

Windows Server 2008R2 概览:

过去,Windows Server 2008/2008 R2 中将碎片整理作为一项计划任务每周执行一次。过去的情形如下所示:

clip_image003

默认选项:

clip_image005

Server 2012 中的变化:

Windows server 2012 对碎片整理功能进行了一些主要增强和修改。额外添加的参数如下所示:

/D     执行传统碎片整理(此为默认值)。

/K     在指定的卷上执行碎片合并。

/L     在指定的卷上进行重新剪裁。

/O     对每种媒体类型进行适当的优化。

过去 Windows Server 2008 R2 中运行的默认计划任务为 defrag.exe –c,即在所有卷上执行碎片整理。这同样是卷特定的任务,意味着不考虑存储的物理特性(是 SCSI 磁盘、RAID 还是精简配置 LUN 等)。Windows server 2012 中发生了很大的变化。默认计划任务为 defrag.exe –c –h –k,这意味着对所有正常优先级(默认级别为“低”)卷执行碎片合并。为说明碎片合并,您需要了解 Windows Server 2012 的存储优化增强功能,这篇博文中已经做出相关说明。

存储优化程序的作用是什么?

在 Windows 8/Server 2012 中,存储优化程序也负责执行维护活动,如压缩数据及精简文件系统分配,以便回收精简配置磁盘容量。此工具同样具有平台特定性。因此,如果您的存储平台支持此工具,存储优化程序将合并使用率不高的存储“碎片”,并将释放的存储“碎片”返回您的存储池以便其他空间或 LUN 使用。系统会定期执行这项活动,即无需用户参与,并且完成计划任务不受用户干扰。我不打算介绍存储空间和存储池,因为这会进一步延伸本主题,您可以参阅 TechNet 的存储空间概述了解详细信息。

以下是存储优化程序的截图:

clip_image006

这是在我单击 Analyze 后显示的图像。

clip_image007

以下是精简配置存储的截图:

clip_image008

上方显示的碎片比例是文件级别碎片,不要与存储优化产生混淆。换句话说,如果我单击 Optimize 选项,将会根据媒体类型执行存储优化。在图中,您可能注意到 E: 盘和 F: 盘上的碎片(我曾手动创建过文件系统碎片)。如果手动运行 defrag.exe –d(传统碎片整理)加上默认值 –o(性能优化),两者并不互相矛盾,因为存储优化与碎片合并不能像过去的传统碎片整理一样在文件系统级别上运行。其实,这些选项显示的是它们在包含存储空间、池、分层存储等的混合存储环境中的潜力。因此,简言之,在 Server 2012 和 Server 2012 R2 中运行碎片整理的默认计划任务不会执行 Windows Server 2008/2008 R2 过去常常运行的传统碎片整理作业(文件系统级碎片整理)。要对这些卷进行传统碎片整理,用户需要运行 defrag.exe –d,并且在执行此操作前,务必确定是否必须执行此操作。

问:为什么我们停止了默认文件系统碎片整理或 defrag.exe -d

答:很简单,它不能判断将传统文件系统碎片整理作为计划任务每周运行一次需要耗费的成本和精力。说到包含数万亿字节数据的存储解决方案,运行传统碎片整理(默认文件系统碎片整理)需要很长时间,而且还会影响服务器的整体性能。

Server 2012 R2 中的变化:

Windows Server 2012 R2 仅新增了下方显示的一个开关:

/G     优化特定卷上的存储层。

存储层允许将同一存储池的 SSD 和硬盘存储用作 Windows Server 2012 R2 中的新功能。这个新开关可以在分层布局中进行优化。要阅读有关分层存储及其实现方法的更多信息,请参阅以下文章:

存储空间:如何使用 Windows Server 2012 R2 配置存储层https://blogs.technet.com/b/askpfeplat/archive/2013/10/21/storage-spaces-how-to-configure-storage-tiers-with-windows-server-2012-r2.aspx

Windows Server 2012 R2 中的存储空间新功能
https://technet.microsoft.com/en-us/library/dn387076.aspx

小结:

简言之,我们需要记住以下几点:

1. 默认碎片整理计划任务如下所示:

Ø Windows Server 2008 R2:defrag.exe –c

Ø Windows Server 2012:defrag.exe –c –h –k

Ø Windows Server 2012 R2:defrag.exe –c –h –k –g

在客户端计算机上将为 Windows –c –h –o;但是,如果包含精简配置媒体,碎片整理还将执行碎片合并。

2. 碎片整理任务的命令行 –c –h –k (2012) 和 –c –h –k –g (2012 R2) 还会在精简配置媒体上执行存储优化和碎片合并。不同的虚拟化平台可能会报告不同的内容,如 Hyper-V 显示媒体类型为精简配置,但 VMware 却显示媒体类型为硬盘驱动器。碎片整理 UI 中显示的碎片比例与碎片合并毫无关联。这是指卷的文件碎片。如果要处理文件碎片,必须使用 –d 运行碎片整理(前文已经提到过)。

3. 如果计划部署 PowerShell 脚本实现同样的目标,那么命令很简单。

PS C:\> Optimize-Volume -DriveLetter <drive letter name> -Defrag -Verbose

您可以在此处了解所有 PowerShell 命令的详细信息。

今天就介绍到这里,下次继续介绍。

Palash Acharyya
支持专家级工程师
微软平台支持事业部