根据标题。
自从我购买了新的 RAM 芯片后,我的计算机就出现了一些奇怪的问题,这让我怀疑这是否是 RAM 芯片的错。
为了测试它,我想将 ubuntu 配置为仅使用一个芯片,然后再使用另一个芯片。我不介意执行复杂的程序(也许手动分配未使用的芯片上的所有内存,以便所有进程都驻留在另一个芯片上?)但介意尝试危险的程序
最简单的解决方案可能是打开计算机并物理移除芯片,但如果可能的话我想避免这样做(因为担心造成损坏/打开和关闭机器的困难)
我如何告诉 ubuntu 不要使用某些内存地址?提供了一个部分解决方案:给定要避免的地址,我们可以关闭它们。但仍然需要知道哪个芯片中的地址是什么
答案1
记忆测试
首先,前往https://www.memtest86.com/并免费下载/运行它们memtest
来测试你的记忆力。至少完成一次所有 4/4 测试以确认记忆力良好。这可能需要几个小时才能完成。
我怀疑这memtest
会失败。移除新的 SODIMM/DIMM 并重新运行memtest
。如果通过,移除已通过的 SODIMM/DIMM,重新插入另一个 SODIMM/DIMM,然后重新运行memtest
。
巴德拉姆
看如何在带有已焊接 RAM 模块且单元已损坏的笔记本电脑上安装 Ubuntu
如果您查看/etc/default/grub
,您会发现一个GRUB_BADRAM=
参数,您可以通过它识别存在哪些坏的内存位置。
# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"
来源:https://help.ubuntu.com/community/BadRAM#BADRAM_setting_in_Grub2
Grub2 中的 BADRAM 设置
Natty中的 GRUB2 配置文件中有一行用于配置内核坏内存排除。因此,我假设这是映射显示错误的内存部分的首选方法。我设置的行是
GRUB_BADRAM="0x7DDF0000,0xffffc000"
我发现每个网站上都建议这样做,即运行memtest86
并让它显示 BadRAM 设置。memtest86
给了我一页我必须输入的内容。我可以看到所有地址都在一个 16K 块中,所以我只想将该 16K 块映射为无效。下面是我生成正确条目的方法。
第一个参数很简单。即坏内存的基地址。就我而言,我可以看到所有坏地址都大于 0x7DDF0000 且小于 0x7DDF4000。因此,我将 16K 块的开头作为起始地址。
第二个参数是掩码。在您想要的地址范围共享相同值的地方放置 1,在它会变化的地方放置 0。这意味着您需要选择地址范围,使得只有低位会变化。查看我的地址,掩码的第一部分很简单。您想从 0xffff 开始。对于下一个半字节,我将使用位图进行解释。我希望范围从 0000 到 0011。因此,badram 的掩码将是 1100 或十六进制 c。掩码中的最后 3 个半字节需要全部为 0,因为我们希望映射整个范围。因此,我们得到的总结果是 0xffffc000。
在设置此行后/etc/default/grub
,我运行sudo update-grub
并重新启动,我的坏内存不再被使用。使用此方法无需内核补丁即可映射坏内存。
更新#1:
如果内存错误未出现在较低内存中,您可以添加“mem=##MB”内核选项以暂时禁用该点以上的内存。例如:根据memtest86
,我的内存条在 315MB 和 325MB 之间有错误。通过添加“mem=314MB”,我告诉内核假装我只有 314MB。我的系统将足够稳定以构建补丁,此时我可以传递一个参数以仅跳过 315MB 和 325MB 之间的部分(这为我提供了 502MB 的可用内存)。
IE:启动 Ubuntu Live,在 GRUB 菜单上,点击e进入编辑模式,使用箭头键找到“quiet splash”,更改为“quiet splash mem=2048MB”,CTRL+x或F10继续启动。