自作PCの構築手順

自作PCの構築手順をまとめておく。パーツの初期不良(=購入時点での不良品、DOA、Dead On Arrival)が無いかを確かめるために、1つ1つ手順を確認しながら組み立てて行く必要があり、無計画にパーツを買い集めると後で後悔することになる。

  • 筐体と電源ユニットを買っておく

筐体は納期が長い物もあり、ショップで衝動買いするのでなければ、気に入った筐体を予め通販でオーダーして取り寄せておく。電源ユニットも初期不良が少ないパーツなので先に取り寄せておく。これらのパーツが遅れて、通電するのが遅れて、初期不良保証期間が過ぎちゃった、ということがないように。

  • メモリテスト用の起動CDやUSBを作成しておく。

電源を入れてBIOS動作の確認後、最初に行うのはメモリテストになるので別のPCを使って予めメディアを用意しておく。Linuxの場合は、LiveCDやインストールCDで立ち上げるとメモリテストを実行できるし、UbuntuなどではLiveCDで作成した起動用USBからもメモリテストを走らせることができる。私はネットワーク・ブートを使ってネットワーク経由でメモリテストを起動するので、これは省略している。

  • MoBo、CPU、メモリ、CPUクーラーを買う。

これらのパーツは一気に買う。出来ればショップで相談して部品の干渉とか無いか、組合せに矛盾がないかを確認しておく。これらの部品は何かあった時のために同じショップで買い揃えておいた方がいい。場合によっては持ち込んで状況確認してもらうこともあり得る。またメモリの相性保証を付けておく方がいい。確かにMoBoとの相性もあるのだが、メモリの初期不良のためでもある。以前、メモリの初期不良に出くわし、メモリテストの結果を証拠として写真に撮ってショップに持っていったが、確認のために半日位テストしなければならず、ショップでのテストが通ってしまうと交換にはお応じられないと言われた。でも幸い、相性保証を付けていたので相性問題ということでスンナリ交換してもらった。(ただ、元のメモリは不良品ではなく、商品としてまた棚に戻されるのを見ているので、以降、そのショップではパーツは買わないことにしている。)

  • MoBoにCPU、CPUクーラー、メモリを取り付ける。

PCとして動作する最低限のパーツ、CPU、CPUクーラー、メモリを取り付けて、パーツ相互に干渉がないか確認する。今回、CPUクーラーが大きくて、CPUクーラーを取り付けた後だと、メモリを取り付けることが出来なかった。仕方ないので、一旦、CPUクーラーを取り外してからメモリを取り付け、再度CPUクーラーを取り付けている。取り付け後の干渉はない。

  • 電源を接続して通電する。

筐体に入れる前に、新聞紙の上などにMoBoを置いて通電してみる。勿論、キーボードやディスプレも接続しておく。まず、BIOSが起動するか、BIOSの設定(CPUやメモリの認識)は正しいかを確認する。上手く起動せず原因が分からない場合は、これらのパーツを取り付けた状態でショップに持ち込み見てもらうという手もある。
また、BIOSのバージョンも確認しておこう。MoBoが新製品の場合、BIOSのバージョンは頻繁にアップするので、出来る限り最新のものにしておく。最近のBIOSはWebからUSBメモリにダウンロードして、それをMoBoに挿して起動するするとアップデートできるようになっているので簡単だ。

  • 筐体にMoBo、電源を取り付け配線する。

MoBoと電源ユニットを筐体に取り付け、干渉が無いかを確認する。もっとも、この段階で干渉が見つかってもパーツを変更するしかないが。電源スイッチなどを配線し、電源ケーブルの取り回しなどを確認する。なお、これは仮取り付けということで、ネジなどは軽く締め付ける程度にしておく。DVDやBLドライブを接続する場合は、これらも取り付けてみて、干渉を確認しておく。組合せによってはMoBoとドライブが当たるということもあり、ビニールテープなどで保護する必要もある。

  • 電源を入れて、メモリテストを実行する。

MoBoが裸の状態で長時間通電するのは危険なので、筐体に入れてからメモリテストを実施する。私はMemtest86+を使っている。プログラムを起動して、メモリの認識や設定に間違いないかを確認して、1日程度テストプログラムを走らせておく(今回は16GBのメモリで1回約3時間かかる)。以前のメモリの初期不良ではこの段階で、特定のアドレスが書き込みエラーとなっていた(書き込んだデータと読み出したデータが合わないビットがあった)。このテストをやらずに行き成りOSを動かしても、不具合の原因の特定が困難だったり、保障期間が過ぎてから分かったりすることになってしまうので、じっくりとテストしておきたい。
今回の場合はこんな感じ。

      Memtest86+ v4.20
