简洁版本
我在 ReFS 卷上有文件,其中 Integrity Stream 完整性强制执行是真的。
PS M:\> Get-Item Contoso.vhdx | Get-FileIntegrity
FileName Enabled Enforced
-------- ------- --------
M:\Contoso.vhdx False True
我想转身强制执行离开:
PS M:\> Get-Item "M:\Contoso.vhdx" | Set-FileIntegrity -Enforce $False
PS M:\> Get-Item Contoso.vhdx | Get-FileIntegrity
FileName Enabled Enforced
-------- ------- --------
M:\Contoso.vhdx False True
我如何关闭强制执行文件完整性?
长版本
ReFS 有一个功能称为完整性流。当您为文件启用此可选功能时,文件系统会维护文件的 CRC。通过此校验和,它可以验证文件是否未损坏。
缺点是完整性流特点是:
- 如果它检测到哪怕一个位错误
- 在一个 340 GB 的文件中(例如
ProductionServer.vhdx
) - 它会删除这全部的文件
没有警告。没有疑问。没有上诉。一个无法纠正的位将导致您丢失所有数据。
这是什么强制执行意味着。这意味着您将遭受完全数据丢失。如果您不喜欢它:您不应该启用文件完整性。
这种行为是悄无声息的记录:
主要优点
弹性
挽救数据 - 如果卷损坏,并且不存在损坏数据的替代副本,ReFS 从命名空间中删除损坏的数据。ReFS 在处理大多数不可纠正的损坏时会使卷保持在线,但在极少数情况下需要 ReFS 将卷脱机。
(重点是我的)
部分记录在设置文件完整性命令:
-执行:表示如果完整性流指示数据损坏,是否启用阻止对文件的访问。
这听起来就像我们想要的不是存在。这听起来像是地球上任何理智的人都不会想要的功能存在,更不用说启用了。但它默认处于开启状态。
笔记: 它说“堵塞”,第一页写着“消除”。无论用什么术语来说:都无法再次访问该文件。也就是说,没有办法“解除阻止”,也没有办法“取消删除”从各方面来看,您的数据都已丢失。
如何关闭强制执行?
问题变成了:你如何将其关闭?
您尝试运行 powershell 命令行:
PS M:\> Get-Item "M:\Contoso.vhdx" | Set-FileIntegrity -Enforce $False
但它不起作用。没有错误;它只是没有关闭选项。
如何让它工作?
- 是的,以管理员身份运行。
- 是的,在提升的 powershell 上。
- Windows Server 2012(6.2.9200)
- Windows 10(10.0.17763.864)
总结:如何关闭强制执行 file integrity
在 ReFS 上?
在启用文件完整性之前,强制执行毫无意义
我发现,尽管文件完整性可能Enforced
,直到文件完整性被Enabled
。
如果Enabled
是$False
,则值无关。
文件完整性
| Enabled | Enforced | Result |
|---------|----------|-----------|
| $False | n/a | No effect | (Default) Irreparable damage will **not** cause the file to be deleted
| $True | $False | Good | A good choice that you have to opt-into. File damage will be found, and simply reported in the event log
| $True | $True | Disaster | Any damage that cannot be repaired and your file will be deleted without warning
我不知道为什么有人会选择执行灾难性的数据丢失;但是还有另一种选择。
有关故意删除数据功能的更多信息
我发现了一个Microsoft 隐藏得很好的 Word 文档。Application Compatibility with ReFS.docx
:
应用程序与 ReFS 的兼容性
微软公司 出版
日期:2012 年 3 月
它提到了该功能(矛盾的是“打捞”),该操作会立即删除您的数据:
1.7 打捞
为了最大限度地提高卷上数据的可用性,ReFS 实现了“挽救”功能,当损坏无法自动修复时,该功能将从命名空间中删除损坏的数据。此功能的目的是确保不可修复的损坏不会对未损坏数据的可用性产生不利影响。例如,如果目录中的单个文件损坏且无法自动修复,则 Salvage 会从文件系统命名空间中删除该文件。文件系统无法打开或删除损坏的文件,因此管理员无法做出响应。使用 Salvage,管理员可以从备份中恢复该文件或让应用程序重新创建它。Salvage 与用户文件、目录和其他文件系统元数据兼容。
对于文件系统过滤驱动程序,您必须实现能够对文件或目录的突然消失做出反应的代码。
请注意,ReFS 不需要 chkdsk,并且 chkdsk 永远不会在 ReFS 卷上运行。
这合理的删除文件的方法是......重复的:
此功能是为了确保不可修复的损坏不会对未损坏数据的可用性造成不利影响。
这没有任何意义,无论从编程、逻辑还是英语角度看都是如此。但事实就是如此。
答案1
我只想指出,我在最新的 Windows 11 上测试了这种行为,以下是我的观察结果:
- 如果你有镜像存储空间,并且单个磁盘上的文件中存在数据损坏,则启用完整性流后,REFS 将自动为你修复该问题
- 如果两个磁盘都损坏,REFS 将阻止对文件的访问,但不会删除它。您可以通过手动将强制标志更改为 false 来重新获得对文件的访问权限(例如 Get-Item 'E:\claclaboth.txt' | Set-FileIntegrity -Enable $True -Enforce $False)
根据上述发现,我认为你可以保留强制标志的默认设置,因为 REFS 不会删除你的文件,而只是阻止它,至少在 Windows 11 和文本文件(我用于测试)上是如此
答案2
Set-FileIntegrity -FileName 'M:\Contoso.vhdx' -Enforce $False
从命名空间中删除损坏的数据,而不是就地标记糟糕的设计决定。 这永远不使用 ReFS 的首要原因。这是我不使用 ReFS 的唯一原因。
一如既往,我们永远不可能拥有美好的事物。 绝不。