NASを設定してみた。


たまに自宅でMac間でファイルをコピーしたいと思うときがあり、FreeBSDなMicroserverにZFSなNFSを設定しているのですが、小さいファイルのコピーが多いので、わざわざMicroserverを起動するほどの事でもなく、中古MIPSルーターにUSB HDを接続してNFSサーバを設定してみました。

ファームはもちろんFreeBSD/12-CurrentでZRouterでビルドしてこのためにnfs_serverというprofileを追加してみました。

netatalkもちょっと見てみたのですが、ビルドが面倒なのであきらめました。Mac OS Xになってnfsも使えるようになったので、nfsではなくnetatalkにするメリットってあるのでしょうか?

一般的にNASは24時間稼働することが一般的のようですが、自分の場合それほど使わないのに24時間運転はかなり無駄に思います。このため通常時はNFSは起動せずに、ボタンを押すとNFSをONにして、もう一度ボタンを押すとOFFになるようにしてみました。OFFの状態ではストレージのUSBハードディスクの電源を落とせますし、本体の電源をそのまま落としても問題ありません。先日書いたevdevについてのメモはこのための下調べでした。

#!/usr/local/bin/mruby

led = 17

nfs = 0

gpio = BsdGpio.new(0)

gpio.setflags(6, BsdGpio::OUTPUT)

gpio.set(led,1)
`killall mountd`

bin = File.open("/dev/input/event0", "rb")

while ev = bin.read(24)
typecode = ev[16,4].unpack("S*")
val = ev[20,4].unpack("L*")
  if typecode[0] == 0x04 then
    if val[0] & 0x02 == 0x02 then
      p "AOSS"
      if nfs == 0 && File.exist?("/dev/da0") then
        `mount /dev/da0 /mnt`
        `mountd -r`
        gpio.set(led,0)
        nfs = 1
      else
        mo=`showmount | grep -v -c "^Hosts"`
        mo.chop!
        if mo.to_i == 0 then
          `killall mountd`
          `umount /mnt`
          gpio.set(led,1)
          nfs = 0
        end
      end
    elsif val[0] & 0x04 == 0x04 then
      p "USB"
    elsif val[0] & 0x08 == 0x08 then
      p "RESET"
    end
  end
end

ディスクはnewfsでufsにしてあります。

showmountでマウント中のホストを確認し、ある場合は停止できなくしています。

ストレージは昔買って使っていなかったIDE 3.5Inc,160Gが入ったUSB HDを使いました。中にはMaxtorが入っているのですが、このハードディスクはとても熱をもつので、常時稼働はさけたいと思っていました。良い利用方法が見つかりました。

このハードディスクは昔懐かしい、IED 3.5incのディスクが入ったUSBドライブなのですが、結構な発熱しているので、完全に電源断にしたいと思ったのものひとつの理由です。

このMIPSルーターのSOCはAtherosのチップで、sys/mipsでatherosは一番活発にメンテされていてUSBやEthernetも十分安定しています。

ワットチェッカーで消費電力を調べてみました。

状態 消費電力
NFS OFF 3W
NFS ON 18W
電源 OFF 0W

NFS OFFを忘れて電源を落としてしまうと次ぎにONにするときにmountできなくなるので、そのときはcliでfsckを実行します。

NFS OFFの時にもEthernetのSwitchとして機能しているので、3Wも無駄になってるわけではありません。

何よりこの仕組みの良いところは完全に電源を遮断できるところです。私は就寝前にネットワーク関係は電源を落としているので深夜帯は0Wで運用できます。

最近のNASは省エネ化が進んでいるようですが待機中に0Wにすることは不可能です。明示的なON/OFFにまさる節電方法は無いように思います。

1000baseTで接続されたMACからファイルを書き込むと落ちてしまうので、コンソールを確認したところkern.ipc.nmbclustersが足りてませんでした。とりあえず1220から5000にしたら、落ちないようです。