如何以编程方式模拟文件损坏以测试ReFS运行状况检查和恢复功能?

问题描述 投票:1回答:2

我想以编程方式测试Windows ReFS Health Check and Recovery功能。

注意:ReFS仅检测bitrot(无自愈)。要让ReFS检测和自动修复,还必须使用存储空间。所以,我准备了一个带有双向镜像设置的存储镜像空间池S:\

ReFS完整性流已启用,

PS C:\> Set-FileIntegrity -FileName 'S:\' -Enable $True

按照说明找到here

如何以编程方式模拟文件损坏以测试ReFS运行状况检查和恢复功能?

我找不到一种介绍比特腐烂的简单方法。我尝试的所有系统只执行ReFS可接受的更改为合法的。

如果可能,PowerShell方法最好。 Perl,Python或任何其他好东西。

先感谢您。

windows powershell filesystems corruption refs
2个回答
2
投票

要创建损坏,请使用Hard Disk Sentinel Pro中的破坏性写入测试。将其设置为随机而非顺序工作。我将其设置为写随机的位模式。只需运行一到三分钟,你就会在显示的地图上看到整个驱动器上的一大堆斑点被摧毁。

这是我如何进行一些测试(我打字很快,所以我希望我不要留下一些东西)

  1. 几乎用文件填充ReFS镜像存储空间。
  2. 为所有文件启用文件完整性: Get-ChildItem -Path'i:*' - Recurse | Set-FileIntegrity -Enable $ True -Enforce $ False

我们稍后使用Enforce $ True进行另一次测试,但先做假的测试。你以后会明白为什么。阅读启用和强制执行。

  1. 卸下其中一个驱动器并将其连接到另一台计算机上的SATA端口。
  2. 在第二台计算机上,使用Hard Disk Sentinel引入文件损坏
  3. 删除损坏的驱动器并将其放回带有存储空间的第一台计算机中。您现在将拥有一个镜像存储空间,其中一个驱动器是可以的,一个有一堆损坏的文件。

尝试将存储空间中的所有文件大量复制到其他驱动器。

我的测试表明几乎没有任何东西得到修复,事件日志中几乎没有任何东西出现。也许是一两个错误就是这样。你可能认为首先可能没有多少损坏。那么现在设置Enforce $ True并再次执行复制操作。启用Enforce后,副本将停止数十个具有校验和错误的文件 - 证明在这种情况下ReFS正在查看校验和。

问题是日志中几乎没有任何内容出现。此外,在Enforce on的情况下,我在一个文件上出现了校验和错误,该文件在第一次测试期间被强制关闭时应该已经修复!

检查这些线程:

Why Use ReFS?

ReFS test with corrupt data. Does it work

Has anyone run the Data Integrity Scan on an ReFS volume?

ReFS /存储空间会不时记录问题,人们会看到这一点,所以他们只是假设它运行良好。此外,人们找不到创建测试损坏的好方法,因此他们不打扰测试。我在Windows 10 Pro for Workstations SKU上进行了测试,结果非常糟糕。

请自己运行一些测试以确认我的发现。


1
投票

听起来好像你想直接写入底层存储,绕过文件系统。这意味着直接写入磁盘/分区/卷。在Windows中,这可以通过针对较低级别的构造(例如\\.\PhysicalDrive0)来完成 - 您可以打开这样的设备的“文件”句柄并直接写入扇区。您可能会发现一些可以做到这一点的低级工具。

在Linux中,这有点容易,因为您可以使用dd写入任何块设备。

如果您的Windows机器是VM,则可能最容易从主机编辑VHDX文件(“硬盘”),可能使用HEX编辑器。

将特定文件映射到包含其数据运行的磁盘扇区可能有点困难。有几种方法可以检测数据的确切位置,但您可以采用一种简单的强力方法来编写特定的看似唯一的数据,然后只需扫描整个磁盘即可找到它。

© www.soinside.com 2019 - 2024. All rights reserved.