SuperDiagについて
SuperDiagはSuperMicroが提供する診断ツールで、SuperMicro製サーバーのプロセッサやプラットフォームの低レベルな動作検証に使われる。
https://www.supermicro.com/ja/solutions/management-software/super-diagnostics-offline
ねらい
SuperDiagはカスタム設定をstarup.nshやDiag_Setting.binで行うことが出来る。
USB版は書き込み可能なので編集が出来るがUSBメモリは軽率に顧客環境に持ち込めない。
あらかじめ妥当な項目を選定したISOイメージを作成しておいて持ち込み可能な機材としたい。(デフォルトだと正常時でも治具の未接続等のエラーが出る)
動作原理
SuperDiagは計算機の起動時にEFIブートローダー(BOOTX64.EFI)を実行してスタートアップスクリプト(startup.nsh)を呼ぶ。startup.nshでは通常診断プログラム本体であるEFIバイナリ(SuperDiag.efi)を実行して診断の実行/診断UIを表示して制御をユーザに渡す。
つまるところSuperDiagの実態はEFI環境で動作するプログラムなので、ISOを作る際には必要なファイルをEFIパーティションに詰め込んで(下記手順のmkfs.fat -F -Mオプション辺り)EFIとして生成する(下記手順のmkisofs -eオプション辺り)必要がある。
BOOTX64.EFI
SuperDiagに同梱されたEFIブートローダー。EFIパーティションの/EFI/BOOT/以下に置く。
startup.nsh
EFIシェル起動後に実行されるシェル。
基本はSuperDiag.efiのコマンドラインオプションにより実行条件を制御する。
代表的な例は以下:
- SuperDiag.efi /help
- ヘルプを表示
- SuperDiag.efi /gui
- GUI版SuperDiagを起動
- SuperDiag.efi /quick
- CLI版SuperDiagのクイックテストを実行
- SuperDiag.efi /full
- CLI版SuperDiagのフルテストを実行
Diag_Setting.bin
USB/GUI版のSuperDiagでカスタムテストを編集しているとUSBメモリに作成され、カスタムテストの選択内容が記憶される。
バイナリで手動作成は難しいのでISO/GUI版作成前にUSB/GUI版でテストを行って取得しておく。
手順
mkisofs
かxorrisofs
コマンドが実行可能なLinuxが必要。
GUI版
$ dd if=/dev/zero of=efi_gui.img bs=1k count=4000
$ mkfs.fat -F 12 -M 0xf8 efi_gui.img
$ sudo mount -o loop efi_gui.img /mnt
$ sudo mkdir -p /mnt/EFI/BOOT
$ sudo cp SuperDiag_1.10.1_20250305_For_X86/EFI/BOOT/BOOTX64.EFI /mnt/EFI/BOOT/
$ sudo cp SuperDiag_1.10.1_20230305_For_X86/SuperDiag.efi /mnt/
$ sudo cat <<'EOF' >/mnt/startup.nsh
SuperDiag.efi /gui
EOF
$ sudo cp Diag_Setting.bin /mnt/
$ sudo cp SuperDiagISO.txt /mnt/
$ sudo umount /mnt
$ mkisofs -rJ -V SuperDiag_1.10.1_GUI -o SuperDiag_1.10.1_GUI.iso -e efi_gui.img -no-emul-boot efi_gui.img
CLI版
$ dd if=/dev/zero of=efi_cli.img bs=1k count=4000
$ mkfs.fat -F 12 -M 0xf8 efi_cli.img
$ sudo mount -o loop efi_cli.img /mnt
$ sudo mkdir -p /mnt/EFI/BOOT
$ sudo cp SuperDiag_1.10.1_20250305_For_X86/EFI/BOOT/BOOTX64.EFI /mnt/EFI/BOOT/
$ sudo cp SuperDiag_1.10.1_20230305_For_X86/SuperDiag.efi /mnt/
$ sudo cat <<'EOF' >/mnt/startup.nsh
SuperDiag.efi /quick /dgi $dst
EOF
$ sudo cp SuperDiagISO.txt /mnt/
$ sudo umount /mnt
$ mkisofs -rJ -V SuperDiag_1.10.1_CLI -o SuperDiag_1.10.1_CLI.iso -e efi_cli.img -no-emul-boot efi_cli.img