この記事は、FreeBSD Advent Calendar 2019のために書き下ろしました。
逸般の誤家庭に NAS を FreeBSD で組んで 置こう よ。簡単だよ。でも、お金はかかるかもよ。というお話です。
我が家には、サーバールーム(以下鯖部屋)があり、ちょっと だけ逸般しています。昔は対外回線も2本あったのでさらに逸般してたのですが、さすがに回線はまとめてしまった。だってお高いんですもの。
さて、鯖部屋には、仮想環境構築用にXCP-ngが動いている鯖とかプリンタとかJetson-nanoとか色々な子が鎮座在しましておられるのですが、その中にボスのような存在の、しかし表からは見えない(見せていない)とても重要な鯖が居られまする。それが NAS。
このNASは、鯖部屋の仮想環境にStorageを供給するのみならず、バックアップデータの保存所にもなっているので、非常に重要な鯖なのです。生き腐れたら困ってしまうのです。だって(ほぼ)すべての環境が…
そう、このNASの電源が壊れたのが全ての始まりだったのです。
壊れた話とか、一時的無理やりな復旧の話とか、そういういろいろは全部すっ飛ばして、本題の「パリピなNAS鯖を逸般の誤家庭で飼う」部分のみを切り出すことにします。
Google様で検索してもBing様で検索してもDuckDuckGo様で検索しても「パリピなNAS」なんてパワーワードは結果に出てきません。(この記事だって「パリピな鯖」としか書いてないし、「パリピな鯖」としても検索には出てきません。あしからず。)
今回NASを作るにあたり考えたのは、
の3点です。なので、清水の舞台から飛び降りるつもりで以下の部材を揃えました。
ええ、贅沢しました。かなり贅沢であることは間違いないです。はい。
これがパリピなNASの諸元です。はい。え?全然パリピじゃ無い?、ではお見せしましょう。
こんななんです。はい。ファンがとっても「パ・リ・ピ」でしょ?
実は調子に乗って、ケースに追加のファンをつけましたが、これもLEDファンです。これをみた娘が「パリピなファン」と言ったんです。そして組み上がったPCを見て、「パリピなPC」と言ったんです。このマシンはNASになるのだから、このマシンは「パリピなNAS」ということになります。(異論は聞きません)
ケース正面のDiskマウンタが、全部「高輝度青色LED」なので、目が痛いです。ブルーライトカット眼鏡が要りそうな勢いです。
さて、ここからはちょっと真面目にいきましょう。
今回作成するNASは以下のような実装でいきます。
OS | FreeBSD 12.1-RELEASE |
---|---|
FileSystem(Boot) | 250GB SSD / UFS |
FileSystem(供給ストレージ用) | SSDのみを束ねたZpool(Zssd)とHDDのみを束ねたZpool(Zhdd)の二つ |
XCP-ngに供給するStorage(仮想Disk用) | iSCSI |
XCP-ngに供給するStorage(インストーラーイメージ用) | NFS (v3)(本記事では扱わない) |
iSCSIを供給するI/F | 10G(ixgbe)を2本Link Aggregation(LAG)し、Jumbo Payload(9000)で利用 |
NFSを供給するI/F | 1G(em)を2本LAGして利用(本記事では扱わない) |
FreeBSDのInstall方法はここでは取り扱いません。https://www.freebsd.org/doc/ja_JP.eucJP/books/handbook/bsdinstall.html や、FreeBSD利用者のための情報共有など様々な場所で情報ややり方が公開されているので、探してみてください。
今回のシステムは、基本的に、OSのDistributionだけで、ほとんどの部分が構築できます。実際、自分が使っているDistributionに含まれないツールは
だけです。これらをpkgからInstallするだけです。
将来、SAMBAに対応させたいという気持ちもあるのですが、それはVMから供給する手もあるかなぁ...
インストールが済んだら、OSの設定です。
この記事はあくまでパリピな鯖を飼うことが目的なので、細かい設定は書きません。ちょっと気をつけておくと幸せなところだけをピックアップします。
10GNICをJumbo Payload で利用するので、以下の設定を投入する
kern.ipc.nmbjumbo16=262144 kern.ipc.nmbjumbo9=262144 kern.ipc.nmbjumbop=262144 kern.ipc.nmbclusters=262144 hw.intr_storm_threshold=9000 net.inet.raw.maxdgram=16384 net.inet.raw.recvspace=16384
当然NICにJumbo Payload設定を投入する必要があります。ただし、Jumbo Payloadを利用する場合には、以下の点に注意が必要です。
cloned_interfaces="lagg0" ifconfig_ix0="mtu 9000 up" ifconfig_ix1="mtu 9000 up" ifconfig_lagg0="laggproto lacp laggport ix0 laggport ix1 mtu 9000 inet 192.0.2.11/24"
今回のパリピNASのようなDiskの多いマシンの場合、Diskが壊れることを常に考えておく必要があります。
壊れることに対処するには、
といった準備が必要になります。
# gpart add -l sata1p1 /dev/ada0p1 # gpart add -l sata1p2 /dev/ada0p2 # gpart add -l sata1p3 /dev/ada0p3
gpart show -l
などとしてください。# gpart show => 40 488397088 ada1 GPT (233G) 40 409600 1 efi (200M) 409640 479838200 2 freebsd-ufs (229G) 480247840 8149288 3 freebsd-swap (3.9G) # gpart show -l => 40 488397088 ada1 GPT (233G) 40 409600 1 sata1p1 (200M) 409640 479838200 2 sata1p2 (229G) 480247840 8149288 3 sata1p3 (3.9G)
/dev/gpt/sata1p1
のような形で利用することができます。fstabなどで指定するDisk名にも利用できるので、便利です。# : # GPTにしてLabelをつける # for i in `seq 0 11`; do j=`expr ${i} + 1` gpart create -s gpt da${i} gpart add -t freebsd-zfs -l ssd_hba${j} da${i} done # : # RAID-Z2 SSD poolを作成する # mkdir /zfs # zpool create SSD raidz2 /dev/gpt/ssd_hba* # : # iSCSI export用のzvolを構築する # zfs create -o volmode=dev -V 16T SSD/zvol
これで、iSCSI用ZFS Volumeが完成します。
ここまでできれば、あとは iSCSI Targetとしての設定を行うだけです。
FreeBSDでは、Systemに当初からiSCSI Targetになるためのdaemonであるctldがあるので、その設定を行います。
ctldは、設定ファイルとして /etc/ctld.conf
を読み込むので、ctld.confを設定します。
詳しい内容はmanページを見てくださいね。
# # ctl.conf : FreeBSD iSCSI target configuration # # iSCSI portal configuration portal-group pg0 { discovery-auth-group no-authentication listen 192.0.2.10:3260 } # iSCSI target configuration target iqn.2018-05.org.dsk.example:target0 { alias nasvol auth-group no-authentication portal-group pg0 lun 0 { device-id zvol12t serial 1 path /dev/zvol/SSD/vol } }
そして、/etc/rc.confに以下の行を追記します。
ctld_enable="YES"
えー、とても長くなりました。それでもNFSには到達できませんでしたし、文章も下手ですね。すみません。疲れたでしょう?
パリピなNASを動かし始めてそろそろ2週間が経つのですが、とても快適です。 というよりも、このNASの限界性能を要求するような状況が未だ発生していないのですが、置き換え前のNASよりも反応が早くて(当たり前だよ)とても快適になりました。
一つだけ問題があるとすると、深夜でも鯖部屋に入ると七色の電飾が延々回り続けるPCのおかげで、部屋の中の雰囲気がとても怪しいことです。 正直、押し込める場所を持たない一般のご家庭では、24時間稼働はちょっと悩ましいところでしょうか。
でもいいんです。今回の記事は「逸般の誤家庭に置く」NASなのですから。
FreeBSDはLinuxに比べて大変にマイナーな、情報も集めにくいOSですが、様々なNetwork系サーバーを構築するには軽くてキビキビ動く、とても可愛いOSです。 興味を持つ方が増えたら幸いです。
今回は生NASを生に作ってみましたが、XigmaNASというFreeBSDを元にしたフリーのNASアプライアンスもありますから、興味があればどうぞ。
是非是非機会があれば試してみてくださいね。
それでは〜