Ubuntu出现内存错误,但MemTest86 +却没有


8

我遇到了一些btrfs和ext4错误。决定测试我的RAM后,出现了下列重复错误memtester。在运行.NET之后,我总是会得到类似的错误memtester。通常在一个小时内完成,但一次却需要4-5个小时。

我的计算机的RAM已焊接。我有额外的空插槽。BIOS中没有设置来禁用板载RAM。

我跑了:

  • Memtest86 + 8次通过(约8小时)
  • MemTest86历时18次(〜9小时)
  • memtesterstressapptest默认在Fedora 27上安装在USB记忆棒上(约10个小时)
  • memtesterstressapptest在Ubuntu 17.10默认直播(约2小时)
  • memtesterstressapptest在USB记忆棒上的Ubuntu 17.10上运行(约8小时)
  • # debsums --changed 唯一更改的文件是主题图像。

他们没有打印任何错误。

我使用默认内核的Ubuntu 17.10(从17.04升级)。内核没有被污染。这是配备Intel Haswell i3的ASUS笔记本电脑。

  • 还通过Linux 4.14.13和4.15.0-rc3,rc4,mainline进行了测试。
  • 还使用清除的英特尔微码程序包进行了测试。

错误是可重现的,或者Nouveau被禁用或启用,没有nvidia二进制驱动程序被加载。

将以下模块列入黑名单: mtd intel_spi_platform intel_spi因为它们不会在默认的Fedora 27安装中加载,并且似乎使某些Lenova笔记本电脑变得砖砌。错误没有停止。

uname -a的输出

Linux hostname 4.13.0-19-generic #22-Ubuntu SMP Mon Dec 4 11:58:07 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

# lsmod的输出

https://paste.ubuntu.com/26222245/

Fedora 27的# lsmod输出

https://paste.ubuntu.com/26226473/

现在的情况

我将硬盘驱动器放入了我认为很好的笔记本电脑(备份笔记本电脑)中,并在那里进行了测试。我得到了错误。现在,我很确定这是软件问题。全新的Ubuntu或Fedora尝试许多小时后,我再也无法在笔记本电脑上触发错误。

我该怎么办?

错误示例:

Loop 6:
  Stuck Address       : ok         
  Random Value        : ok
  Compare XOR         : ok
  Compare SUB         : ok
  Compare MUL         : ok
  Compare DIV         : ok
  Compare OR          : ok
  Compare AND         : ok
  Sequential Increment: ok
  Solid Bits          : ok         
  Block Sequential    : ok         
  Checkerboard        : ok         
  Bit Spread          : ok         
  Bit Flip            : testing 262
FAILURE: 0x00000000 != 0xfffffffeffffffff at offset 0x0ef94000.
FAILURE: 0x00000000 != 0x100000000 at offset 0x0ef94008.
FAILURE: 0x00000000 != 0xfffffffeffffffff at offset 0x0ef94010.
FAILURE: 0x00000000 != 0x100000000 at offset 0x0ef94018.
FAILURE: 0x00000000 != 0xfffffffeffffffff at offset 0x0ef94020.
FAILURE: 0x00000000 != 0x100000000 at offset 0x0ef94028.
FAILURE: 0x00000000 != 0xfffffffeffffffff at offset 0x0ef94030.
FAILURE: 0x00000000 != 0x100000000 at offset 0x0ef94038.
  Walking Ones        : ok         
  Walking Zeroes      : ok         
  8-bit Writes        : ok
  16-bit Writes       : ok

两个RAM插槽都充满了类似的错误:

Loop 1:
  Stuck Address       : ok         
  Random Value        : ok
  Compare XOR         : ok
  Compare SUB         : ok
  Compare MUL         : ok
  Compare DIV         : ok
  Compare OR          : ok
  Compare AND         : ok
  Sequential Increment: ok
  Solid Bits          : ok         
  Block Sequential    : ok         
  Checkerboard        : ok         
  Bit Spread          : testing   4
