Raspberry Pi を Network boot (with Synology DiskStation DS115j)

2016/10/11Raspberry Pi, 自宅サーバー

あらすじ:小さなサーバーとして便利な Raspberry Pi。しかし記憶媒体として利用するMicroSDカードは寿命が短く、ディスクの中身が吹っ飛んでしまう事故が多発。対策として古いLANDISKをNFSサーバーとして使うことで平穏な日々を得たのだが、そのLANDISKは台風時の停電の影響?で電源が入らなくなってしまう。NFSサーバーを求める冒険が始まった。

Raspberry Pi/Pi2のSDカードが壊れる」「Raspberry Pi を Network boot (with LANDISK NFS)」「Raspberry Pi 用 NFS+tftpサーバー求む」の続きです。

NFSサーバーの用意

Raspberry Pi 用 NFS+tftpサーバー求む」にて色々な案を検討し、ブログ等の評判も良いSynology社のNAS(DS115j)を買うことにした。下位機種なので遅いかもしれないけど、Raspberry Piの親機+αとして使う分には十分だろう。余っているディスクを刺せば動くので全体のコストが比較的安いのもありがたい。

Amazon:Synology DiskStation DS115j 多機能1ベイNAS CS4961

箱の表に設定方法が書かれていて、本当にこれだけで動きます。恐ろしく簡単。

20161010-synology-1

ハードディスクが入っていないこともあり、箱が意外なほど軽い


ケースはネジ止めされていないので、開けてディスクを装着するのは実に簡単。細かい配慮が嬉しい。ネジを無くす心配も減るし。
(製品の用途差もあるけど、LANDISKは分解するのが面倒臭かったので余計にそう思う)

20161010-synology-2

GUIからサクサク設定できます。今までに使ったことのあるNASの中では一番早くて簡単だと思う。

20161010-synology-3

1万円ちょっとで買える安NASなのに、想像以上に使えますね。

LANDISKからのデータ以降&Raspberry Piの設定

幸い旧LANDISKのHDDは読み取りできたので、USB HDDとして接続し、VMware上のubuntuでmount。scpにてDS115jに転送。

Raspberry PiのMicroSDの/boot/cmdline.txtの内容を書き換え、DS115jのNFSをrootとして起動するように設定。
DS115jはNFSv4も使えるが、とりあえずNFSv3にて設定。

[code lang="text"]
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 ip=192.168.xxx.clientip:192.168.xxx.nfsserverip:192.168.xxx.gateway:255.255.255.0:rpi_hostname:eth0:off root=/dev/nfs rootfstype=nfs nfsroot=192.168.xxx.nfsserverip:/rpi_directory,tcp,rsize=32768,wsize=32768,vers=3 rw smsc95xx.turbo_mode=N elevator=deadline rootwait
[/code]

Raspberry Pi側の設定完了後、再起動すると何事もなかったかのように元の状態で起動した。NAS bootのメリットだね。

NFS転送速度

DS115jはssh loginできる。接続したHDDの読み込み速度は70Mbyte/secを超える。旧LANDISKに接続していた SAMSUNG HA250JC は16Mbyte/secだったので、4倍以上速くなっている。

# hdparm -ft /dev/hda

/dev/hda:
Timing buffered disk reads: 216 MB in 3.01 seconds = 71.87 MB/sec

DS115j上にて測定

ddで書き込みすると46Mbyte/sec。

# LANG=C dd if=/dev/zero of=dummy bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 23.2899 s, 46.1 MB/s

DS115j上にて測定

Raspberry Pi/Pi2から書き込み。NFSv3,udp,rsize=4096,wsize=4096 だと旧LANDISK程度の速度しか出ない。相当オーバーヘッドがあるようだ。

# LANG=C dd if=/dev/zero of=dummy bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 171.305 s, 6.3 MB/s

Raspberry Pi2+DS115j NFSv3(udp,rsize=4096,wsize=4096)

NFSv3,tcp,rsize=32768,wsize=32768 にすると倍速になった。Raspberry Piのイーサネットは100Mbpsなので12.5MB/sが上限。このあたりが限界だろうか。
microSDは read で 20MB/s, write も 10MB/s ぐらい出るので、ようやくMicroSD並みと言える。

# LANG=C dd if=/dev/zero of=dummy bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 95.9589 s, 11.2 MB/s

Raspberry Pi2+DS115j NFSv3(tcp,rsize=32768,wsize=32768)

Raspberry Pi(初代)は設定を変えても速くならない。旧LANDISK接続時は4.6MB/sだったので2割ほど速くはなっているのだが。Raspberry PiのCPU性能が低いせいだろうか。

$ LANG=C dd if=/dev/zero of=dummy bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 191.454 s, 5.6 MB/s

Raspberry Pi+DS115j NFSv3(tcp,rsize=32768,wsize=32768)

検討事項: NFSへの接続はtcpがいいのかudpがいいのか。tcpだとサーバー再起動があると刺さるはず。

DS115j便利だけど、SPOFになるのが心配

LANDISK NFSで心配したのは、LANDISKが単一障害点(SPOF)になること。案の定LANDISKが死んで、Raspberry Piが使えなくなった。

今回の構成はLANDISKをDS115jに置き換えただけなので、問題点はそのまま残っている。安い製品なので壊れてもまた買えば良いと割り切っておく。

速いし便利なので色々追加したくなるけど、卵を1つの篭に入れるのは心配なんだよなあ。悩ましい。

20161010-synology-4

(パッケージ機能を使って、様々な機能を追加できるのも便利)


LANDISKと違って入手困難になることはないだろうし。次からNASを増やす時はSynology製品に統一すれば予備にもなるので、将来はその方向で検討。
次に買うなら2ベイ以上の製品かなあ。

Synology DiskStation DS115j 多機能1ベイNAS CS4961 DS115j
Synology DiskStation DS216j デュアルコアCPU 2ベイNASキット DTCP-IP対応可 CS6426