如何关闭 ReFS“强制”文件完整性?

Ian*_*oyd 4 data-integrity windows-server-2012 refs windows-10

简洁版本

\n\n

我在 ReFS 卷上有文件,其中“强制执行Integrity Stream 完整性”为 true。

\n\n
PS M:\\> Get-Item Contoso.vhdx | Get-FileIntegrity\n\nFileName         Enabled  Enforced\n--------         -------  --------\nM:\\Contoso.vhdx  False    True\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想关闭强制

\n\n
PS M:\\> Get-Item "M:\\Contoso.vhdx" | Set-FileIntegrity -Enforce $False\nPS M:\\> Get-Item Contoso.vhdx | Get-FileIntegrity\n\nFileName         Enabled  Enforced\n--------         -------  --------\nM:\\Contoso.vhdx  False    True\n
Run Code Online (Sandbox Code Playgroud)\n\n

如何关闭强制文件完整性?

\n\n

长版

\n\n

ReFS 有一个称为Integrity Streams 的功能。当您为文件启用此可选功能时,文件系统会维护文件的 CRC。通过此校验和,可以验证文件是否未损坏。

\n\n

Integrity Streams功能的缺点是:

\n\n
    \n
  • 如果它检测到哪怕是一位错误
  • \n
  • 在一个 340 GB 的文件中(例如ProductionServer.vhdx
  • \n
  • 它将删除整个文件​
  • \n
\n\n

没有警告。没有问题。没有上诉。一个无法纠正的位就会丢失所有数据。

\n\n

这就是强制的意思。这意味着您被迫遭受完全数据丢失。如果您不喜欢它:您就不应该启用文件完整性

\n\n

这种行为被悄悄记录下来:

\n\n
\n

主要优点

\n\n

弹性

\n\n

挽救数据 - 如果卷损坏且损坏数据的备用副本不存在,ReFS 将从命名空间中删除损坏的数据。ReFS 在处理大多数不可纠正的损坏时使卷保持在线状态,但在极少数情况下需要 ReFS 使卷离线。

\n
\n\n

(强调我的)

\n\n

Set-FileIntegrity cmdlet中也有部分记录

\n\n
\n

-Enforce:指示如果完整性流表明数据损坏,是否启用对文件的阻止访问。

\n
\n\n

这听起来像是我们希望不存在的事情。这听起来像是地球上任何理智的人都不想存在的功能,更不用说启用了。但它默认是打开的。

\n\n

注意:上面写着“阻止”,第一页写着“删除”。无论使用什么术语:都无法再次访问该文件。即没有办法“解除阻止”它,也没有办法“解除删除”它。从所有方面来说,您的数据都消失了。

\n\n

如何关闭强制

\n\n

问题是:如何将其关闭?

\n\n

您尝试运行 powershell commandlet:

\n\n
PS M:\\> Get-Item "M:\\Contoso.vhdx" | Set-FileIntegrity -Enforce $False\n
Run Code Online (Sandbox Code Playgroud)\n\n

但它不起作用。没有错误;它只是不会关闭该选项。

\n\n

如何让它发挥作用?

\n\n
    \n
  • 是的,以管理员身份运行。
  • \n
  • 是的,在提升的 powershell 上。
  • \n
  • Windows Server 2012 (6.2.9200)
  • \n
  • Windows 10 (10.0.17763.864)
  • \n
\n\n

tl;dr:如何关闭ReFS 上的强制执行? file integrity

\n\n

在启用文件完整性之前,强制没有任何意义

\n\n

我在接下来的几个月中发现,即使文件完整性可能是Enforced,但在文件完整性达到之前,强制执行不会产生任何效果。Enabled

\n\n

如果Enabled$False,则该值无关。

\n\n

文件完整性

\n\n
| Enabled | Enforced | Result    |\n|---------|----------|-----------|\n| $False  | n/a      | No effect | (Default) Irreparable damage will **not** cause the file to be deleted\n| $True   | $False   | Good      | A good choice that you have to opt-into. File damage will be found, and simply reported in the event log\n| $True   | $True    | Disaster  | Any damage that cannot be repaired and your file will be deleted without warning\n
Run Code Online (Sandbox Code Playgroud)\n\n

我不知道为什么有人会选择强制执行灾难性数据丢失;但还有一个选择。

\n\n

有关故意删除您的数据功能的更多信息

\n\n

我发现了Microsoft 隐藏得很好的 Word 文档Application Compatibility with ReFS.docx:

\n\n
\n

应用程序与 ReFS 的兼容性

\n\n

微软公司
\n 发布时间:2012 年 3 月

\n
\n\n

它提到了该功能(自相矛盾地称为“抢救”它提到了立即删除您的数据的

\n\n
\n

1.7 打捞

\n\n

为了最大限度地提高卷上数据的可用性,ReFS 实现了 \xe2\x80\x9csalvage\xe2\x80\x9d,该功能可在无法自动修复损坏的情况下从命名空间中删除损坏的数据。此功能背后的目的是确保不可修复的损坏不会对未损坏数据的可用性产生不利影响。例如,如果目录中的单个文件损坏并且无法自动修复,则抢救将从文件系统名称空间中删除该文件。文件系统无法打开或删除损坏的文件,从而使管理员无法做出响应。通过抢救,管理员可以从备份中恢复该文件或让应用程序重新创建该文件。Salvage 与用户文件、目录和其他文件系统元数据兼容。

\n\n

对于文件系统筛选器驱动程序,您必须实现能够对突然消失的文件或目录做出优雅反应的代码。

\n\n

请注意,ReFS 不需要 chkdsk,并且 chkdsk 永远不会在 ReFS 卷上运行。

\n
\n\n

删除文件的理由是……同义反复:

\n\n
\n

此功能是为了确保不可修复的损坏不会对未损坏数据的可用性产生不利影响。

\n
\n\n

无论是在编程、逻辑还是英语方面,这都没有任何意义。但它就在那里。

\n

小智 5

我只想指出,我在最新的 Windows 11 上测试了此行为,以下是我的观察结果:

  1. 如果您有镜像存储空间,并且单个磁盘上的文件中存在数据损坏,REFS 将在启用完整性流的情况下自动为您修复它
  2. 如果两个磁盘都损坏,REFS 将阻止对该文件的访问,但不会删除该文件。您可以通过手动将强制标志更改为 false 来重新获得对文件的访问权限(例如 Get-Item 'E:\claclaboth.txt' | Set-FileIntegrity -Enable $True -Enforce $False)

根据上述发现,我认为您可以将强制标志保留为默认值,因为 REFS 不会删除您的文件,只是阻止它,至少在 Windows 11 和文本文件上(我用于测试)