如何将 Memtest86+ 选项添加回 Grub 菜单?

如何将 Memtest86+ 选项添加回 Grub 菜单?

如果使用 UEFI,请参阅此问题,“如果我使用 UEFI,我可以启动 memtest86+ 吗?”

在我的联想 B570 上安装了 64 位版本的 Ubuntu 12.04 后,我遇到了与安装 11.10 时相同的问题,Grub 无法与 uEFI 系统很好地配合使用。我使用了与上次相同的技术来解决问题(使用 Super Grub Disc LiveCD 会话来修复 Grub),我的系统在 Ubuntu 和 Windows 7 之间顺利地双启动

但是现在当我启动 Grub 菜单时只显示

  • Ubuntu,使用 Linux 3.2.0-24-generic
  • Ubuntu,带有 Linux 3.2.0-24-generic(恢复模式)
  • 以前的 Linux 版本
  • Windows 7(加载程序)(在 /dev/sda1 上)
  • Windows 恢复环境(加载器)(在 /dev/sda4 上)

我不再看到之前使用的 Memtest86+ 选项,在 Ubuntu 软件中心检查后,我可以看到该包已安装,但是如何让运行它的选项再次出现在 Grub 菜单中?

我试过了:

sudo update-grub 

这并没有什么区别。

sudo chmod +x /etc/grub.d/20_memtest86+ 

结果是:

chmod: cannot access /etc/grub.d/20_memtest86+': No such file or directory

并输入

ls /etc/grub.d/

结果是:

00_header        10_linux      30_os-prober  41_custom
05_debian_theme  20_linux_xen  40_custom     README

答案1

尝试打开终端并运行

sudo chmod +x /etc/grub.d/20_memtest86+
sudo update-grub

检查它是否存在

grep memtest /boot/grub/grub.cfg

和我禁用它时做的一样

$ cat /boot/grub/grub.cfg | grep memtest

$ sudo chmod +x /etc/grub.d/20_memtest86+
[sudo] password for hob: 

$ sudo update-grub
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.2.0-24-generic
Found initrd image: /boot/initrd.img-3.2.0-24-generic
Found linux image: /boot/vmlinuz-3.2.0-23-generic
Found initrd image: /boot/initrd.img-3.2.0-23-generic
Found memtest86+ image: /boot/memtest86+.bin
Found Ubuntu 11.10 (11.10) on /dev/sda6
Found Trisquel 5.5 (5.5) on /dev/sda8
Found Ubuntu 12.04 LTS (12.04) on /dev/sda9
done

