重新设计 chkdsk 和新的 NTFS 健康模式

我们已经撰写了大量文章介绍操作系统内核、网络和文件系统方面的改进。尽管对于大多数客户端电脑,除极个别情况外,已经几乎很少有人再使用经过试用证明可靠的 chkdsk 实用程序。我们通过 Window 8 对此实用程序进行了改进。我们重新考虑了该实用程序的工作方式,如何提高可用性以及减少由于执行 chkdsk 操作而导致的停机时间。在了解 chkdsk 的实际使用情况过程中,我们注意到损坏极少发生,但是 chkdsk 的运行却不是这样。尽管我们做出种种努力试图减少用户手动调用磁盘工具(如 defrag),但是我们意识到许多用户愿意手动运行这些工具(以防万一),所以我们致力于改进 chkdsk 的整体吞吐量,因为运行该实用程序会影响机器的可用性。随着磁盘容量越来越大,并且多磁盘系统更加普遍,我们希望能改进这个实用程序。我们的内核系统团队项目经理 Kiran Bangalore 撰写了本篇博文。  
--Steven


在本篇博文中,我将介绍 Windows 8 的新 NTFS 健康模式,以及经过重新设计的磁盘损坏检测和修复工具 chkdsk 实用程序。

我们大家可能都经历过类似下面的令人沮丧的情形,在家里重新启动电脑或在办公室中重新启动服务器时会遇到突然弹出来的 chkdsk。在这出人意料的弹出之外,我们还必须等待这个过程结束才能开始使用 Windows。现在借助 Windows 8,我们可以在这些问题出现时提供快速的解决办法,令用户处于掌控位置,并且提升系统的可用性和可扩展性。

Windows 8 主要设计目标之一就是提高可用性,并减少系统的总停机时间;此功能以及其他存储功能(如存储空间和新的 ReFS 文件系统)有助于降低修复损坏的复杂性,并提高整个系统的可用性。

以前的 chkdsk 和 NTFS 健康模式

尽管极少,但目前仍然存在一些导致磁盘损坏的特定原因。不论磁盘损坏是由于硬盘导致的媒体错误还是暂时内存错误,损坏都可能发生在文件系统元数据(该信息用于将物理块定位到您去年拍的度假照片)中。要继续保持对数据的访问,Windows 必须隔离并更正这些错误,办法就是运行 chkdsk 实用程序。

在过去的版本中,NTFS 实施了一个简单的健康模式,文件系统卷在该模式下可能是健康的也可能是不健康的。在这种模式下,如果需要,卷会变成脱机状态,以便修复文件系统损坏,并令卷重新返回健康状态。停机时间与卷中文件的数量成正比。

来自全球的可靠文件系统遥测数据显示,尽管极少发生损坏的情形,但是当需要 chkdsk 时,它运行可能需要几秒乃至几个小时的时间,这取决于驱动器中文件的数量,对于大型存储服务器来说,这个时间可能更长。

在 Windows Vista 和 Windows 7 中,我们对 chkdsk 的速度进行了重大优化,但是,由于磁盘容量每 18 个月就要翻番一次,并且每个卷的文件数量也以相近的速度增加,所以运行 chkdsk 所需的时间变得越来越长(即便速度已经优化)。

因此,在 Windows 8 中,我们改变了处理 NTFS 健康模式的方法,并更改了修复损坏的方式,所以可以将由于 chkdsk 引起的停机时间降到最低。我们还引入了一个新的文件系统 ReFS,该系统不需要脱机运行 chkdsk 来修复损坏。

经过重新设计的文件系统健康状态

存储容量和用户数据文件的极速增长促使我们必须对 NTFS 健康模式和 chkdsk 进行重新设计。

有关文件系统健康,有三个重要要求是客户应当了然的:

  1. 在连续可用配置中,文件系统损坏引起的停机时间必须为零,在所有其他配置中,停机时间应接近为零。
  2. 用户或管理员必须随时了解文件系统健康状态。
  3. 当损坏以预定的方式发生时,用户或管理员应该能够轻松地修复文件系统。

我们的设计对文件系统和 chkdsk 实用程序均有所变更,以确保最佳的可用性。新设计将这个过程分成以下阶段,以确保为损坏提供一个协调、快速且透明的解决办法。

