Post

Memtest86+をPXE Bootできる環境を構築する

Memtest86+をPXE Bootしたい

Memtest86+というメモリーテストツールがあり、 これを使用すれば、メモリーの不良や相性などメモリー関連の不具合をある程度調べることができます。

今回、3台のPCに対してメモリーテストを行わなければならず、その分のイメージを焼いたUSBメモリーを用意するのは、めんどくさいなとか思いました。

なので、PXE Bootというネットワークブートの仕組みを使ってメモリーテストを行える環境を構築していきたいと思います。

やる

今回はPXEの中でも単純なtftpを用いた方法を使います。

必要な物

  • PXE Bootの母艦PC
  • LANケーブル
  • L2SW (DHCPを使うので、ルーターではなくスイッチのほうが都合が良い)
  • PXE Boot対応のイメージ

環境

ちょうどよいLinuxが入ったパソコンがノートパソコンしかなかったので、今回はそれをつかいました。

  • OS: ArchLinux x64
  • NIC: enp0s31f6

結線は以下のようになります。

network diagram

母艦PCがDHCPサーバーの役割を持ち、配下の機器にIPアドレスをリースします。

なお、Firewallは何も考えたくなかった上、母艦もNATの下に隠されてるので無効化してあります。

  • DHCPとPXEとTFTP関連のポートさえ露出してれば多分起動するはずです。(未確認)

手順

パッケージのインストール

PXE BootにはDHCPサーバーとtftpサーバーが必要なので、その両方を動かせるdnsmasqという物を今回使用しました。

1
yay -S dnsmasq syslinux unzip

起動にはPXE対応のブートローダーが必要なので、syslinuxもインストールします。

ファイル設置

メモリーテストのイメージを置くディレクトリとは別に syslinuxを置くディレクトリとその中に起動設定を置くディレクトリを作成します。

1
mkdir -p /var/lib/tftpboot/efi/{memtest,pxelinux.cfg}

PXE対応のイメージをダウンロードします。

1
2
3
4
cd /var/lib/tftpboot/efi/memtest
wget https://memtest.org/download/v6.20/mt86plus_6.20.binaries.zip
unzip mt86plus_6.20.binaries.zip
rm mt86plus_6.20.binaries.zip

ArchLinuxでは、syslinuxのUEFI用のファイルは/usr/lib/syslinux/efi64/に存在するので、コピーします。

1
cp /usr/lib/syslinux/efi64/* /var/lib/tftpboot/efi/

起動設定

/var/lib/tftpboot/efi/pxelinux.cfg/defaultというファイルを作成し、以下を記述。

1
2
3
4
5
6
7
default memtest86
prompt 1
timeout 15

label memtest86
  menu label Memtest86+ 6.20
  kernel /memtest/memtest64.efi

kernelに起動させたいイメージのパスを記述します。

dnsmasqの設定

/etc/dnsmasq.confという設定ファイルがあるので、それを編集します。

自分の環境ではすべてコメントアウトされていたので、ファイルの末尾に以下を記述しました。

1
2
3
4
5
6
7
8
9
10
11
12
13
# DNSの無効化
port=0
# dnsmasqがDHCPリクエストをリッスンするインターフェース
interface=enp0s31f6
bind-interfaces
# DHCPのプールするIPアドレスの始点と終点
dhcp-range=192.168.1.50,192.168.1.150,12h
# syslinuxの場所
dhcp-boot=/efi/syslinux.efi
# tftpの有効化
enable-tftp
# tftpのルート
tftp-root=/var/lib/tftpboot

ログ出したいときは以下を記述すると良い。

1
2
log-queries
log-facility=/var/log/dnsmasq.log

ネットワーク設定

enp0s31f6に192.168.1.1を割り当てる

1
2
ip link set enp0s31f6 up
ip addr add 192.168.1.1/24 dev enp0s31f6

dnsmasqの起動

起動

1
systemctl start dnsmasq

あとの作業

  • 結線
  • PXE起動する機器のPXE関連の設定(Network StackだったりCSMの設定だったりセキュアブートだったり)
  • 起動しない場合はログを見たらわかるかも。(わからない時もある)

おわり

これでお手軽に複数台PC相手にメモリーテストを一気に回すことができる環境ができました。

もう少しいじくり回して、Ubuntu ServerやProxmoxとかも起動できるようにすれば、めんどくさい起動イメージを焼く作業から開放されそう。

コンテンツは CC BY-NC-SA 4.0 の下で利用できます。