仕事の合間に少しずつ進めていた新ファイルサーバーの構築が一段落した。構築にあたって大まかな指針として挙げたのが、以下の事項。
- 1TB の HDD (SATA) 2台で RAID 1 構成とし、そこそこ信頼性の高いストレージを構築。
- なるべく省電力化。
- なるべく静音化。
- なるべくコストを抑える。
当初は TeraStation シリーズか KURO-NAS/X4 の購入を検討していたが、デュアルコア + HT で疑似 4スレッドとなる Atom 330 を搭載した安価なマザーボードが発売されていることを知り (普段はそれほど熱心にハードウェア情報を追いかけているわけではないので、自作マニア的流行には疎い)、久々に自作することにした。NAS 製品では高額な上位モデルでしか利用できないことが多い NFS や iSCSI が、自作サーバーなら思いのままだ。
とりあえず Atom 330 を載せた Mini-ITX フォームファクター採用を決めたものの、完全に自作するかベアボーンにするかで、しばらく迷う。Mini-ITX 用ケースはそれほど種類が多くない上に、3.5" HDD を 2台内蔵できて、デザイン的にも (個人的) 許容範囲に収まる製品となると、選択肢はかなり狭まってしまう。デザインに魅力を感じたベアボーン製品もあったが、物理的制約で HDD が 2.5" を 1台しか積めなかったり、スリム型光学ドライブが標準装備だったり (CD/DVD-ROM ドライブは OS インストール時にしか使わないので不要) で、断念した。また途中で思いついたネットワークの冗長化&負荷分散を実現するための追加 NIC が、ロー・プロファイル対応製品であっても搭載できないのも痛い。
そこで 5" ベイを潰してでも 3.5" HDD を 2台内蔵でき、PCI 拡張カードが 1枚挿せるケース、と言う条件で探し、以下の構成で決めた。ディスプレイや光学ドライブ、キーボード、マウスは、OS のインストール前後で他のマシンから拝借したり余っている物をテキトーに使えばいいので省略。
- マザーボード: Intel D945GCLF2D (¥8,085)
- メモリ: Transcend DDR2-533 2GB ×1 (¥3,780)
- HDD: HITACHI Deskstar HDT721010SLA360 (SATA 1TB) ×1 (¥7,036)
- 追加 NIC: PLANEX GN-1200TW2 (¥1,280)
- ケース: Fast A-ITX-202P300 (¥8,890)
1TB の HDD は既に所有していた同じ製品を利用するので 1台のみ購入し、上記の合計で ¥29,071。この他にケース内のケーブル取り回しを楽にするために買った断面が円形の SATA ケーブルと、8ポートGigabit スイッチのポートが足りなくなって買い足したスイッチや LAN ケーブルを加えると、最終的には ¥38,000 程度だろうか。
それでもマザーボードがデフォルトで CPU を積んでいることと、最近の RAM 価格の下落が大きく影響し、従来の 「自作」 より圧倒的に安い。2006年 4月頃に DDR2-667 RAM 1GB ×4 で ¥60,000 近く払ったのが、悪質なボッタクリに遭った気分だ。
スペック面では、やはり消費電力の少ない Atom がデュアルコア化されたのが大きい。正直言って単体の性能はそれほど高くないが、発熱量が抑えられた結果静音化しやすく、各種 NAS アプライアンスの CPU が ARM でメモリが 128MB 程度だったりすることを考えれば、2GB のメモリを積んだ Atom 330 マシンは、小規模環境向けファイルサーバーとしては贅沢な仕様とも言える。せっかくのデュアルコア CPU と家庭用ファイルサーバー専用機にするにはもったいないメモリを活用するため、VMware Server 2.0 で仮想マシンをいくつか動かしてみることにした。
パーツが全て揃っていざ組み立ててみると、いくつかトラブルに遭遇。まず Mini-ITX ケースの A-ITX-202P300 はカタログ上は 3.5" HDD を 2台内蔵できるとされているものの、2台目の HDD 用スペースに排気ファンが居座っていて、このファンを外しても HDD を固定する金具が見当たらず、結局 HDD を搭載できない。また内蔵スピーカー用ケーブルが短いためにマザーボード上のコネクターに届かず、フロントに 2箇所ある USB ポートも 1つが効かない (不良品か?)。
仕方がないので、排気ファンにはそのまま本来の仕事をしてもらうことにし、2台目の HDD は 3.5" ドライブを 5" ベイに固定するスペーサー (ちょうど 1セット余っていた) を使って 5" ベイに搭載した。またスピーカー用ケーブルと 1つの USB ケーブルは諦め、丸めてモールで縛っておいた。5" ベイの蓋を開けると HDD が丸見えでも全く問題ないし、ファイルサーバーには音など不要。フロントの USB ポートも、メンテナンス時にキーボードを接続するための 1箇所が使えれば十分だ。
無事に内蔵した 2台の HDD は、CentOS 上の mdadm でソフトウェア RAID とした。RAID カードを使わない分 CPU に負荷がかかるが、RAID の状態を専用ツールなしで OS 上で直接確認できるのはメリットだ。今回は /boot 用の sdx1 を 100MB で確保し、残りの領域を 7個に (ほぼ) 等分割して sdx2~9 のパーティションを作成。全てのパーティションを 2台の HDD で RAID 1 化して md0 はそのまま /boot としてマウント、残りの md* を PV 化して LVM に組み込んだ。
- sda1 + sdb1 → md0: ext3 (/boot 用)
- sda2 + sdb2 → md1: LVM
- sda3 + sdb3 → md2: LVM
- sda4, sdb4: 拡張パーティション (以下論理パーティション)
- sda5 + sdb5 → md3: LVM
- sda6 + sdb6 → md4: LVM
- sda7 + sdb7 → md5: LVM
- sda6 + sdb8 → md6: LVM
- sda9 + sdb9 → md7: LVM
HDD を細かく割るのは、いざディスク障害が発生した時の影響を少なくしたい、船舶で言う 「防水区画」 的な考えに基づいている。例えばどちらかの HDD の 1区画で障害が発生した場合は、LVM の VG 上に 1区画分以上の空きがあれば、pvmove で他の区画にデータを逃がすことができる。ただ、細かく割り過ぎて管理が煩雑になるのを避けるためにパーティション番号を 1桁に収めた結果、1区画が 100GB を超えているし、ディスクの壊れ方によってはまったく意味をなさないこともあるので、まァおまじないのようなものだ。
また通常の OS インストール中に RAID 1 設定を行っても、ブートローダーが sda にしかインストールされない。この状態で sda が完全に死ぬと、データは無事でもサーバーを起動できなくなるので、sdb にも GRUB を別途インストールしておく必要がある。非 RAID 環境から RAID 環境への移行や GRUB 云々の手順は、こちらのサイトで詳しく解説されている。僕は Anaconda (CentOS のインストーラー) 上で RAID を細かく設定するのが面倒だったので、いったん非 RAID 状態で OS をインストールし、改めて完全 RAID 環境に移行させる際、参考にさせていただいた。
尚、RAID 1 構築後は、片方の HDD のケーブルを抜いた状態で正しく起動~稼働するか、本格稼働させる前に各 HDD についてしっかり検証しておいた方がいい。今回のサーバーではその度に約 1TB 全領域の RAID 再構築をすることになるので、とにかく時間がかかって閉口したが・・・。
古新しい?
上の写真は、OS インストールで久しぶりに出番が回って来た、9" モノクロ CRT の TVS VM-9AF。普段は押入の中で眠っているが、サーバー機で一時的にモニターが必要になった場合には重宝する。液晶モニター全盛の今では、逆に新しい感じがしないでもない。かつて HDD をはじめ余計なデバイス類を撤去して、FDD 起動の Linux ルーターと化した今は亡き IBM Aptiva H55 (1996年に購入した初 PC。CPU: Pentium 150MHz、RAM: 16MB → 64MB に増設、HDD: 2GB) で常用していたので、このモニターを使うと当時を思い出して懐かしい気分になる。
ちなみに、その時利用していた 1FD ディストリビューションは keroppy。変わった名前だが (笑)、カスタマイズしがいのある、面白いディストリビューションだ。