55

If using UEFI Please see this question, "Can I boot memtest86+ if I'm using UEFI?"

After having installed the 64bit version of Ubuntu 12.04 on my Lenovo B570 I ran into the same problems I had when installing 11.10 with Grub not playing nicely with a uEFI system. I used the same technique as last time to solve the problem (using a Super Grub Disc LiveCD session to repair Grub) and my system happily dual boots between Ubuntu and Windows 7

However now when I boot up the Grub menu only displays

  • Ubuntu, with Linux 3.2.0-24-generic
  • Ubuntu, with Linux 3.2.0-24-generic (recovery mode)
  • Previous Linux versions
  • Windows 7 (loader) (on /dev/sda1)
  • Windows Recovery Environment (loader) (on /dev/sda4)

I no longer see the option to use Memtest86+ which was there previously, having checked in the Ubuntu Software Center I can see that the package is installed, but how to I make the option to run it once again appear in the Grub menu?

I've tried:

sudo update-grub 

which doesn't make any difference.

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

results in:

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

and entering

ls /etc/grub.d/

results in:

00_header        10_linux      30_os-prober  41_custom
05_debian_theme  20_linux_xen  40_custom     README
1
  • Try adding the script as detailed below, copied it from my machine, do the chmod +x and grub update and see if that works. I see you did - welcome. Apr 27, 2012 at 20:19

6 Answers 6

33

Try opening a terminal and running

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

Check to see if it's there

grep memtest /boot/grub/grub.cfg

Just done the same as I had it disabled

$ 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+ ###

You could try creating the file if it's not there, using nano in a terminal

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

or with a gui editor

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

Fill it with

#!/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

Make sure to run the chmod +x command on it afterwards.

I'd be a bit concerned that it's missing though - do you have everything else in 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
13
  • 1
    I found 20_memtest86+ lurking in /etc/grub.d.bak/ somehow. Moved it into place, updated GRUB and everything worked fine for me. Jan 8, 2013 at 7:29
  • 5
    update-grub doesn't find memtest binary no matter what I do :(
    – expert
    Dec 17, 2015 at 18:28
  • 3
    what could be the reason if the file is present but still the option does not come out to the grub menu? Feb 20, 2017 at 18:10
  • 8
    isn't this because the GPL versions of memtest don't support EFI? So if you are booting through EFI, there is no way to get memtest to work using what's shipped with Ubuntu?? Feb 23, 2017 at 9:37
  • 3
    I got the following, X@ubuntu:~$ cat /boot/grub/grub.cfg | grep memtest ### BEGIN /etc/grub.d/20_memtest86+ ### ### END /etc/grub.d/20_memtest86+ ### Apr 26, 2017 at 21:30
23
apt install memtest86+

This will automatically reconfigure grub and add the entry to the boot menu.

If you get the error memtest86+ is already the newest version then use sudo apt-get install --reinstall memtest86+

If all else fails you can get a bootable ISO that you can burn to a CD and boot from. Of course if you are booting UEFI you should be here instead.

5
  • 1
    For Ubuntu 16.04 server this was exactly the solution. Without apt-get install memtest86+ mentioned file /etc/grub.d/20_memtest86+ was not present on my system.
    – mstrap
    Jul 17, 2017 at 8:47
  • 1
    @mstrap, it was the solution for me too. I don't understand why my answer was downvoted two times.
    – Michael F
    Jul 18, 2017 at 10:44
  • 1
    This solution did not work for me - the above command received a memtest86+ is already the newest version message. I suspect this solution only works for non UEFI systems while the original question is specifically regarding memtest on UEFI systems.
    – Jaydin
    Jan 1, 2018 at 23:23
  • 2
    This didn't work for me either, like JayDin memtest was already installed. I used synaptik package manager to remove memtest, rebooted then re-installed it. This fixed the problem for me.
    – user111667
    Mar 4, 2019 at 4:36
  • Does this work on a live USB? Nov 29, 2021 at 2:46
