内存测试显示我的主板上的 RAM 模块有故障。与大多数计算机一样,我的 RAM 没有错误校正码 (ECC),这会导致工作期间出现各种问题。
在我拥有的八个 RAM 模块中,我无法说出具体涉及哪个模块,并且模块位于 CPU 的重型散热器后面:我担心没有足够的知识和工具来正确地移除和更换它。
我没有抱太大希望,但是...有没有办法,通过 BIOS:
禁用单个内存模块?然后我会对剩余的模块进行内存测试,直到我能隔离出故障的模块?
模拟校正代码(代价是计算机变慢)?
答案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 对于任何严肃的应用程序都不可或缺的原因。