因此,我在家里有一个设置,我运行 Windows Server 2019,该设置运行通过磁盘管理器创建的 5 个磁盘的软件 Raid 5 设置。由于这是一个家庭系统,我发现使用合适的硬件 raid 并不值得(而且那些更便宜的“家用”raid 卡只是将计算卸载到 CPU,并且没有电池支持)。服务器有 8 个内存条,分为 2 组,每组 4 个(Set1 和 Set2)
现在,几周前,服务器崩溃了,黑屏,完全没有响应。重启后,RAID 阵列开始重新同步。然后 2 天后它又崩溃了。查看后,我发现其中一个内存模块已经严重损坏,几乎在我对其进行的所有测试中都失败了。因此,我移除了包含这个模块的 4 个模块组 (Set1),并留下了包含四个模块的第二组 (Set2)。
现在,我留在那里的内存(Set2)上的重新同步已经顺利完成,但是,当我更换了坏的内存时,我更换了服务器中的所有内存(包括留在那里的内存),以确保所有内存模块都属于同一类型和规格。
从服务器移除该工作集 (Set2) 后,我决定对它们进行测试,结果发现其中一根内存条也坏了,其中一根内存条始终在单个内存地址处发生故障。虽然不是 Set1 中的内存条那样无休止的错误列表,但仍然是一个错误。
问题就在这里。我的磁盘上的奇偶校验数据有可能是坏的吗?我不太了解在重新同步期间如何计算和处理这些数据,或者,由于这些数据量非常小,它是否真的会离开 CPU 缓存甚至进入主内存。我担心如果我的奇偶校验数据是坏的,那么下次我需要更换 RAID 阵列中的坏磁盘时,这将导致灾难。
我已经有了这样的想法,除非有人说服我,否则它就是坏的,但我希望对 Windows 中软件 raid 重新同步过程的工作原理有更深的技术知识的人能够确认或否认这一点。也许有一些检查可以真正检测并防止出现问题?如果存在问题的风险,有没有办法可以强制 Windows 重新同步阵列以替换奇偶校验数据,而无需强制断开电源?(而且我也不想通过移除磁盘来故意损坏阵列,因为如果奇偶校验数据有问题,这只会导致我想避免的问题。)
是的,我拥有所有历史记录的最新备份。
答案1
是的,我拥有所有历史记录的最新备份。
这真是太棒了!我想我必须给你上一堂关于备份的标准课。你可能需要它们。
也许有一些检查可以真正检测出并防止这个问题的发生?
这就是 ECC RAM 的作用。ECC 模块可以纠正每个字节的一个错误位翻转,并检测所有 2 位错误(以及一些 2+ 位错误)。在后一种情况下,它会导致机器崩溃,因为这比处理已知错误数据更安全。
ECC 在服务器中非常重要,因为如果没有它,系统就必须盲目地相信内存中的数据是正确的。DDR5 规范甚至要求所有模块都具有 ECC。
不过,听起来你没有 ECC 内存,所以你不能确定你的数据没问题。我通常认为 RAID 不可信,因为 RAID5 只能检测错误,但不能正确纠正错误(除非文件系统可以做到这一点,而据我所知 NTFS 做不到)。清理阵列将使其保持一致,但不能保证所做的调整是正确的。
您可以:
- 销毁阵列,创建新阵列并从备份中恢复,或者
- 清理阵列并将哈希值与已知良好的副本进行比较。
这是假设您知道您的备份没有问题。如果源系统正在悄悄破坏数据,情况可能并非如此。
考虑切换到 ECC 内存以防止将来再出现这种情况。