是否有可与 UEFI 配合使用的 memtest86+ 的免费 (libre) 开源替代品?

是否有可与 UEFI 配合使用的 memtest86+ 的免费 (libre) 开源替代品?

鉴于memtest86+ 无法与 UEFI 配合使用,是否有开源替代方案或者我可以使用 grub 来测试内存?

答案1

是的,有,而且现在就是内存测试86+ v6本身。这是Memtest86+的新版本,基于PCM测试,这是Memtest86+的重写,可以从UEFI启动。它的作者仍然将其标记为尚未准备好用于生产,但它确实可以在许多配置中使用。

Memtest86+ v6 的二进制文件可用在 memtest.org 上

或者,Linux 内核本身包含一个内存测试工具:该memtest选项将运行最多 17 种模式的内存检查(当前)。如果添加memtest到内核启动参数,它将在启动时运行所有测试,并保留任何失败的地址,以便不使用它们。如果您想要更少的测试,您可以指定模式的数量(memtest=8例如)。

这不像 Memtest86+ 的测试那么广泛,但仍然给出了相当不错的结果。

某些发行版内核不包含此功能;您可以通过查找来检查它是否可用CONFIG_MEMTEST在你的内核配置中(尝试/boot/config-$(uname -r))。如果你指定memtest但内核不支持它,内核不会抱怨;当它运行时,您应该看到类似的输出

[    0.000000] early_memtest: # of tests: 17
[    0.000000]   0x0000000000010000 - 0x0000000000099000 pattern 4c494e5558726c7a
[    0.000000]   0x0000000000100000 - 0x0000000003800000 pattern 4c494e5558726c7a
[    0.000000]   0x000000000500d000 - 0x0000000007fe0000 pattern 4c494e5558726c7a
[    0.000000]   0x0000000000010000 - 0x0000000000099000 pattern eeeeeeeeeeeeeeee
[    0.000000]   0x0000000000100000 - 0x0000000003800000 pattern eeeeeeeeeeeeeeee
[    0.000000]   0x000000000500d000 - 0x0000000007fe0000 pattern eeeeeeeeeeeeeeee
[    0.000000]   0x0000000000010000 - 0x0000000000099000 pattern dddddddddddddddd
[    0.000000]   0x0000000000100000 - 0x0000000003800000 pattern dddddddddddddddd
[    0.000000]   0x000000000500d000 - 0x0000000007fe0000 pattern dddddddddddddddd
[    0.000000]   0x0000000000010000 - 0x0000000000099000 pattern bbbbbbbbbbbbbbbb
[    0.000000]   0x0000000000100000 - 0x0000000003800000 pattern bbbbbbbbbbbbbbbb
...

当内核启动时(或稍后在其启动日志中)。

您可以使用 QEMU 来感受一下:

qemu-system-x86_64 -kernel /boot/vmlinuz-$(uname -r) -append "memtest console=ttyS0" -nographic

(或qemu-system-...适合您的架构的任何一个),然后查找“early_memtest”。要在内核崩溃后退出 QEMU,请按Ctrla, c, q, Enter

答案2

您可以添加最新的免费软件(免费啤酒)版本内存测试86进入 Ubuntu 上的 UEFI Grub2。

基于一个教程,我在远程 Ubuntu 16.04 服务器上执行了以下步骤来添加内存测试86UEFI Grub2:

  1. 首先,请注意 grub2 不显示 memtest86 也不显示 memtest86+: GRUB 启动菜单 尽管事实上我的启动文件夹显然有 memtest86+。见下图。 /boot 目录列表

  2. 下载memtest86-usb.zip到笔记本电脑

  3. 将 zip 文件发送到远程计算机,然后将其解压缩到某个位置(例如/home/<username>/memtest86-usb/

  4. 我们需要使用分析 memtest86-usb.imgfdisk -lu memtest86-usb.img来查看它的安装偏移量。 fdisk -lu memtest86-usb.img 我们想要安装上面输出中列出的第二个设备memtest86-usb.img2。上图显示每个扇区为 512 Bytes,memtest86-usb.img2从 514048 扇区开始。因此从 514048*512 Bytes=263192576 Bytes 开始。

  5. 创建一个文件夹(例如/home/<username/memtest-tmp)并安装它:

    mkdir /home/<username>/memtest-tmp
    sudo mount -o loop,offset=263192576 /home/<username>/memtest86-usb/memtest86-usb.img
    
  6. 使用 lsblk 检查有关 EFI 分区以及挂载的 .img 文件的详细信息 lsblk 输出 在上图中,我们注意到以下几点:

    1. EFI分区挂载的位置,这里是/boot/efi
      • 请注意,在我的服务器中,我可以在 BIOS 设置中选择启动模式为legacy或。UEFI我之前已将其设置为legacy,因此该/boot/efi文件夹不存在。更改启动模式以UEFI允许我查看该/boot/efi文件夹并验证 EFI 分区是否安装在那里。
    2. 设备编号。设备名称为sdA1;这就是这封信A。这一点在后面很重要。
    3. 分区号。设备名称是sda1;因此它是分区1。这对以后很重要
    4. 作为健全性检查,我们还注意到memtest86-usb.img2被安装到/home/<username>/memtest-tmp.
  7. 接下来,我们验证挂载点是否包含一个EFI/BOOT文件夹并查看其内容: 在此输入图像描述

  8. 接下来,我们同时复制并重命名/home/<username>/memtest-tmp/EFI/BOOT/boot/efi/EFI/memtest86(假设目标文件夹/boot/efit/EFI/memtest86): 在此输入图像描述

  9. 接下来我们创建一个 GRUB chainloader 条目。创建文件/etc/grub.d/42_memtest,内容类似于以下内容:

    #!/bin/sh
    exec tail -n +3 $0
    # This file provides an easy way to add custom menu entries.  Simply type the
    # menu entries you want to add after this comment.  Be careful not to change
    # the 'exec tail' line above.
    
    menuentry 'memtest86' {
    insmod part_gpt
    insmod fat
    set root='hd0,gpt1'
    if [ x$feature_platform_search_hint = xy ]; then
        search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 4418-37D3
    else
        search --no-floppy --fs-uuid --set=root 4418-37D3
    fi
    chainloader /EFI/memtest86/BOOTX64.efi}
    
    

    在上图中,我们这样做了set root='hd0,gtp1,因为我们的 EFI 分区被标记为设备名称 =sda1。根据 grub2 约定...

    1. A标准差A对应于0高清0
    2. 1sda1对应于1GTp1
    3. 我们可以使用总分*指定分区的格式1设备的sda因为我们做到了insmod part_gpt。我们可以将磁盘标签类型识别为总蛋白使用fdisk -l命令,也可以通过查看/boot/grub/grub.cfg文件。

    另请注意,我们使用了 EFI 分区通用唯一标识符,可以从blkid显示计算机上所有分区的 UUID 的命令中获取。

  10. 我们将 grub2 更新为update-grub2.

  11. 重新启动,你应该看到内存测试86在 grub2 中 带有 memtest86 的 GRUB 引导菜单

答案3

Memtest 6 应与 uefi 配合使用。测试版可在 memtest.org 上获取

代码可在https://github.com/memtest86plus/memtest86plus

Memtest86+ v6.00 Beta 2 发布:2022-06-03 v6 尚未准备好投入生产!请将实际代码视为实验性代码,并预计会发生崩溃和冻结。第一个非测试版预计将于今年夏天发布。

尽管它是测试版,我还是尝试了一下,下载了 iso,将其添加到 USB 记忆棒上,并且可以从 uefi 启动它,并且它运行了 memtest,就像我习惯的那样。

相关内容