我有一台几年前买的华硕 K550V 笔记本电脑,现在已经过了保修期。这台电脑的主板上焊接了 8GB RAM,但 RAM 模块有一些损坏的单元。我无法使用其预装的 Windows 10 Pro,因为它总是出现蓝屏,我甚至无法重新安装它。我在网上看到,可以安装 Ubuntu,并指定它不必使用损坏的 RAM 单元,所以我决定安装这个操作系统。事实上,我在 Linux 世界中还很陌生,所以我想知道是否有安装 Ubuntu 的分步指南,指定如何避免使用坏的 RAM 单元。我已经下载了 19.04 版本并制作了一个可启动的闪存驱动器。谢谢
答案1
笔记:有关 Ubuntu 安装帮助,请参阅这里。
笔记:大多数高端计算机维修店都可以以最低的成本更换有缺陷的 8G RAM 芯片,而且肯定更可靠。
如果您查看/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"
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
并重新启动,我的坏内存不再被使用。使用此方法无需内核补丁即可映射坏内存。
来源:https://help.ubuntu.com/community/BadRAM#BADRAM_setting_in_Grub2
更新#1:
如果您使用的系统已经有(一根)坏的内存条,您有两个选择:a)暂时换上好内存,直到您打好补丁为止b)如果内存错误没有出现在较低的内存中,您可以添加“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继续启动。
更新 #2:
要获取memtest86
,请访问https://www.memtest86.com/并下载/运行他们的免费记忆测试来测试你的记忆力。至少完成一次所有 4/4 测试以确认记忆力良好。这可能需要几个小时才能完成。
更新 #3:
根据坏 RAM 的位置,您可能会遇到问题。Peter Cordes 有个好主意。移除硬盘。将其放入另一台计算机。安装 Ubuntu。修改 GRUB。然后将硬盘放回原来的笔记本电脑。尝试启动它。
答案2
[tab]
使用(可能是或)编辑安装程序命令行e
并设置memmap
内核命令行参数排除memmap=nn[KMG]$ss[KMG][,nn[KMG]$ss[KMG]]
损坏的区域可能对你有用!我怀疑在安装过程中这可以设置得相当广泛。
注意 GRUB2 将消耗$
,因此必须对其进行转义\$
例子
memmap=64K\$0x18690000,3G\$4G
@
或者,使用而不是 来指定有效区域$
。这可能是必需的,因为文档中没有明确说明可以指定多个区域进行排除(逗号分隔),而对于包含则明确说明。但是,我非常怀疑多个排除是否有效,因为这似乎是一流的用例。
假设您在安装后使用 GRUB2,您可能希望GRUB_BADRAM=
为已安装的系统设置参数,以使参数保持与 GRUB2 期望的方式一致,如另一个很好的答案是@heynnema