はじめに

最初は市販のNASを購入して済ませてしまおうと思ったのだが、より低価格で済ませるために既に稼働しているRaspberry Pi2を使ってシンプルなNASを構築することにした。

要件

  • HDDは3.5インチのものを複数台保有しているので、それを流用したい
  • 保有しているHDDの容量は2TBから4TBだが、今後それ以上大容量のものを買い足す可能性がある
  • HDDは最低2台は繋げたい(メインとバックアップ)、出来れば3台繋げられれば尚良し
  • 主にデータ保管用として利用するので、使っていない時はスリープ状態(アイドリング)してほしい

HDDケースの選定

Raspberry PiでもNAS構築となると、必然的にUSBでHDDを接続するということになる。
HDD自体は既にあるので、今回はHDDケースを購入することにした。

玄人志向 GW3.5AX2-SU3/REV2.0

HDDが2台搭載できるお手頃のHDDケースということでこちらを選んだ。
既に新しい型が出ているので、ちょっとお求めやすく購入できるのも良い。

玄人志向 HDDケース3.5インチHDD2台搭載可能 USB3.0/2.0 GW3.5AX2-SU3/REV2.0

HDDが4TBまでしか対応していなかったが、HDDが結構余っているので、当面はこれで凌ぐという作戦。
特に問題なければ、より大容量に対応している新型のものも追加で買おうと思っていた。

玄人志向 3.5インチ&2.5インチ対応マウンタ付HDDケース USB3.1 Gen2対応 GW3.5ACX2-U3.1AC

しかし、実際に使ってみると、いくつか不満があった。

  • ファンの音がとにかくうるさい
  • ファンがHDDの回転数や温度に連動するわけでなく、常に全開(常にうるさい)
  • スリープ状態になってもずっと前面のランプが点いている
  • そのランプが眩しい
  • 時折動作が不安定になって、再起動しないと元に戻らなくなる

自分の用途としては、1台はバックアップなのでバックアップ時以外は常にスリープして欲しい。
なおかつスリープ時はランプも消えていてほしいのだけど、そのようには動作してくれず、スリープ状態になってもランプは点いたままで、とにかく眩しい。
そもそも常時稼働させておくと動作が不安定になるみたいで、日次で行っていた自動バックアップの処理も定期的に失敗していた。
安定稼働は必須だったので、ちと厳しいという判断。

GW3.5AX2-SU3/REV2.0のファンうるさい問題の対応

ちなみにファンの音は、以下のパーツでかなり改善することが出来た。

アイネックス チップファン用電源変換ケーブル EX-003

AINEX OMEGA TYPHOON 薄型・超静音タイプ [ 50mm角 ] CFZ-5010SA

ちょっと分解して上記パーツに交換すれば、満足できる程度には静かにすることが出来た。
ただ、静音になったことで冷却力も低下している気がするので、あんまり長時間HDDを稼働させると熱くなってしまうかも。

玄人志向 GW3.5AA-SUP3/MB

懲りずにまた玄人志向。
今度は1台搭載HDDケースの3台構成にしてみた。
ちなみに既に1台保有していたので、使用感が分かっていたので安心の選定。

GW3.5AA-SUP3/MB

1台で実験した通り、ほぼ期待通りの動作をしてくれた。
使っていない時はランプが消えてくれるし、ファンレスなので音は無音なのも良い。
だからといって触れなくなるほどすぐに熱くなるってこともない。
動作が不安定になることもなく、比較的安定している。
ただ、ケーブル類が増えてしまいごちゃごちゃしてしまったのが玉にキズだが、安定稼働には代えられない。

自動でUSB HDDをマウント

普通に /etc/fstab に書けばOK。
ただ、USB接続のHDDはいつ壊れるかわからないので、エラーでマウントできなくてもRaspberry Piの起動時には無視するように設定しておいた。
例えばこんな感じ。

UUID={hdd1-uuid} /mnt/hdd1 ext4 defaults,noatime,nofail 0 0
UUID={hdd2-uuid} /mnt/hdd2 ext4 defaults,noatime,nofail 0 0
UUID={hdd3-uuid} /mnt/hdd3 ext4 defaults,noatime,nofail 0 0

肝は nofail という部分。
これで、何かHDDにトラブルが合っても、Raspberry Piの起動の妨げにならない。

Samba

NASといってもSambaをインストールして設定すれば良いだけなので、特に難しいことはない。

$ sudo apt-get install samba

自分の場合はインターネット上に公開するわけでもないし、家庭内のネットワークも誰かに公開したりもしないので、ユーザー認証もなしで繋げられるように設定した。

/etc/samba/smb.conf はこんな感じ。
以下をglobalセクションに追加。

   dos charset = CP932
   unix charset = UTF-8
   display charset = UTF-8
   unix extensions = no
   wide links = yes
   delete veto files = yes

後は Share Definitions 配下を全部コメントアウトして、以下のような感じに追加。

[hdd1]
   path = /mnt/hdd1
   browseable = yes
   read only = no
   create mask = 0644
   directory mask = 0755
   force user = pi
   force group = pi
   guest ok = yes
   guest only = yes
   guest account = nobody
   hosts allow = 192.168.0.

誰としてログインしても、強制的に pi ユーザーとして書き込むようにしてある。
あとは、一応ローカルからしかアクセスできないようにしたりとか、細かい設定。

HDDのスリープ(アイドリング)

自分はhd-idleというのを利用している。
debパッケージが用意されているので、ダウンロードして dpkg -i すればOK。
あとは設定ファイルにルールを書いてしまえば、よろしくやってくれる。

ちなみに自分は900秒アクセスがなければ、スリープ状態にしてくれるように設定している。
設定ファイル /etc/default/hd-idle にはこんな感じ。

START_HD_IDLE=true
HD_IDLE_OPTS="-l /var/log/hd-idle.log -c ata -i 900 -a {hdd1-uuid} -a {hdd2-uuid} -a {hdd3-uuid}"

スリープ設定の他に気休めでログも出すようにしている。
設定通りに900秒後にHDDのランプが消えると、おおおって感動する。
忘れずに systemd で自動起動するようにしておけばOK。
便利。

おわりに

HDDケースで一度選定をミスってしまい、結果的に高く付いてしまったが、シンプルで長く運用できそうな構成にはなったと思うので満足。
Raspberry Pi2は非力だけど、その分省電力ではあると思うので、我が家の用途には合っている気がする。
Raspbianがメンテされている限りは運用できそうなので、Raspberry Piは古い型でも息長く使えて良いんじゃないだろうか。