通过 BIOS 禁用有故障的 RAM 模块,或者在 RAM 本身没有错误时让 BIOS 模拟错误修正码?

通过 BIOS 禁用有故障的 RAM 模块,或者在 RAM 本身没有错误时让 BIOS 模拟错误修正码?

内存测试显示我的主板上的 RAM 模块有故障。与大多数计算机一样,我的 RAM 没有错误校正码 (ECC),这会导致工作期间出现各种问题。

在我拥有的八个 RAM 模块中,我无法说出具体涉及哪个模块,并且模块位于 CPU 的重型散热器后面:我担心没有足够的知识和工具来正确地移除和更换它。

我没有抱太大希望,但是...有没有办法,通过 BIOS:

  1. 禁用单个内存模块?然后我会对剩余的模块进行内存测试,直到我能隔离出故障的模块?

  2. 模拟校正代码(代价是计算机变慢)?

答案1

我不知道有什么方法可以在 BIOS 中阻止坏 RAM。在 Linux 下,您可以使用 Grub 标记它,在 Windows 下使用bcdedit,这样启动可能会成功。如果坏内存仍然阻止启动过程,那么除了更换它之外没有其他解决方案。

Linux

使用 Grub 的方法是通过编辑文件/boot/grub/menu.lst,找到如下行:

kopt=root=UUID=f0906667-bcde-4b64-86bc-5a47320d5517 ro

并将坏内存规范附加到其中。例如,对于 804M 和 806M 处的坏内存,我们将附加以下文本: memmap=10M$800M。通过运行来终止sudo update-grub

有关详细信息,请参阅 记忆力差怎么办

也可以为此修补内核。详细信息请参阅博客 坏RAM

视窗

文章 Windows 中的黑名单坏内存地址 描述如何使用bcdedit标记坏内存,使用以下命令:

# Enable memory blacklisting
bcdedit /set {badmemory} badmemoryaccess no
# Specify what addresses to blacklist
bcdedit /set {badmemory} badmemorylist 0x1bfae5 0x116a3f

为了验证,请使用:

bcdedit /enum {badmemory}

如果您使用 MemTest 查找错误地址,请注意,它会通过截断地址返回需要截断为 4K 块的字节地址。上述命令针对 0x1BFAE5474 和 0x116A3FE55 上的错误。

bcdedit命令缺乏对范围的支持,因此必须在一行中指定每个 4KB 的坏块,并且大小有限制。Github 项目 记性不好 使用为解决该问题而创建的驱动程序解决了该问题。

(注:不保证上述内容将来仍能继续有效。)

答案2

我还没有看到主板上有你要求的两种情况。你需要逐个测试模块以确定哪个模块有故障并更换它。

如果问题不是由彻底的故障引起的,那么请做好准备,因为所有模块单独检查都正常,但一起检查却不行。绝大多数内存问题都是由于模块处于边缘状态而不是故障。这就是为什么 ECC 对于任何严肃的应用程序都不可或缺的原因。

相关内容