LinuxのLiveUSBにmemtest86+を追加する

RufusUbuntuのLive USBを作成してある前提で、そのgrub起動メニューにmemtest86+を追加する。

項目
メディア Ubuntu 24.04 x86_64
Live USB作成方法 Rufus ISOモード

Rufus ISOモードだと、USBにFATパーティションが作られ、その中にファイルとしてUbuntu起動のためのデータやgrubのデータがおかれる。

ちなみに、EFI bootではなくMBRブートならメニューに Test memory と表示されるので、これを使えばよい。

一番簡単な方法

USB内の /boot/grub/grub.cfg を開くと、

if [ "$grub_platform" = "efi" ]; then
(省略)
else
menuentry 'Test memory' {
    linux16 /boot/memtest86+x64.bin
}

とある。この Test memoryEFIの場合にも表示するようにすればよい。 linux16 では起動できないようなので、 linux として、

if [ "$grub_platform" = "efi" ]; then
(省略)
menuentry 'Test memory' {
    linux /boot/memtest86+x64.bin
}
else
menuentry 'Test memory' {
    linux16 /boot/memtest86+x64.bin
}

というように、追記した。

公式サイトのバイナリを使う

公式サイト Memtest86+ | The Open-Source Memory Testing Tool からダウンロードしてくる。
ダウンロードするものは Binary Files (.bin/.efi) を選択する。
執筆時点ではこのリンクだった。
mt86plus_7.00.binaries.zip

圧縮ファイル内にある memtest64.efi を、USB内に配置する。ここでは例えば /boot/memtest_efi とする。

次に /boot/grub/grub.cfg を開き、下記内容を追記する。

menuentry "Start Memtest86+, use built-in support for USB keyboards" {
    linux /boot/memtest_efi keyboard=both
}
menuentry "Start Memtest86+, use BIOS legacy emulation for USB keyboards" {
    linux /boot/memtest_efi keyboard=legacy
}
menuentry "Start Memtest86+, disable SMP and memory identification" {
    linux /boot/memtest_efi nosmp nosm nobench
}

上記の記述は Linux ISO w/ GRUB (64 bits) にあるものを真似した。

備考

なぜEFIの場合にデフォルトで使えないようにしているかは不明。
また、公式バイナリについて、EFI用バイナリでも、MBRから起動できた。逆にMBR用のバイナリでも、EFIから起動できた。(最後まで正常動作するのかは確認していない。)何のために別々なのか分からない。

メインボードによっては適切に選ぶ必要があるのかもしれない。

最終的なgrub.cfg

両方の方法を使えるようにしたgrub.cfgは下記となる。
筆者の好みでUbuntuの起動オプションを少しカスタマイズしているが、そこは今回関係ないので無視して頂きたい。

set timeout=30

loadfont unicode

set menu_color_normal=white/black
set menu_color_highlight=black/light-gray

menuentry "Try or Install Ubuntu" {
    set gfxpayload=keep
    linux   /casper/vmlinuz  --- verbose
    initrd  /casper/initrd
}
menuentry "Ubuntu (safe graphics)" {
    set gfxpayload=keep
    linux   /casper/vmlinuz nomodeset  --- verbose
    initrd  /casper/initrd
}
menuentry "Console" {
    set gfxpayload=keep
    linux   /casper/vmlinuz  --- verbose systemd.unit=multi-user.target
    initrd  /casper/initrd
}
menuentry "Console (safe graphics)" {
    set gfxpayload=keep
    linux   /casper/vmlinuz nomodeset --- verbose systemd.unit=multi-user.target
    initrd  /casper/initrd
}
grub_platform
if [ "$grub_platform" = "efi" ]; then
menuentry 'Boot from next volume' {
    exit 1
}
menuentry 'UEFI Firmware Settings' {
    fwsetup
}
menuentry 'Test memory' {
    linux /boot/memtest86+x64.bin
}
menuentry "Start Memtest86+, use built-in support for USB keyboards" {
    linux /boot/memtest_efi keyboard=both
}
menuentry "Start Memtest86+, use BIOS legacy emulation for USB keyboards" {
    linux /boot/memtest_efi keyboard=legacy
}
menuentry "Start Memtest86+, disable SMP and memory identification" {
    linux /boot/memtest_efi nosmp nosm nobench
}
else
menuentry 'Test memory' {
    linux16 /boot/memtest86+x64.bin
}
menuentry "Start Memtest86+, use built-in support for USB keyboards" {
    linux /boot/memtest_mbr keyboard=both
}
menuentry "Start Memtest86+, use BIOS legacy emulation for USB keyboards" {
    linux /boot/memtest_mbr keyboard=legacy
}
menuentry "Start Memtest86+, disable SMP and memory identification" {
    linux /boot/memtest_mbr nosmp nosm nobench
}
fi