流程图。检测损坏(NTFS 在文件系统元数据中检测到一个察觉到的异常情况),箭头指向联机自愈(NTFS 尝试快速自愈,卷保持联机状态),箭头指向联机验证(NTFS 会验证问题是暂时的还是确实存在的),箭头指向联机标识和记录(如果未自愈,NTFS 会标识并记录采取的更正性措施,通知用户或管理员,卷仍保持联机状态),箭头指向精准而快速的更正措施(用户或管理员可以在方便的时候将卷置于脱机状态,并在数秒内更正记录的损坏,有了 CSV,I/O 是会明显停顿以便快速更正,然后会自动恢复。

我们开发了一种新的通信方法,用于将损坏类型描述为对关键组件和设计点加诸动作的“动词” – 文件系统驱动程序 (NTFS)、自愈模块、定点验证服务和 chkdsk 实用程序。所有文件系统损坏都根据需要分类为 18 种不同的“动词”(已经在 Windows 8 中进行了定义)。我们为可能的新动词定义预留了空间,这可以帮助我们在将来更好地诊断问题。

关键设计变更可以改进可用性。

    1. 联机自愈: NTFS 自愈功能自 Windows Vista(和 Windows Server 2008)中引入,以减少运行 chkdsk 的需要。自愈是内置到 NTFS 中的功能,可以修复在正常操作期间遇到的某些类型的损坏,并可联机修复这些损坏。如果检测到的所有问题都是联机自愈的,就没有脱机修复的必要。在 Windows 8 中,我们提高了可联机处理的问题数,因此减少了运行 chkdsk 的需要。
    2. 联机验证:某些损坏是由内存问题导致的间歇性损坏,并不是磁盘的实际损坏;因此我们为 Windows 8 增加了一项新的服务,称为定点验证服务。该服务由文件系统驱动程序触发,它在将文件系统移动到健康模式前会验证是否存在实际损坏。此新服务会在后台运行,不会影响系统的正常功能;除非文件系统驱动程序触发该服务来验证是否存在损坏,否则它不会执行任何操作。
    3. 联机标识和记录: 当验证某个问题时,该功能会触发联机文件系统扫描,作为文件系统中的维护任务运行。在 Windows 8 中,为维护电脑所进行的预定任务仅在适当的时候(例如空闲时间)运行。这项扫描任务作为后台任务运行,而其他程序会继续在前台运行。当扫描文件系统时,所有发现的问题都会被记录下来,以便随后进行更正。
    4. 精准而快速地更正 – 为了便于用户或管理员操作,卷可以脱机进行操作,在上一步中记录的损坏会被修复。由此操作引起的停机时间称为“定点修复”,只需几秒钟时间,在具有群集共享卷的 Windows Server 8 系统中,我们已经完全解决了由这种问题引起的停机时间。在新模式下,chkdsk 脱机运行时间现在与损坏的数量成正比,而不是像旧模式中那样与文件数成正比。

条形图比较 Windows Server 2008 R2 上的 chkdsk 与 Windows Server 8 上的 chkdsk。在旧的系统上,需要 2 分钟的时间检查并修复 1 亿个文件;需要 4 分 48 秒修复 2 亿个文件,需要 6 分多钟时间检查并修复 3 亿个文件。在 Windows Server 8 中,仅需要不到 2 秒的时间来定点修复上述每个问题。
比较 Windows Server:chkdsk /f 与 chkdsk /spotfix

  1. 更好的可管理性 – 为了更清晰地了解新健康模式的状态,Windows 现在通过以下界面公开文件系统的状态:
    • 操作中心 – 驱动器的状态在操作中心是最明显的,显示为“驱动器状态”(请参见下图),该图会显示您何时需要采取操作,将卷置于健康状态。
    • 资源管理器:健康状态也显示在资源管理器中,位于驱动器属性下。
    • PowerShell:您还可以使用 PowerShell 中的 cmdlet 来调用 chkdsk 功能 REPAIR-VOLUME,该功能对于文件系统健康的远程管理有用。
    • 服务器管理器:在 Windows Server 中,您还可直接通过服务器管理实用程序来管理卷健康状态。

新的文件系统健康模式

在新的健康模式中,文件系统健康状态可能有四种状态 - 有些是提示性信息,有些是需要您执行操作。健康状态包括:

  1. 联机且正常
  2. 需要联机定点验证
  3. 需要联机扫描
  4. 需要进行错误修复

从健康,到需要定点验证,再到需要联机扫描,再到需要进行错误修复,再到健康。
Windows 8 文件系统健康状态

    1. 联机且正常 – 在这种状态下,没有检测到文件系统损坏,不需要您执行任何操作。文件系统大部分时间会保持在此状态下。

操作中心显示无需进行任何操作

    1. 需要联机定点验证– 在文件系统发现了无法自愈的损坏后,文件系统保持在此暂时状态仅一小段时间;它会将卷置于此状态直到定点验证服务验证了此损坏后。这也不需要用户执行操作。
    2. 需要联机扫描– 当定点验证服务确认了确实存在损坏后,它会将文件系统置于“需要联机扫描”状态。在下一个维护时段,会执行联机扫描;不需要执行用户操作。此状态会反映到操作中心中,所以如果您希望在下一个维护时段前进行手动扫描,您可以手动运行扫描。扫描是在后台运行,意味着您可以在扫描执行期间继续使用电脑。在联机扫描期间,所有经验证的问题和修复都会予以记录以便进行后续修复。在 Windows Server 8 系统中,空闲时间是通过监控 CPU 和存储空闲时间确定的。

消息显示扫描驱动器以查找错误,链接到打开操作中心

在维护状态下,它显示正在扫描驱动器以查找错误,我们在驱动器上发现了可能的错误,需要进行扫描。在扫描期间您可以继续使用驱动器。按钮:运行扫描。操作链接:关闭驱动器状态消息。

  1. 需要进行错误修复– 在完成联机扫描后,文件系统将卷置于此状态,如果要求,此状态会反映在操作中心中。在客户端系统上,您可以重新启动电脑以修复上一个步骤中记录的所有文件系统问题重新启动非常迅速(只需额外的几秒钟时间),电脑就会回到健康状态。对于 Windows Server 8 系统,需要重新启动才能修复数据卷上的损坏。管理员只需要在下一维护时段预先计划一个错误修复。

通知显示需要重新启动以修复驱动器错误。单击以重新启动电脑。

重新启动以修复驱动器错误(重要)我们在驱动器上发现了错误。要修复这些错误,并防止数据丢失,请现在重新启动电脑。按钮:重新启动。

对于希望避免重新启动系统来修复非系统卷损坏的高级用户来说,他们可以打开受影响卷的“属性”对话框,在“工具”选项卡上,他们可以看到一个选项,用于检查驱动器以查找文件系统错误。对于当前未使用的驱动器,可以无需重新启动电脑就可以修复该驱动器上的损坏。

在“工具”选项卡上,在“错误”检查下,此选项将检查驱动器上是否存在文件系统错误。按钮:检查

错误检查 (Chk2 (D:)) 修复此驱动器,我们在此驱动器上发现的错误。要防止数据损失,请现在修复此驱动器。修复驱动器 在 Windows 修复上次扫描时发现的错误期间您将无法使用该驱动器。您可能需要重新启动电脑。按钮:取消。

结论

在 Windows 8 中,我们已经更为透明且更少干扰地检测并更正了文件系统错误 。我们相信这些更改将会成为受用户欢迎的增强功能,并期待收到您的反馈。

-- Kiran Bangalore
    Windows 内核存储和文件系统高级项目经理

您的浏览器不支持 HTML5 视频。

下载此视频以便在您选择的媒体播放器中观看。
高品质 MP4 | 高品质 MP4

FAQ

Q) 新的健康模式在可移动驱动器上是否可用?
是的,这可以在带有固定介质(就像大多数外部硬盘驱动器)的可移动驱动器上使用。

