我有一台运行 Windows Server 2008 R2 的服务器,带有(Windows 原生)软件 raid-5 阵列。该阵列由 7 个 1TB Western Digital RE3 和 RE4 驱动器组成。我有此阵列的离线备份。
问题是这样的:几天前,我将一个大文件复制到磁盘后,发现该文件存在完整性问题 - 该文件大约有 12GB,是我通过 uTorrent 下载的。将其移动到 raid 阵列后,我使用 uTorrent 重新定位下载位置,并执行重新检查,以便可以从该位置进行播种。重新检查发现,复制的文件中只有 6308/6310 个块是完整的。
我的下一步是编写一个快速的 powershell 脚本,将文件复制到阵列,同时对原始文件和结果文件执行 SHA1 哈希并进行比较。较小的文件(100-1000MB)可以很好地复制。当我开始复制较大的数据(~15GB)时,我发现哈希校验失败的概率约为 2/3。损坏的文件具有非常非常小的不一致之处 - 小于 0.01%(编辑 - 后来的实验表明,损坏的数据块长度始终为 60 字节,通常每复制 15GB 文件会出现一到三个。损坏的数据似乎是随机的,没有一致的翻转位模式)。我通过将这个大文件放在服务器的 C:\ 上,并将其从那里反复复制到阵列,进一步排除了网络或客户端问题的可能性,看到了类似的结果。
通过 explorer、powershell 或标准 windows 命令提示符复制数据会产生相同的结果。所有复制均未失败或报告任何问题。raid 阵列本身在磁盘管理中被列为健康状态。
经过几次试验后,我关闭了服务器并运行了 memtest 一整夜。没有检测到任何错误。基本运行 chkdsk 也没有发现任何问题,但我没有使用 /R 标志,因为我不确定这会对软件 raid-5 卷产生什么影响。
接下来,我运行 Crystal Disk Info 检查驱动器上的智能数据 - 但发现 CDI 仅检测到阵列中 7 个磁盘中的 5 个。我不知道为什么。尽管如此,CDI 在其中一个驱动器上显示了以下“警告”标志:
05 199 199 140 000000000001 Reallocated Sectors Count
C5 200 200 __0 000000000001 Current Pending Sector Count
这有点令人担忧,但我真的不知道如何处理这些信息。我几乎不认为一个重新分配的扇区会导致这种情况。
此时,我正在寻找一些关于下一步该做什么的指导。我需要确定此问题的原因,但我犹豫是否要运行 chkdsk /R 或任何可启动磁盘健康检查程序,因为我担心它们可能会破坏阵列。我考虑过触发阵列的重新同步,但我实际上不确定如何在不做一些愚蠢的事情(例如手动删除磁盘然后恢复它)的情况下做到这一点。
如有任何建议能够帮助我找出该问题的确切原因,我将不胜感激。
答案1
由于您执行的操作均未失败,因此运行chkdsk /R
可能不会产生任何结果 - chkdsk 无法恢复未被检测到损坏的任何内容。
您所看到的数据损坏可能有几个来源:
- 在写入数据之前,软件 RAID 算法执行中的位翻转
- 写入数据时硬件实现的位翻转
- 磁性介质上的位翻转
- 读取数据时硬件实现的位翻转
您应该选择一种有条不紊的方法来排除那些您可以排除的:
第 4 点 - 读取时发生位翻转 - 应该很容易识别,因为翻转会发生在不同的数据区域,因此当您尝试在大型文件上计算 md5 或 sha1 哈希时,它们会不时发生变化
第 3 种情况 - 磁性介质上的翻转 - 不太可能不被检测到,因为每个硬盘都包含前向纠错算法以及错误检测校验和,并且您肯定会看到不可恢复的扇区读取错误,其数量级比位翻转要高得多 - 查看 SMART 不可恢复读取错误应该足以排除这种情况
第 2 种情况 - 这种情况很难检测。尽管 SATA 协议通过错误校正算法保护传输的数据,其中第 3 种情况的逻辑将适用,并使任何传输速度减慢到爬行速度,然后才让翻转的位扇区通过,但损坏可能发生在其他地方并且无法检测到 - 例如在缓冲区中。
第一种情况 - 我认为这是最有可能的情况。要么是实施中的错误,要么是(更有可能的是,这种重大的错误可能会在操作系统发布 4 年后在其他地方被注意到和记录)硬件故障(如 RAM 缺陷)可能导致这种位翻转。进行几次内存测试以排除 RAM,特别是如果您不使用 ECC 内存。在具有相同软件配置的类似环境中重新运行测试(最好是系统映像),以排除基于软件的原因。
您还可以将测试扩展到复制 15 GB 的较小文件,只是为了看看在写入一定量的数据后损坏是否也会影响其中一个文件。如果是这种情况(根据您的描述,这似乎很有可能),您应该假设已经放在磁盘上的数据也发生了类似的损坏 - 尝试与较大文件的原始数据或已知良好的加密哈希进行比较,以估计损坏程度。
此外,如果能够重新计算 XOR 校验和并将其与磁盘上存储的奇偶校验数据进行比较,那就太好了,大多数 RAID 5 系统都提供此功能,通常称为“清理”。对于 Windows,似乎没有办法开箱即用地做到这一点。我只能找到可以为您执行此操作的数据恢复服务。
祝狩猎顺利。
答案2
chkdsk(不带 /R)将是您运行的第一项。如果出现问题,请运行 chkdsk /R。您可能遇到磁盘控制器问题,而不是磁盘问题。如果每次运行 chkdsk(不带 /R)时,都报告不同的块损坏,那么这是控制器问题,而不是磁盘问题。