我被要求修理一台过了保修期的笔记本电脑,Windows 10S 在启动时会挂起数小时并且无法启动。在尝试了所有我能想到的方法后,我放弃了,并安装了 Ubuntu。
Ubuntu 启动后会运行几分钟直到冻结(通常在启动 Chrome 后)。
我运行了 memtest86,结果显示 RAM 错误(无法更换 RAM,因为它是焊接的)。我想标记 BadRam,但无法全部识别。
我的问题是 - memtest86 通过了测试 1-5 以及测试 10 和 13。它未通过测试 6、7、8。和 9。有什么想法为什么会发生这种情况,以及 GRUB_BADRAM 或在 UEFI 中调整 RAM 设置是否有帮助?
'''
Test # Tests Passed Errors
Test 0 [Address test, walking ones, 1 CPU] 4/4 (100%) 0
Test 1 [Address test, own address, 1 CPU] 4/4 (100%) 0
Test 2 [Address test, own address] 4/4 (100%) 0
Test 3 [Moving inversions, ones & zeroes] 4/4 (100%) 0
Test 4 [Moving inversions, 8-bit pattern] 4/4 (100%) 0
Test 5 [Moving inversions, random pattern] 4/4 (100%) 0
Test 6 [Block move, 64-byte blocks] 0/4 (0%) 94
Test 7 [Moving inversions, 32-bit pattern] 0/4 (0%) 29
Test 8 [Random number sequence] 0/4 (0%) 41
Test 9 [Modulo 20, ones & zeros] 0/4 (0%) 177
Test 10 [Bit fade test, 2 patterns, 1 CPU] 4/4 (100%) 0
Test 13 [Hammer test] 4/4 (100%) 0
RAM 为 4 GB,4 个 DIMM 插槽,
1GB LPDDR4 PC4-17000
SK Hynix / H9HCNNN8KUMLHR / 00000000
2133 MHz
最后 10 个错误(在 memtest86 中)是
2020-07-09 16:17:43 - [Data Error] Test: 9, CPU: 1, Address: 178A4D6B4, Expected: 90BD5162, Actual: 90BD5160
2020-07-09 16:17:24 - [Data Error] Test: 9, CPU: 1, Address: 17052573C, Expected: 4230F0F6, Actual: 4230F0F4
2020-07-09 16:17:08 - [Data Error] Test: 9, CPU: 0, Address: 17795431C, Expected: 0146A628, Actual: 0146A62A
2020-07-09 16:16:52 - [Data Error] Test: 9, CPU: 1, Address: 168B0F3B4, Expected: 9E286A4A, Actual: 9E286A48
2020-07-09 16:15:57 - [Data Error] Test: 9, CPU: 0, Address: 15F787234, Expected: 43135D5C, Actual: 43135D5E
2020-07-09 16:15:54 - [Data Error] Test: 9, CPU: 1, Address: 1501AE294, Expected: A0EE6E32, Actual: A0EE6E30
2020-07-09 16:15:13 - [Data Error] Test: 9, CPU: 0, Address: 14E3C71F8, Expected: 0AC0FD2E, Actual: 0AC0FD2C
2020-07-09 16:14:59 - [Data Error] Test: 9, CPU: 1, Address: 1424E7234, Expected: C0BE5E14, Actual: C0BE5E16
2020-07-09 16:14:29 - [Data Error] Test: 9, CPU: 1, Address: 13B3A53BC, Expected: 6368E450, Actual: 6368E452
2020-07-09 16:14:04 - [Data Error] Test: 9, CPU: 1, Address: 128174E74, Expected: AAD22C33, Actual: AAD22C31
谢谢
答案1
如果您查看/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"
另请参阅如何在带有已焊接 RAM 模块且单元已损坏的笔记本电脑上安装 Ubuntu
来源: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
并重新启动,我的坏内存不再被使用。使用此方法无需内核补丁即可映射坏内存。