FAILURE: 0x00000000 != 0x00000050 at offset 0x7da80000.
FAILURE: 0x00000000 != 0xffffffffffffffaf at offset 0x7da80008.
FAILURE: 0x00000000 != 0x00000050 at offset 0x7da80010.
FAILURE: 0x00000000 != 0xffffffffffffffaf at offset 0x7da80018.
FAILURE: 0x00000000 != 0x00000050 at offset 0x7da80020.
FAILURE: 0x00000000 != 0xffffffffffffffaf at offset 0x7da80028.
FAILURE: 0x00000000 != 0x00000050 at offset 0x7da80030.
FAILURE: 0x00000000 != 0xffffffffffffffaf at offset 0x7da80038.
  Bit Flip            : setting 141

错误stressapptest

Report Error: miscompare : DIMM Unknown : 1 : 157s
Hardware Error: miscompare on CPU 2(0x2) at 0x7fcc0726e000(0xb0d18:DIMM Unknown): read:0x0000000000000000, reread:0x0000000000000000 expected:0x4a4a4a4a4a4a4a4a
Report Error: miscompare : DIMM Unknown : 1 : 157s
Hardware Error: miscompare on CPU 2(0x2) at 0x7fcc0726e008(0xb0d18:DIMM Unknown): read:0x0000000000000000, reread:0x0000000000000000 expected:0x4a4a4a4a4a4a4a4a
Report Error: miscompare : DIMM Unknown : 1 : 157s
Hardware Error: miscompare on CPU 2(0x2) at 0x7fcc0726e010(0xb0d18:DIMM Unknown): read:0x0000000000000000, reread:0x0000000000000000 expected:0x4a4a4a4a4a4a4a4a
Report Error: miscompare : DIMM Unknown : 1 : 157s
Hardware Error: miscompare on CPU 2(0x2) at 0x7fcc0726e018(0xb0d18:DIMM Unknown): read:0x0000000000000000, reread:0x0000000000000000 expected:0x4a4a4a4a4a4a4a4a
Report Error: miscompare : DIMM Unknown : 1 : 157s
Hardware Error: miscompare on CPU 2(0x2) at 0x7fcc0726e020(0xb0d18:DIMM Unknown): read:0x0000000000000000, reread:0x0000000000000000 expected:0x4a4a4a4a4a4a4a4a
Report Error: miscompare : DIMM Unknown : 1 : 157s
Hardware Error: miscompare on CPU 2(0x2) at 0x7fcc0726e028(0xb0d18:DIMM Unknown): read:0x0000000000000000, reread:0x0000000000000000 expected:0x4a4a4a4a4a4a4a4a
Report Error: miscompare : DIMM Unknown : 1 : 157s
Hardware Error: miscompare on CPU 2(0x2) at 0x7fcc0726e030(0xb0d18:DIMM Unknown): read:0x0000000000000000, reread:0x0000000000000000 expected:0x4a4a4a4a4a4a4a4a
Report Error: miscompare : DIMM Unknown : 1 : 157s
Hardware Error: miscompare on CPU 2(0x2) at 0x7fcc0726e038(0xb0d18:DIMM Unknown): read:0x0000000000000000, reread:0x0000000000000000 expected:0x4a4a4a4a4a4a4a4a

我怀疑将Ubuntu的配置与我的笔记本电脑的硬件相结合是造成这些错误的罪魁祸首。几乎每次都是八包。

以下无关紧要的相关信息

关于btrfs错误;我正在使用17.04。我在btrfs的irc中询问过。有人告诉我这可能是硬件错误,也可能是内存管理错误。就像我现在所经历的那样,btrfs的元数据页面的一部分充满了零。我确实跑了几个月,切换到ext4并归咎于nvidia二进制驱动程序。

我使用的命令及其参数:

# stressapptest -M 10000 -s 1800

