memtest86によるメモリのテスト
memtest86のWebサイトからUSBメモリ用イメージをダウンロードして、Windowsなら付属のイメージ書き込みプログラム、その他のOSではUNetbootinなどを使用して起動可能なUSBメモリを作成します。起動可能なUSBメモリができたら、新規購入計算機またはマザーボードのマニュアルを参照してBIOS(UEFI)設定メニューに入る方法もしくは起動デバイスの選択メニューの表示方法を調べます。USB端子に接続して電源を入れ、BIOS設定メニュー画面もしくは起動デバイスの選択メニュー画面から、USBメモリからの起動を行います(USBメモリからの起動を行うためにはSecure Boot機能を一時的に無効化する必要があるかもしれません)。
USBメモリからmemtest86を起動すると、自動的にメモリのテストが開始されますので、全てのメモリテストが完了してPassするまで放置します。3周程度Passするまで待ちましょう。もしエラーが表示された場合、内容を写真などに撮影して電源を切り、メモリモジュールの抜き差しが可能なら抜き差しして接点の状態を変えて再テスト、それでもエラーが出るかメモリモジュールの抜き差しができない計算機であれば、メモリモジュールの販売会社、計算機の販売会社などに連絡して初期不良交換か故障品に対する修理の依頼を行いましょう。
badblocksによるHDDのテスト
このテストはSSDでは不要です。SSDで実行した場合、寿命を縮めることになります。
Ubuntu Desktopのインストール用ISOイメージファイルをダウンロードして、WindowsならRufus、その他のOSではUNetbootinなどを使用して起動可能なUSBメモリを作成します。起動可能なUSBメモリができたら、新規購入計算機またはマザーボードのマニュアルを参照してBIOS(UEFI)設定メニューに入る方法もしくは起動デバイスの選択メニューの表示方法を調べます。USB端子に接続して電源を入れ、BIOS設定メニュー画面もしくは起動デバイスの選択メニュー画面から、USBメモリからの起動を行います(USBメモリからの起動を行うためにはSecure Boot機能を一時的に無効化する必要があるかもしれません)。
USBメモリから起動すると、「Ubuntuを試す」とか「Try Ubuntu」といった選択肢が表示されるはずなので、それを選びます。すると未インストールのままUSBメモリからUbuntu Desktop (Live環境と呼ぶ)が起動します。左下のメニューからGPartedを起動すると、接続されているHDD・SSDの内のパーティションのリストがメイン画面内に表示され、右上のプルダウンメニューには接続されているHDD・SSDのデバイスリストが表示されます。右上のプルダウンメニューから容量に基づいてHDDのデバイス名「/dev/~」という名前を特定して下さい。デバイス名が特定できたら(ここでは/dev/sdxと仮定)、左下のメニューからTerminalを起動し、下記のコマンドでHDDのテストを行います。
sudo badblocks -s -v -w -o sdxlog.txt -b 4096 /dev/sdx
エラーがあった場合はsdxlog.txtに出力されます。複数のHDDが接続されている場合、Terminalを複数起動して同時に複数のbadblocksを実行することができます。この例ではHDD内のデータは破壊されますので、新品でデータが入っていないHDDでのみ行って下さい。
stressによるハードウェア・冷却・電源のストレステスト
ここでは既にUbuntu (Xubuntu・Kubuntu・Lubuntu等のフレーバーを含む)またはDebianのインストールが完了して使用可能になっていると仮定します。Terminal上で下記のコマンドを実行してstressコマンドと温度監視関連コマンドを使えるようにします。
sudo apt install -y stress lm-sensors
sudo sensors-detect
sensors-detectでは質問に答える必要がありますが、「Do you want to add these lines automatically to /etc/modules?」のみyesと返答し、他はデフォルトのままで構いません(空欄のままEnter)。設定が終わったら再起動するか、下記のコマンドを実行して設定を有効化します。
sudo systemctl restart systemd-modules-load
stressコマンドと温度監視関連コマンドが使えるようになったら、Terminalを2つ起動して、片方で下記の温度監視コマンドを実行します。
watch -n 10 'sensors | gzip -c >> sensors.txt.gz'
これで10秒に1回、sensors.txt.gzというファイルに温度が出力されていきます。これを走らせながら、もう一方のTerminal上で下記のコマンドを実行して24時間ほど負荷をかけて様子を見ます。ここではCPUコアが16個、メモリが128GB搭載されている計算機と仮定しています。
stress --cpu 16 --io 16 --vm 16 --vm-bytes 4G --timeout 24h
--vmの値と--vm-bytesの値の積が総メモリ容量の半分くらいになるようにしておきます。なお、HDD・SSDなどのストレージに負荷をかけるオプション(--hdd)もありますが、これは寿命を縮めるので実施は推奨しません。
正常に最後まで走れば、とりあえず問題は見つからなかったということになります。もし途中で落ちてしまった場合、原因としては以下のものが考えられます。
- コンセントからの電源供給不足
- 電源ユニットの容量不足または故障
- メモリの故障
- 熱暴走
- その他の故障
電源供給不足はケーブルとタコ足配線に注意すれば日本ではほとんど排除できるでしょう。念の為ブレーカーに表示されている容量を確認して、同じ系統に他の機器を繋がないようにして下さい。電源ユニットの問題は交換してみるしかありませんが、手間がかかるので最後にします。メモリの問題はmemtest86を走らせて下さい。熱暴走は保存されているログ(sensors.txt.gz)を確認すれば判別できるでしょう。ただ、最近のCPUは内蔵温度センサーから得られる温度が設定した上限に達したら強制的に休むように設計されているので、よほど冷却能力不足にならない限り起こらないと思います。ログ内にはファンの回転速度や各種電圧も記録されていますので、空冷ファンや、水冷ならポンプ(モーター速度がファン回転数として記録される)が止まっていたり異常な速度になっていないか、各種電圧に異常がないかも確認して下さい。
どうしても問題が特定できない場合は、メーカーに症状を伝えて修理依頼に出すしかありません。パーツから組み立てている場合は、まず最小構成にした上で、1個ずつパーツを交換してテストを繰り返して問題の箇所を自力で特定します。