XigmaNAS/NAS4FreeでRAID10ライクなNAS構築 ── GUI操作だけでZFS

QNAPやSynologyのアプライアンスを買わず自前でNAS構築したい。しかも、ディスクのファイルシステムは堅牢さが期待できるZFSに。そんな人向けの手順紹介です。

ZFSの機能でRaid同等を実現

私的に構築前ずっと勘違いしてたのは、ZFSとRaid10の共存。Raid10で構成したい+ZFSでも構築したいと考えたものの、2つのキーワードでググっても両立するようなノウハウは無く、、、結論として「ZFSの機能でミラー(仮想デバイスで設定)の組み合わせをストライピング(マネージメントで設定)すればよい」ということ。

ZFSを知ってる人から言えば( ゚Д゚)ハァ?ってことだけれど。ZFSの奥は深く、多機能だと実感。そして筆者の場合、ZFSで5年以上トラブル無しという信頼性が見逃せなかった(Raid10のように構成したのは今回初)。

ファイルシステムをZFSにしなければ、NAS4Free上でソフトウェアRaidとして、Raid10設定することもできるけれど、今は無きSunの遺産を使いたいってのも大きな理由(Oracleのモノではない!w)。さらに、コマンドオプションがとてもシンプルなので比較的オペミスしずらいところも大きい。

XigmaNAS is the easiest and quickest way to install an Open Source free NAS server. From home NAS to enterprise network storage, XigmaNAS is trusted by thousand...

以下は、バージョン11.1.xで「GUI操作のみでZFS構築」を行った手順です。

注:ここで挙げているZFS設定はGUI優先の一例です(XigmaNAS対応)。

ディスク「マネージメント」

「ディスク」→「マネージメント」でOSから見えるディスクを追加登録します。ここでは4台のディスクが対象の例です。

設定すべきは、対象「ディスク」の選択が必須で、今回の場合はS.M.A.R.T.の有効化をしています。最後で少し触れますが、S.M.A.R.T.を有効にしたいためESXi上でRDM設定をしました。

上記を4回(4つのディスク)繰り返します。なお、今回の例ではESXi上でRDMマウントをさせています。理由は後述にて。

上記のようになっていればOK。ここまででディスクマネージメントの完了です。

ZFS「仮想デバイス登録」

「ディスク」→「ZFS」→「仮想デバイス」をたどります。

4台のうち2台ずつを「MIRROR」設定で束ねます。ここでは、「vdev1」「vdev2」などと記載していますが任意の名称です。

ZFS「マネージメント」

「名前」項目を任意の名称にして「仮想デバイスリスト」に表示されている、ここでは「vdev1」「vdev2」を選択して各ミラーしたものをストライピングとして設定すれば完了です。名前の「nas」は任意の名称です。

ZFS「データセット」

最後に「データセット」で「プール」として設定します。名前(プール名)の「nas」は任意のものです。

ここまででZFS設定が完了です。「ボリューム」は使ってません。

CIFS/SMB設定

最後に、CIFSなどのサービス設定をすればWindowsネットワークで次のようにフォルダ表示されます。この記事はZFSのGUI設定がメインのため端折ってます。

あと、ZFSなのでメンテ設定として次のようにScrubをCron登録しておけば、予兆把握に安心です。

ScrubのCron登録

以下のコマンドラインは、「nas」の個所を各自のプール名に置き換えです。

以上の設定後、ZFS情報を確認すると次のようになっています。

アップデートしても影響がないように、ブートディスク外に次のようなスクリプトを置いておけば、Cron実行も安心です。

nas4free: ~# cat /mnt/nas/datastore/bin/status.sh
#!/bin/sh
/sbin/zpool status -v
/sbin/zpool iostat -v
/usr/local/bin/zfs-stats -E
nas4free: ~#

ここで使用しているディスクは3GbpsのSATA接続のため、Scrubが9時間超と比較的遅め、などということも上画像から分かります。下画像のように、その最中はCPU負荷もかなり上がっており、本環境の場合消費電力もちょうど10W増えてます(常用している別ツールMuninでモニタリングの例)。

ちなみに、16TBのプールでガリガリディスク読み書きし続けると、メモリー16GBでも少なくスワップも発生する事態。いや、日常的に16GBでは足りないようで(下画像のように)。さすがリソース食いのZFSだけれど、本構成でも常に80MB/秒超のスループットで満足度は高いです。

munin-node、Zabbix Agentを自動インストール

アップデートするとまっさらになってしまうので、モニターアプリ(Munin/Zabbix)は起動時にインストール&設定するようにスクリプトを用意した。

