文件在重复数据删除的卷上已损坏,这些卷已创建为 NTFS 压缩

本文提供了一个解决方案,解决了无法打开文件并将其记录为重复数据删除卷上的损坏的问题。

原始 KB 数: 3066174

现象

用户无法再打开启用了重复数据删除的卷上的文件,该卷的根目录中启用了 NTFS 压缩。 此外,重复数据删除清理作业可能会记录事件日志中的事件,以报告无法修复的文件量损坏。

原因

出现此问题的原因是,当进程就地写入重复数据删除卷上的文件时,压缩卷根上存储的重复数据删除元数据会损坏。 存储在压缩卷根上的重复数据删除元数据位于系统卷信息 (SVI) 文件夹下。

创建卷时,根目录上启用了压缩的卷不支持重复。 但是,支持对压缩文件夹进行重复数据删除,并按预期运行。

解决方法

若要解决此问题,请不要在启用了卷级压缩的 NTFS 卷上启用重复数据删除。

遗憾的是,无法还原已在已启用重复数据删除的现有压缩卷上已损坏的数据。 如果备份可用,则必须从备份还原已损坏的文件。

若要解压缩重复数据删除元数据文件夹,以便此卷上的重复数据删除文件的写入操作不再损坏,请执行以下步骤。

注意

在示例命令中, <X> 是已创建为压缩且启用了重复数据删除的卷。

  1. 从以下 Windows Sysinternals 网站下载 PsExec 工具: PsExec v2.2

    注意

    PsExec 工具允许用户通过拥有“SYSTEM”用户权限来运行进程。 这是访问位于系统卷信息文件夹中的受保护重复数据删除元数据文件夹所必需的。

  2. 阻止受影响卷上的用户的数据访问。 为此,请运行以下 Windows PowerShell disable-dedupvolume 命令:

    disable-dedupvolume X: -dataaccess
    

    注意

    • 此命令会卸载卷,然后重新装载卷,而不附加重复数据删除筛选器。 这会阻止用户访问任何重复数据删除的文件。
    • 卸载操作使此卷上任何打开的文件句柄失效。
  3. 使用 PsExec 以“SYSTEM”用户身份运行Cmd.exe。 为此,请运行以下命令:

    Psexec.exe -i -s cmd
    

    注意

    “命令提示符”窗口现在将通过分配“SYSTEM”用户权限打开。

    注意

    “SYSTEM”帐户是具有比管理员帐户更高的访问权限级别的用户帐户。 用户应小心地仅执行本文中提到的步骤,同时运行“SYSTEM”帐户。 用户应特别小心,不要更改 ACL 或获取系统卷信息文件夹的所有权。

  4. 在 PsExec 命令提示符窗口中,找到受影响卷的系统卷信息文件夹。

  5. 验证卷的重复数据删除元数据文件夹当前是否已压缩。

  6. 解压缩卷的重复数据删除元数据文件夹。

  7. 在 PsExec 命令提示符窗口中运行以下命令:

    X:\System Volume Information>compact /s:Dedup
    

    输出将包含以下摘要消息:

    N 目录中的 M 文件
    <X> 已压缩, <Y> 未压缩。

    如果 <X> 大于零(0),请转到步骤 8。 否则,请转到步骤 11,因为重复数据删除元数据文件夹未压缩。

  8. 在 PsExec 命令提示符窗口中运行以下命令:

    X:\System Volume Information>compact /u /s:Dedup
    
  9. 等待取消压缩重复数据删除元数据文件夹。 该过程一次处理一个文件,并且速度可能很慢。

    注意

    此过程所需的时间与卷上的数据量成正比。 对于包含 TB 数据卷,此过程可能需要几个小时才能完成。 完成后,命令将退出并生成以下状态消息:
    M 目录中的 N 个文件未压缩。

  10. 在 PsExec 命令提示符窗口中,运行以下“显示压缩状态”命令,验证数据删除元数据文件夹中是否有压缩的文件。

    X:\System Volume Information>compact /s:Dedup
    
  11. 关闭 PsExec 命令提示符窗口。

  12. 在受影响的卷上为用户重新启用数据访问。 为此,请运行以下命令:

    Enable-DedupVolume X: -DataAccess
    

    注意

    • 此命令卸载,然后使用附加的重复数据删除筛选器重新装载卷。 用户现在可以访问重复数据删除的文件。
    • 卸载操作使此卷上任何打开的文件句柄失效。

注意

若要防止发生类似的损坏,请在创建为压缩的所有已启用重复数据删除的卷上执行此过程。