Intel Core Gen2 2500 MHz
L1 Cache:   32K  83335 MB/s
L2 Cache:  256K  37879 MB/s
L3 Cache: 8192K  28409 MB/s
Memory  :   16G  17482 MB/s
IMC:         Intel(R) Core(TM) i7-3770T CPU @ 2.50GHz  / BCLK : 100 MHz
Settings: RAM : 800 MHz (DDR3-1600) / CAS : 11-11-11-28  / Dual Channel

WallTime    Cached  RsvdMem   MemMap   Cache  ECC  Test  Pass  Errors ECC Errs
---------   ------  -------  --------  -----  ---  ----  ----  ------ --------
 15:00:00      16G    2780K    e820      on   off   std     5       0
------------------------------------------------------------------------------
  • HDDを買って来てテストする。

メモリのテストが終わってからHDDを買ってきて取り付ける。私の場合は、Linux(具体的にはUbuntu)をLiveCDなどで起動してHDDのテストを行う。Live CDに不慣れな場合やWindows環境しかない場合は、一時的にHDDを他の稼働中のPCに接続して試験するのが簡単だろう。なお、UbuntuのLive CDを使う場合は起動後、smartユーティリティをインストールしておく。

$ sudo -s
# apt-get install smartmontools

OSをインストールする前にHDDを徹底的にテストしておく。最初にやらなければならないは、S.M.A.R.Tの情報の読み出しとSMARTのロング・セルフテストである。まず、SMARTの最初の情報を取得しておく。

# smartctl -a /dev/sda > smart.log
# cat smart.log
smartctl 5.41 2011-06-09 r3365 [x86_64-linux-3.2.0-26-generic] (local build)
Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF INFORMATION SECTION ===
Device Model:     ST3000DM001-9YN166
Serial Number:    W1FXXXXX
LU WWN Device Id: 5 abcdef 012345678
Firmware Version: CC4B
User Capacity:    3,000,592,982,016 bytes [3.00 TB]
Sector Sizes:     512 bytes logical, 4096 bytes physical
Device is:        Not in smartctl database [for details use: -P showall]
ATA Version is:   8
ATA Standard is:  ATA-8-ACS revision 4
Local Time is:    Thu Jul 21 08:53:33 2012 JST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

	:省略

SMART Attributes Data Structure revision number: 10
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000f   100   100   006    Pre-fail  Always       -       15776
  3 Spin_Up_Time            0x0003   094   094   000    Pre-fail  Always       -       0
  4 Start_Stop_Count        0x0032   100   100   020    Old_age   Always       -       6
  5 Reallocated_Sector_Ct   0x0033   100   100   036    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x000f   100   253   030    Pre-fail  Always       -       36
  9 Power_On_Hours          0x0032   100   100   000    Old_age   Always       -       0
 10 Spin_Retry_Count        0x0013   100   100   097    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   020    Old_age   Always       -       6
183 Runtime_Bad_Block       0x0032   100   100   000    Old_age   Always       -       0
184 End-to-End_Error        0x0032   100   100   099    Old_age   Always       -       0
187 Reported_Uncorrect      0x0032   100   100   000    Old_age   Always       -       0
188 Command_Timeout         0x0032   100   253   000    Old_age   Always       -       0
189 High_Fly_Writes         0x003a   100   100   000    Old_age   Always       -       0
190 Airflow_Temperature_Cel 0x0022   067   067   045    Old_age   Always       -       33 (Min/Max 31/33)
191 G-Sense_Error_Rate      0x0032   100   100   000    Old_age   Always       -       0
192 Power-Off_Retract_Count 0x0032   100   100   000    Old_age   Always       -       5
193 Load_Cycle_Count        0x0032   100   100   000    Old_age   Always       -       6
194 Temperature_Celsius     0x0022   033   040   000    Old_age   Always       -       33 (0 27 0 0)
197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0010   100   100   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x003e   200   253   000    Old_age   Always       -       0
240 Head_Flying_Hours       0x0000   100   253   000    Old_age   Offline      -       47098611367936
241 Total_LBAs_Written      0x0000   100   253   000    Old_age   Offline      -       0
242 Total_LBAs_Read         0x0000   100   253   000    Old_age   Offline      -       1616