Q) 如何启用新文件系统健康状态?
您无需执行任何操作 — 新文件健康模式是默认启用的。

Q) 新文件系统健康模式是否适用于 Windows Server?
是,健康模式对于服务器和客户端都是相同的。默认情况下,有一点不同,就是在启动系统期间不会检查或修复数据驱动器 – 当时间允许时,此项维护工作将留给管理员来执行。

Q) 是否可以在 Windows 8 和 Windows 7 之间移动而不会影响文件系统模式?
是的,文件系统健康模式可以适应所安装的任何操作系统版本。

Q) ReFS 是否需要运行 chkdsk?
ReFS 会使用另一个不同的模式进行复原,不需要运行传统的 chkdsk 实用程序。

Q) 我是否需要运行旧的 chkdsk /f?
有故障的硬件可能会产生严重的损坏,从而导致文件系统不可安装;在这种情况下,您应该执行完全 的脱机 chkdsk 以修复文件系统。如果出于某种原因,修复失败,我们建议您从备份进行恢复。

Q) 要修复非系统卷,重新启动是否绝对必要?
不是,但是操作中心一般会提供最简单的体验。如果您是高级用户,您可以通过打开驱动器的属性或通过在命令行运行 chkdsk \scan <volume>:和 chkdsk \spotfix <volume>:来修复非系统卷。

Q) 我经常运行 chkdsk /f 来检查驱动器的状态,是否不再需要这样操作?
不,当发现损坏时系统会通知您,您可以选择运行 chkdsk /scan 来检测所有问题。联机 chkdsk /scan 将不会影响驱动器或系统的可用性。

Q) 我现在可以运行只读 chkdsk 来检查驱动器的状态;是否还需要执行这样的操作?
不,我们建议您改为运行 chkdsk/scan,因为这还会执行所有可能的联机修复,并且还将为定点修复进行准备(如果需要)。