只是一个警告:如果您决定启用Integrity Streams,您需要非常、非常、非常小心。
简洁版本
Integrity Streams 禁用所有弹性,并将导致 ReFS 删除有读取错误的文件。
长版
启用 Integrity Streams 后,如果出现读取错误,ReFS 将删除坏文件。
- 如果您有 300 GB 的文件(例如 WindowsSever2012R2_prod.vhdx)
- ReFS 甚至可以检测到单个不可纠正的位
- 它将删除整个文件
没有确认。没有警告。没有上诉。
一个不可恢复的读取错误,所有数据都消失了。如果您不喜欢它:您不应该启用完整性流。
这种行为被非常安静地记录下来,使用了非常无害的术语:
主要优势
弹性
- 挽救数据- 如果卷损坏并且损坏数据的备用副本不存在,
ReFS removes the corrupt data from the namespace
. ReFS 在处理大多数不可纠正的损坏时使卷保持联机,但在极少数情况下需要 ReFS 使卷脱机。
(强调我的)。
存储空间将记录您的数据现已消失的 Windows 事件日志:
- 来源:Microsoft-Windows-ReFS
- 事件编号:513
(警告):文件系统检测到文件损坏。The file has been removed from the file system namespace
. 该文件的名称是“M:\VirtualDisks\WindowsServer2012R2_Prod.vhdx”。
所以,“警告”,我们删除了一个虚拟服务器,以及上面的所有内容,因为我们发现了一个坏位。
通过启用 Integrity 流,您可以特别选择加入此 *un-*resilient 功能。
数据可能实际上并未被删除
文档说明:
ReFS 从命名空间中删除损坏的数据
这是真的;您在任何地方都找不到该文件-它已经消失了。如果您有一个 1.2 TB 的数据库文件,并且有一个不可恢复的位,那么您的 1.2 TB 数据就消失了——就像删除一个文件一样。
但是文件继续用完存储空间中的空间。换句话说,该文件似乎实际上仍然存在,但它是"inaccessible"。
但是鉴于没有记录或已知的方法可以使文件再次“可访问” (即“取消删除”它),结果是相同的 - 您的数据被删除。
所以请注意
完整性流的一个基本设计目标是:
如果您启用完整性流:那么您同意您处于宁愿删除数据而不是冒险返回部分数据的情况。
我想不出任何情况,在任何地方,在任何行业,在世界的任何地方,有人会希望他们的“弹性”文件系统在出现一次读取错误的情况下故意删除所有内容。
但这就是你所要求的。
我想这有点道理:
如何模拟它
以管理员身份运行HxD ,打开\.\PhysicalDiskx进行写入:
翻转一点,然后保存。

我不会在这个演示中实际使用它,因为在我的三向镜像上我启用了完整性流;我不想丢失我的所有数据。
更新:也许您可以选择不丢失所有数据
我正在运行命令以确保我已完全禁用任何意外使用Integrity Streams的任何地方,并且输出Get-FileIntegrity
有一些奇怪的东西:
PS M:\> Get-Item . | Get-FileIntegrity
FileName Enabled Enforced
-------- ------- --------
M:\ False True
“强制”到底是什么意思?Integrity Streams怎么可能被“强制执行”,但没有被启用?像往常一样,文档不Get-FileIntegrity
包含文档。
所以我尝试检查文档Set-FileIntegrity
;它有东西!
-执行
指示如果完整性流指示数据损坏,是否启用对文件的阻止访问。
如果为此参数指定值 $True,则 cmdlet 还会启用文件的完整性。
就是这样!
- 这是默认功能的损坏,
- 这将导致您完全丢失数据
- 如果发生最小的不可纠正的读取错误
妈妈叉着衬衫球。谁是想出那个的分叉板凳。
它默认开启!默认情况下绝对不应该启用该功能!该功能甚至不应该存在!
所以现在我正在运行一个命令来递归设置选项:
命令
首先是查找启用了完整性的任何文件的命令:
PS M:\> Get-ChildItem -Recurse | Get-FileIntegrity | Where {$_.Enabled -EQ $true}
FileName Enabled Enforced
-------- ------- --------
M:\Folder1\Folder 2\The Video File 102.mkv True True
M:\Folder1\Folder 2\The Video File 101.mkv True True
M:\Folder1\Folder 2\The Video File 103.mkv True True
M:\Folder1\Folder 2\The Video File 104.mkv True True
M:\Folder1\Folder 2\The Video File 108.mkv True True
M:\Folder1\Folder 2\The Video File 109.mkv True True
M:\Folder1\Folder 2\The Video File 105.mkv True True
M:\Folder1\Folder 2\The Video File 111.mkv True True
M:\Folder1\Folder 2\The Video File 106.mkv True True
M:\Folder1\Folder 2\The Video File 107.mkv True True
M:\Folder1\Folder 2\The Video File 112.mkv True True
M:\Folder1\Folder 2\The Video File 110.mkv True True
所以,是的,我有一些数据处于危险之中。现在我们要关闭它:
PS M:\> Get-ChildItem -Recurse | Get-FileIntegrity | Where {$_.Enabled -EQ $true} | Set-FileIntegrity -Enable $False
奖金阅读