10000是我可以测试的可用内存。我通过free -m-s` 得到它是几秒钟。

# memtester 4096

笔记本电脑的CPU有2个核心,因此我通常启动两个实例。4096是当前可用内存的一半,通过free -m


1
我会更换坏的RAM,但我不知道焊接的RAM芯片是否有可能。计算机是否足够新,可以在保修期内更换?
sudodus

@sudodus是的,它的保证尚未到期。如果找不到解决方案,我将进行RMA处理。我发现,即使没有官方方法,人们也找到了通过跳过一些测试点来禁用某些笔记本电脑上的焊接夯的方法。
Artyom

为了更确定,请尝试memtest86+从任何Ubuntu安装LiveCD。
N0rbert

@ N0rbert我使用memtest86(具有启发性的结果)进行了一些测试,但结果均为负面。但他们的战绩是-4次,因此我今晚将进行通宵测试。
Artyom

2
@sudodus,我相信memtest86 +可以测试自己的内存,但是这不应该是一个大问题。是的,我已经修复了ext4分区几次,因为它可能由于内存相关的错误而损坏了。不幸的是,我无法修复btrfs分区,因为在将元数据写入磁盘之前,它以某种方式已损坏,而我的btrfs分区可能已通过btrfs清理并破坏了其中的一些散布了它。
Artyom

Answers:


1

删除的答案已关闭

关于此问答的答案已删除:

您是否已经尝试过重新安装ubuntu,因为这听起来像是操作系统级别的内存管理故障

我的答案是相似的,因为它涉及非常低级的内存管理。内核级别的KASLR

KASLR做什么

KASLR代表ķ ernel ddress 小号步伐大号 ayout ř andomization。我从没听过它大声说过的声音,但是在我看来,我说它是“ Casler”。想想机器中友好的幽灵。KASLR是一种安全措施,用于随机分配内核模块所驻留的内存位置。从理论上讲,当您不能始终依靠相同的代码始终位于相同的内存位置时,内核就很难被破解。

可以将KASLR操作视为与存储器测试器相反的操作,该存储器测试器重复读取和写入相同的存储器位置,并且预期不会发生任何变化。这些对立面,吸引了我(注意成语),对KASRR和内存错误进行了Google搜索。似乎无关的一个人可能值得在github上链接到此问答的消息。原因是他们认为它们是唯一受移位内存地址影响的地址(如果我正确读取了它们的线程)。我最不希望链接到RedHat的前三则热门歌曲是因为他们的网站是要在Google搜索机器人上获得的部分帖子,然后它们使您付费阅读。

当KASLR将内核“材料”加载到内存映射的中间(这是不应该这样做的)时,存在一些已知的问题。不幸的是,我记不起上周发现的链接,该链接包含在今晚的答案中。该链接有一个补丁/解决方法,用于指示KASLR不使用特定的内存位置。

在确认了KASLR和内存位置的已知问题之后,我在问题下进行了评论,以使其禁用KASLR并重新运行内存测试。回复说它似乎成功了,所以我要发布这个答案。

如何禁用KASLR

尽管我已经使用grub内核命令行选项“ kaslr”数年了,但从至少4.12版本开始,它就成为了内核的默认选项。要避免加载KASLR,请使用edit /etc/default/grub并更改以下行:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nokaslr"

除了“安静”和“启动”之外,您可能还有其他选择。重要的步骤是添加“ nokaslr”,并保留其他选项。

然后保存文件并运行:

sudo update-grub

当然,禁用KASLR的另一种方法是在未自动包含KASLR的情况下,仅在Ubuntu 16.04.1下使用较旧的内核(如4.4.0)。


0

这个问题听起来很像是RAM的随机损坏。以我的经验,MemTest86是硬件的“太容易”测试。它会发现内存确实很差,但是细微的问题通常不会引起注意。

如果您想知道内存是否良好,请尝试以配置为使用尽可能多的RAM的自检/酷刑模式运行Prime95

另一个好的测试是运行双面行锤测试几个小时。

我相信,如果Prime95和双面Rowhammer找不到您的内存的任何问题,它可能会正常工作。但是,即使您的内存稍微有些坏(只是在那里运行,并且长期损坏了数据),简单地运行MemTest86,编译程序,安装操作系统,玩游戏似乎也可以正常工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.