$ cat /boot/grub/grub.cfg | grep memtest
### BEGIN /etc/grub.d/20_memtest86+ ###
menuentry "Memory test (memtest86+)" {
    linux16 /boot/memtest86+.bin
menuentry "Memory test (memtest86+, serial console 115200)" {
    linux16 /boot/memtest86+.bin console=ttyS0,115200n8
### END /etc/grub.d/20_memtest86+ ###

如果文件不存在,你可以尝试在终端中使用 nano 创建该文件

sudo nano /etc/grub.d/20_memtest86+

或者使用 GUI 编辑器

gksudo gedit /etc/grub.d/20_memtest86+

填充

#!/bin/sh
set -e

if [ -f /usr/lib/grub/grub-mkconfig_lib ]; then
  . /usr/lib/grub/grub-mkconfig_lib
  LX=linux16
elif [ -f /usr/lib/grub/update-grub_lib ]; then
  . /usr/lib/grub/update-grub_lib
  LX=linux
else
  # no grub file, so we notify and exit gracefully
  echo "Cannot find grub config file, exiting." >&2
  exit 0
fi

# We can't cope with loop-mounted devices here.
case ${GRUB_DEVICE_BOOT} in
  /dev/loop/*|/dev/loop[0-9]) exit 0 ;;
esac

prepare_boot_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | sed -e "s/^/\t/")"

if test -e /boot/memtest86+.bin ; then
  MEMTESTPATH=$( make_system_path_relative_to_its_root "/boot/memtest86+.bin" )
  echo "Found memtest86+ image: $MEMTESTPATH" >&2
  cat << EOF
menuentry "Memory test (memtest86+)" {
EOF
  printf '%s\n' "${prepare_boot_cache}"
  cat << EOF
  $LX   $MEMTESTPATH
}
menuentry "Memory test (memtest86+, serial console 115200)" {
EOF
  printf '%s\n' "${prepare_boot_cache}"
  cat << EOF
  $LX   $MEMTESTPATH console=ttyS0,115200n8
}
EOF
fi

#if test -e /boot/memtest86+_multiboot.bin ; then
#  MEMTESTPATH=$( make_system_path_relative_to_its_root "/boot/memtest86+_multiboot.bin" )
#  echo "Found memtest86+ multiboot image: $MEMTESTPATH" >&2
#  cat << EOF
#menuentry "Memory test (memtest86+, experimental multiboot)" {
#EOF
#  printf '%s\n' "${prepare_boot_cache}"
#  cat << EOF
#   multiboot   $MEMTESTPATH
#}
#menuentry "Memory test (memtest86+, serial console 115200, experimental multiboot)" {
#EOF
#  printf '%s\n' "${prepare_boot_cache}"
#  cat << EOF
#   multiboot   $MEMTESTPATH console=ttyS0,115200n8
#}
#EOF
#fi

确保chmod +x随后在其上运行该命令。

我有点担心它丢失了 - 你有 grub.d 中的所有其他东西吗?

$ ls /etc/grub.d/


00_header        10_linux.bak       20_memtest86+  41_custom
05_debian_theme  10_linux.dpkg-old  30_os-prober   README
10_linux         20_linux_xen       40_custom

答案2

apt install memtest86+

这将自动重新配置 grub 并将条目添加到启动菜单。

如果出现错误,memtest86+ is already the newest version请使用 sudo apt-get install --reinstall memtest86+

如果其他方法都失败了,你可以得到可启动 ISO你可以刻录到 CD 并从中启动。当然,如果你正在启动 UEFI,你应该这里

答案3

我遇到了同样的问题,由于我的笔记本电脑上有 EFI,所以 ubuntu 附带的 memtest86+ 版本 4.x 无法工作,因为只有版本 5 及更新版本支持 EFI。

最新版本是非 GPL 的,必须从 memtest 网站手动下载(它们有 ISO 和 USB 映像),但至少它们是免费的。

答案4

这是我所做的,将现在最新的(非免费)memtest86+ 添加到 grub 启动菜单中,以实现 UEFI 启动。当前 memtest 版本为 8.2。

所需工具:磁盘映像挂载程序和 grub-customizer,后者只是为了方便:)

文件:memtest 二进制文件(见下文)。

  1. 从以下网址下载 memtest 二进制文件:https://www.memtest86.com/download.htm ‘在 Windows/Linux/Mac 系统上创建可启动 USB 驱动器的映像’很好。

  2. 提取IMG文件(memtest86-usb.img)

  3. 使用磁盘映像安装器打开 img 文件(在 Ubuntu 上单击鼠标右键)

  4. 从挂载的映像中提取 /EFI/BOOT/BOOTX64.efi

  5. 创建memtest86启动目录:

    sudo mkdir /boot/efi/EFI/memtest86

  6. 将 BOOTX64.efi 复制到启动分区上的新文件夹(例如 /boot/efi/EFI/memtest86)

  7. 打开 grub-customizer

  8. 添加菜单项,命名,选择类型:其他

  9. 添加以下启动顺序(假设您从hd0):

    insmod part_gpt
    insmod fat
    set root='hd0,gpt2'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2  1A22-970F
    else
      search --no-floppy --fs-uuid --set=root 1A22-970F
    fi
    chainloader /EFI/memtest86/BOOTX64.efi
    
  10. 保存并退出 grub-customizer

  11. reboot享受 Memtest86

相关内容