この記事の見出し一覧
QNAPやSynologyのアプライアンスを買わず自前でNAS構築したい。しかも、ディスクのファイルシステムは堅牢さが期待できるZFS。この記事は、そんな人向けの構築手順紹介です。極力、前フリ以外うんちくは廃して手順メインにしました。
ZFSの機能でRAID同等を実現
私的に構築前ずっと勘違いしてたのは、ZFSとRAID10の共存。RAID10で構成したい+ZFSでも構築したいと考えたものの、2つのキーワードでググっても両立するようなノウハウは無く、、、結論として「ZFSの機能でミラー(仮想デバイスで設定)組み合わせをストライピング(マネージメントで設定)すればよい」ということだった。これがRAID10相当になるということ。
ZFSに詳しい人から言えば、( ゚Д゚)ハァ?無知だなってことだけれど。ZFSの奥は深く、多機能だと実感。そして筆者の場合、ZFSで2021年現在9年以上トラブル無しという信頼性が見逃せなかった(Raid10のように構成したのは2018年時点で初)。
ファイルシステムをZFSにしなければ、NAS4Free上でソフトウェアRaidとして、Raid10設定することもできるけれど、今は無きSunの遺産を使いたいってのも大きな理由(Oracleのモノではない!w)。さらに、コマンドオプションがとてもシンプルなので比較的オペミスしずらいところも大きい。
以下見出し以降は、バージョン11.1.xで「GUI操作のみでZFS構築」を行った手順です。
構築後、1GbEでHDD(ZFSミラー)からSSD(Windows 10デスクトップ)へのコピースピードは、以下の通り。110MB/秒程度をキープしてるので妥当かと。
その後、10GbE環境にしたらこんな転送スピードです。そしてVMNET3で以下リンク先も参考にして、さらにスピードアップできました。
ディスク「マネージメント」
「ディスク」→「マネージメント」でOSから見えるディスクを追加登録します。ここでは4台のディスクが対象の例です。
デバイス名とミラー、プール名の構造は以下のツリー関係をイメージしてください。
注:ここで挙げているZFS設定はGUI優先の一例です(XigmaNAS対応)。
設定すべきは、対象「ディスク」の選択が必須で、今回の場合は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登録
定期的にScrub(ファイルシステム整合性チェック)するのがおすすめです。
以下のコマンドラインは、「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/秒超のスループットで満足度は高いです。
通知メール設定とメールレポート設定
筆者の場合メールサーバ運用はやめたので、GmailにSMTPしています。
日々のステータス状態が知りたい場合は、次のようなスクリプトを「メールレポート」設定に登録しておけば安心。ぜひお勧め。
以下のようなメールが届くので、管理画面にログインして覗くのも最小で済むわけです。
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.監視したい」理由のみでした。