SMART Error Log Version: 1
No Errors Logged

SMART Self-test log structure revision number 1
No self-tests have been logged.  [To run self-tests, use: smartctl -t]


SMART Selective self-test log data structure revision number 1
 SPAN  MIN_LBA  MAX_LBA  CURRENT_TEST_STATUS
    1        0        0  Not_testing
    2        0        0  Not_testing
    3        0        0  Not_testing
    4        0        0  Not_testing
    5        0        0  Not_testing
Selective self-test flags (0x0):
  After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.

この状態で既にErrorが発生していたり、異常な値があれば、交換してもらう。なお、上の例では“Head_Flying_Hours”が非常に大きな値になっているが、これは“生値”でSeagateの場合には実際のヘッドの稼働時間以外の情報も上位バイトに含まれており、“2AD6 0000 0000”を10進数で表しているので、下位バイトはゼロであり、実際に稼働時間はまだゼロ時間ということで正常値だ。このように“生値”はメーカーによって値が違うので、この値が大きいからと言って騒ぐと恥ずかしいことになってしまう。最悪値(WORST)が閾値(THRESH)以下になっていなければ一応はOK。

ここで、ファームのバージョンも確認しておく。今回買ったSeagateのHDDはメーカーのホームページに最新ファームが載っている。もし、購入したHDDが最新ファームでなければ、直ぐに最新ファームに変更する。上の例は“CC4B”で最新ファームは“CC4H”だったので、このあと直ぐにファームを書き換えた。(しかし、IBM/日立や東芝といったHDDを使って来た私としてはユーザによるHDDのファームアップなんて信じられない話だが。)SeagateのST3000DM001は海外ではトラブルが多いようなので、速攻で最新ファームに上げておいた。

SMARTの初期値を確認したら次にSMARTのロング・セルフテストを実施する。

# smartctl -t long /dev/sda

3TBのHDDで約5時間かかる。気長に待とう。(セルフテスト中にHDDを使うこともできるがセルフテストを少しでも早く終わらせるためには、無負荷の状態で実行する方がいい。)なお、セルフテストは終わっても何もメッセージを出してくれないので、適当な間隔で“smartctl -a”で進行状況と結果を確認する。

# smartctl -a /dev/sda
smartctl 5.41 2011-06-09 r3365 [x86_64-linux-3.2.0-26-generic] (local build)
Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF INFORMATION SECTION ===
Device Model:     ST3000DM001-9YN166
Serial Number:    W1FXXXXX
LU WWN Device Id: 5 abcdef 012345678
Firmware Version: CC4H

	:省略

Self-test execution status:      (   0) The previous self-test routine completed
                                        without error or no self-test has ever
                                        been run.

	:省略

SMART Error Log Version: 1
No Errors Logged

SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Extended offline    Completed without error       00%         5         -

	:省略

もし、ここでエラーが記録されたら直ぐに交換してもらおう。
SMARTのセルフテストがパスしたら、次に念のためOSからHDDの全セクタの読み出しと書き込みを実行する。

# dd if=/dev/sda of=/dev/null bs=1G && dd if=/dev/zero of=/dev/sda bs=1G

HDDにもよるが読み出しと書き込みを合わせて10時間程度掛かるので、セルフテストも含めると1日作業となる。

なお、この試験を実行する前にHDDの内容を見てみたが、SeagateのST3000DM001では最初の10GBは“ゼロ”で埋まっていたが、それ以降はランダムぽいデータが入っていた。最初は“中古品”を売りつけられたのか、と思ったがSMARTの情報を見る限りはその形跡はない。どうも、出荷検査を最初の10GBしかやっていないのではないか、と思われる。日立のHDDは新品でも頭の天辺から足のつま先まで綺麗に“ゼロ”になっているのだが....。やはり、その辺が品質にも表れるのだろう。

余談だが、HDDはメカニカルな構造を持っているので初期テストはしっかりやっておいた方が良いが、SSDは別だ。電子回路だけで構成されるSSDは精々SMARTの確認程度で良いだろう。逆に全セクタの書き込みテストなどは厳禁だ。

  • OSをインストールする。

ここまでメモリ、HDDをテストしておけば初期不良でトラブルになる可能性は極めて少なくなるので、配線を再確認しつつ、ネジを増し締めしてハードウェアとしては完成となる。あとはいつもの通りOSのインストールとなる。