nas4free: ~# cat /mnt/nas/datastore/bin/app_start.sh
#!/bin/sh
/usr/local/sbin/pkg install -y munin-node
/usr/local/sbin/munin-node-configure --shell | sh -x
echo "host_name nas" >> /usr/local/etc/munin/munin-node.conf
echo "allow ^192\.168\.xx\.xx$" >> /usr/local/etc/munin/munin-node.conf
/usr/local/etc/rc.d/munin-node onestart
echo 'munin_node_enable="Yes"' >> /etc/rc.conf
ln -s /mnt/nas/datastore/bin/plugin/zfs_cache_efficiency /usr/local/etc/munin/plugins/zfs_cache_efficiency
ln -s /mnt/nas/datastore/bin/plugin/zfs-stats-for-freebsd-cache-hits-by-cache-list /usr/local/etc/munin/plugins/zfs-stats-for-freebsd-cache-hits-by-cache-list
ln -s /mnt/nas/datastore/bin/plugin/zfs_stats_ /usr/local/etc/munin/plugins/zfs_stats_
ln -s /mnt/nas/datastore/bin/plugin/zfs-stats-for-freebsd-cache-hits-by-data-type /usr/local/etc/munin/plugins/zfs-stats-for-freebsd-cache-hits-by-data-type
ln -s /mnt/nas/datastore/bin/plugin/zfs_usage_ /usr/local/etc/munin/plugins/zfs_usage_
ln -s /mnt/nas/datastore/bin/plugin/zfs-stats-for-freebsd-dmu-prefetch /usr/local/etc/munin/plugins/zfs-stats-for-freebsd-dmu-prefetch
ln -s /mnt/nas/datastore/bin/plugin/zfs-filesystem-graph /usr/local/etc/munin/plugins/zfs-filesystem-graph
ln -s /mnt/nas/datastore/bin/plugin/zfsarcstats-counters /usr/local/etc/munin/plugins/zfsarcstats-counters
ln -s /mnt/nas/datastore/bin/plugin/zfs-stats-for-freebsd-arc-efficiency /usr/local/etc/munin/plugins/zfs-stats-for-freebsd-arc-efficiency
ln -s /mnt/nas/datastore/bin/plugin/zlist /usr/local/etc/munin/plugins/zlist
ln -s /mnt/nas/datastore/bin/plugin/zfs-stats-for-freebsd-arc-utilization /usr/local/etc/munin/plugins/zfs-stats-for-freebsd-arc-utilization
ln -s /mnt/nas/datastore/bin/plugin/zpool_iostat /usr/local/etc/munin/plugins/zpool_iostat
/usr/local/sbin/pkg install gawk
/usr/local/etc/rc.d/munin-node restart

/usr/local/sbin/pkg install -y zabbix4-agent
/bin/cp /usr/local/etc/zabbix4/zabbix_agentd.conf.sample /usr/local/etc/zabbix4/zabbix_agentd.conf
sed -i '' -e 's/Server=127.0.0.1/Server=192.168.xx.xx/' /usr/local/etc/zabbix4/zabbix_agentd.conf
sed -i '' -e 's/ServerActive=127.0.0.1/ServerActive=192.168.xx.xx/' /usr/local/etc/zabbix4/zabbix_agentd.conf
sed -i '' -e 's/Hostname=Zabbix\ server/Hostname=nas/' /usr/local/etc/zabbix4/zabbix_agentd.conf
sed -i '' -e 's/\#\ EnableRemoteCommands=0/EnableRemoteCommands=1/' /usr/local/etc/zabbix4/zabbix_agentd.conf
echo "UserParameter=zpool.health[*],zpool list -H -o health $1" >> /usr/local/etc/zabbix4/zabbix_agentd.conf
echo "UserParametor = zpool.size[*], zpool list -H -p -o size $1 >> /usr/local/etc/zabbix4/zabbix_agentd.conf
echo "UserParametor = zpool.capacity[*], zpool list -H -p -o capacity $1 >> /usr/local/etc/zabbix4/zabbix_agentd.conf
/usr/local/etc/rc.d/zabbix_agentd onestart

/usr/local/sbin/pkg install -y zfs-stats
nas4free: ~#

ただし、よく推奨されているembeddedインストールの場合は、/usr/local がパッケージ追加で100%必至。このため、OS Fullでシステム再インストールするのがよく、Fullインストールで最初の方に問われるOSパーティション容量を大きく確保しておけばパッケージをいろいろ追加できるので安心。

MuninでもZFS状況が分かるから助かる。たいした使ってない稼働状況も。。。

ディスクはS.M.A.R.T.監視のためESXi上でRDMに

S.M.A.R.T.監視したいため、ESXi上ではRDM(Raw Device Mapping)マウントさせている。多くの事例では、RDMにするのはVMDKでなくRAWディスクとしてマウントさせたほうがパフォーマンスやESXi環境からディスクを抜いても使えるという解説が多い。しかし筆者の場合は「S.M.A.R.T.監視したい」理由のみだった。

ついにディスクが壊れたか?! ふと、サーバーのmini-ITXケースを眺めるとLEDが消灯してて焦...
sponsored links
SNSフォローボタン