15

I had the same issue, and due to the fact that I have EFI on my laptop the memtest86+ version 4.x shipped by ubuntu won't work, since EFI is only supported by version 5 and newer.

The latest versions are non-GPL and must be downloaded manually from the memtest website(they have ISO and USB images), but at least they are free of charge.

2
  • 2
    memtest86.com/download.htm
    – Marcos
    Apr 16, 2015 at 22:56
  • 1
    The latest versions are non-GPL and must be downloaded manually from the memtest website(they have ISO and USB images), but at least they are free of charge. memtest86 is non-GPL and proprietary and memtest86+ is GPL. Aug 12, 2015 at 5:33
6

I didn't managed to make this work in 2 days, then I checked Synaptic for grub packages... Seems to be, that the absence of package grub-imageboot are the root of the problem.

sudo apt-get install grub-imageboot
2
  • I tried this and it didn't work. Aug 19, 2015 at 19:44
  • 4
    Found memdisk: /boot/memdisk Imagepath /boot/images not found May 15, 2016 at 18:39
3

This what I did to add the now latest (non-free) memtest86+ to the grub boot menu for UEFI booting. Current memtest version is 8.2.

Tools needed: Disk Image Mounter and grub-customizer, the latter is only for convenience :)

Files: memtest binary (see below).

  1. Download the memtest binary from: https://www.memtest86.com/download.htm The 'Image for creating bootable USB Drive on a Windows/Linux/Mac system' is fine.

  2. Extract the IMG file (memtest86-usb.img)

  3. Open the img file with disk image mounter (right mouse button on Ubuntu)

  4. From the mounted image extract /EFI/BOOT/BOOTX64.efi

  5. Make memtest86 boot directory:

    sudo mkdir /boot/efi/EFI/memtest86

  6. Copy the BOOTX64.efi to your new folder on the boot partition (eg /boot/efi/EFI/memtest86)

  7. Open grub-customizer

  8. Add menu item, give it a name, choose type: other

  9. Add the following boot sequence (assuming you boot from 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. Save and quit grub-customizer

  11. reboot and enjoy Memtest86

6
  • For others/me: #3 Disk Image Mounter = gnome-disks. #6 must be root. #8 Why is type other not memtest? #9 how do you know if you boot from hd0? [click edit on your boot drive entry and copy the entry for that setroot]. Thanks for this excellent answer btw.
    – dez93_2000
    Jul 12, 2019 at 17:34
  • If one's ubuntu root is hd2 then presumably you change the 0 to 2 in 4 places, inc ahci? Regardless I get error no such device 1A22-970F & file '/EFI/memtest86/BOOTX64.efi' not found. File is defo in /boot/efi/EFI/memtest86/ . Any thoughts? Cheers
    – dez93_2000
    Jul 12, 2019 at 17:50
  • 1
    'error disk hd2,gpt2 not found' now appears with 'no such device'; file not found doesn't appear. not sure why it would change...
    – dez93_2000
    Jul 12, 2019 at 18:06
  • This may help others having issues mounting the EFI partition of the img file: ubuntuforums.org/archive/index.php/t-1576011.html
    – Natetronn
    Oct 21, 2020 at 1:16
  • memtest86+ (memtest.org) is free and GPL ! memtest86 (no plus sign here) (memtest86.com) is not. I just sorted out that confusion for myself. Nov 30, 2021 at 1:47
1

See also this answer on the Unix StackExchange. In short, the Linux Kernel has a simple memory test built in.

Do grep CONFIG_MEMTEST "/boot/config-$(uname -r)" to determine if it's enabled or not (it'll be commented out if it's not enabled).

Then, edit /etc/default/grub and add memtest to GRUB_CMDLINE_LINUX_DEFAULT, run sudo update-grub, and then reboot.

Once it's finished booting up (it'll take longer than normal given it has to also run the memory test), check /var/log/kern.log for the result of the test.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .