2010年にIntel Atomオンボードの省エネマザーボードでUbuntuServerを構築して、主にNASサーバとして利用していましたが、
この間、ディスクの交換のためにOSをクリーンインストールを試みたところ、BIOS画面がフリーズするようになってしまいました。
そろそろ寿命なんでしょうね。
というわけで新しい省エネサーバを組もうと思った次第であります。
用途・要件
主な用途はNASですね。さらにsshfsを使用して外からもアクセスできるようにしておきたいです。あとddnsの更新や動画・画像ファイルの整理・最適化などちょっとした雑用もやってもらいたいですね。遊びでNo more room in the hellみたいなSteamのゲームサーバも構築するかもしれません。
データの信頼性を高めるためにRAID1を組みたいところ。ストレージ容量は3TB。LANは1000BASE-Tは当たり前。
OSはSSDにインストールすることで、必要な時にHDDが始動するような形で静穏性+省エネ性を高めたい。
TCOをなるべく安く!
まとめ
- 主にNAS用途
- 外からアクセスできる
- ストレージ: 3TBx2 RAID0 + SSD
- イーサネット: GbE
- 静穏・省エネ・低TCO
ハード選び
とにかくTDPが低く仕上がるマザーボードとCPUを探しました。
ASRockのAMD AM1チップセット搭載のMiniITXマザーボードと、それに対応しているTDP25Wでクアッドコアという「AMD Athlon 5350 Kabini」
両方とも5000円以下でユーザの評価も高いです。
HDDとメモリは一番安いものです。HDDはWD製の3TB/5400rpmを二つ、メモリは4GBで安いものを。
HDDは低速の物の方が読み書き速度は劣るものの寿命は長めです。てか7200rpmなんてレッドゾーン直前じゃないですか。
ケースと電源ユニット。ケースは小型でシンプルなものを。電源ユニットはワット数が低く変換効率が高めの製品を。
OSインストール
OS選び
自分はDebian系OSが使い慣れてるので無難にUbuntuServerを入れてみました。
インストール時にロケールを日本語にせずCにしておきます。日本語を無理に表示しなくなるため文字化けせず済みます。
ディスク・パーティション構成
搭載ディスクはSSD 250GBが1基とHDD 3TBが2基。
HDDの方は3TBの2基をRAID0を組んで3TBのNAS領域で共有するとして、
SSDは基本パーティションで30GB,30GB,170GBに分けました。
30GB/ext4 マウントポイント"/" UbuntuServer (1)
30GB/ext4 マウントポイント"/" UbuntuServer (2)
170GB/ext4 マウントポイント"/home"
UbuntuServerを二つ入れてデュアルブートにしてバックアップ用と用途を使い分けようかと思っています。
/homeパーティションは大きめにとって共通で使います。
サーバ構築
RAID構築
RAID構築の前に、msdos形式では扱えるディスクサイズが2TBが上限なので2TB以上も扱えるgpt形式にします。
# parted /dev/sdb
(parted) mklabel gpt (parted) mkpart primary ext4 1 -1 (parted) print Model: ATA WDC WD30EZRZ-00Z (scsi) Disk /dev/sdb: 3001GB Sector size (logical/physical): 512B/4096B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1000kB 3001GB 3001GB primary
もう3TB越えのHDDが普通に出回っている現在、fdiskは古くなりつつあるのでしょうか。
parted で非インタラクティブにパーティションを切る - http://qiita.com/ngyuki/items/93da394fd0847ed5155e
gpt形式でパーティションを作成したらmdadmコマンドでRAID1を作成します。
# mdadm --create /dev/md0 -l1 -n2 /dev/sdb1 /dev/sdc1
# mkfs -t ext4 /dev/md0
起動時にRAIDが設定されるように「mdadm --detail --scan」の表示結果を/etc/mdadm/mdadm.confに記述します。
# mdadm --detail --scan >> /etc/mdadm/mdadm.conf
起動時にマウントされるように/etc/fstabを編集
# vi /etc/fstab
/dev/md/hostname:0 /storage ext4 defaults 0 0
fstabに記述する際に注意しなくてはいけないのは/dev/md0などという構築時の固有のデバイスファイル名を指定してはならないという点です。
起動するたびにデバイスファイル名が変わることがありますのでデバイスファイル名が異なる場合、マウントできず起動プロセスが止まってしまいます。
/dev/md/以下に「ホスト名:連番」という形で仮想のデバイスファイルがあるためそっちを指定します。
RAID mdadm
ネットワーク設定
/etc/network/interfacesを編集します。
auto enp2s0 inet enp0s static address 10.0.1.1 network 10.0.0.0 broadcast 10.0.255.255 netmask 255.255.0.0 gateway 10.0.1.254 dns-server 8.8.8.8
イーサネットのデバイス名がeth0じゃなくて戸惑ったんですが、どうやら最近のカーネルバージョンからイーサネットの命名規則が変わったようです。ほえーCentOSでは見たことありましたが、この仕様がとうとうUbuntuにまで来たとは。
enp2s0を分解すると、
enはイーサネットを意味し、p2番目のバス、s0番目のスロット
という意味になります。
CentOS 7のネットワーク名「enp1s0」という文字列の謎に迫る - http://qiita.com/fetaro/items/b61282130fa638de4528
SSH設定
UbuntuServerなら入っていると思うのでsshを以下のコマンドで有効にしてやります。
# update-rc.d ssh enable
# service ssh start
お好みで/etc/ssh/sshd_configを編集してごにょごにょ設定しましょう。基本的にはデフォルトで無難に使えますが、セキュリティを高めるためにパスワードログインを無効化して鍵のみでのログインにしてみます。
ssh-keygenコマンドで鍵ペアを作成
$ ssh-keygen
~/.ssh/に次の二つのファイルが作成されます。
$ cd ~/.ssh
$ ls
id_rsa id_rsa.pub known_hosts
id_rsaが秘密鍵で、id_rsa.pubが公開鍵となります。
id_rsaを秘密鍵として認めるには、同時に作成された公開鍵id_rsa.pubの内容を~/.ssh/authorized_keysというファイル名で追記していきます。
初回はauthorized_keysというファイルは存在しないのでmvコマンドでリネームする形でもおkです。
$ cat id_rsa.pub >> authorized_keys
/etc/ssh/sshd_configを編集してパスワードログインを無効化します。
PasswordAuthentication no
sshデーモンを再起動して反映させます。
# service ssh restart
これで鍵でしかログインできなくなりました。ログインする際は-iオプションで秘密鍵を指定してログインします。
# ssh -i id_rsa 10.0.1.1
OpenSSHサーバの設定
Samba設定
Windowsからもアクセスできるようにsambaを構築します。
/etc/samba/smb.confを編集します。ログやパラメータなど色々細かい設定はありますが、デフォルトで無難に使えます。
以下を追記してRAIDのマウントポイントを共有させます。
[storage] path = /storage read only = No browseable = No
同じネットワークのコンピュータに見られないように不可視にしました。
設定ファイルの構文があっているか確認するためにtestparmコマンドを実行します。
$ testparm /etc/samba/smb.conf
設定を反映させるためにデーモンを再起動させます。
# service samba restart
sambaにログインを許可するユーザを作成します。
unixアカウントと連動しているため/etc/passwdに記述されているユーザIDの中から選択します。
# pdbedit -a user
Windowsからマウントする際は以下のコマンドを実行することでn:ドライブとしてマウントされます。
> net use n: \\10.0.1.1\storage /user:user /password:password
sambaサーバの設定,管理
Apache2の設定
Apache2もインストール時のデフォルト設定で十分使えてしまうので特筆する点はありません。
セキュリティを向上させたりパフォーマンスなどの設定は各自のケースにもよるので、とりあえず設定ファイルについて簡単な説明を。
Apache2の設定ファイルは/etc/apache2/に設定するカテゴリごとにディレクトリとファイルで分けられています。
apache2.conf conf-enabled/ magic mods-enabled/ sites-available/ conf-available/ envvars mods-available/ ports.conf sites-enabled/
最も基本的な設定は/etc/apache2/sites-enabled/000-default.confに記述されています。
DDNS設定
外からアクセスするためにはIPアドレスを固定するか、DDNSでIPを対応付けておかなければなりません。
IPアドレスの固定はプロバイダーとかいろいろ手続きしたりしなきゃならんので、手っ取り早いDDNSを登録して更新し続けることにします。
DDNSの老舗 http://ieserver.net/ でDNSを登録します。
perlの自動更新スクリプトが公開されているのでこれを落としてcronで回します。
http://ieserver.net/ddns-update.txt
cronのエントリはcrontabコマンドの-eオプションで編集できるのですが、ここで気を付けなければならないのは、Eキーに隣接するRキーを押して「-r」オプションで実行してしまうと、エントリがすべて削除されてしまいます。本当によくあるミスなので気をつけましょう。
$ crontab -e
0 */4 0 0 0 /usr/bin/ddns-update.pl
4時間おきにスクリプトが実行されます。
ルーターのポート開放設定
- 関連記事
-
-
Linuxのタイムゾーンを変更する方法 2016/09/11
-
Linuxサーバーを構築する 2016/08/20
-
NASのRAID1からデータをサルベージ 2016/08/09
-
ASUS EeeBook X205TAにXubuntuをインストール 2015/06/26
-
OpenSSHサーバの設定 2015/04/22
-