お金をかけずにサーバーの勉強をしよう

FreeNASのNFSサーバー機能

2022年11月23日

メニューへ戻る

FreeNASには NFSサーバー機能もありますので、それも使ってみます。

こんにちは。

FreeNAS(今はTrueNASと改名しています)で iSCSIデバイスを作る過程で、「NFS機能もあるのだなぁ」と気付いていました。

複数の NGINXサーバーで同じ内容を表示したいとかの用途で NFSを使いたい時に Ubuntu Serverにやらせても良いのですが、FreeNASにやらせられるなら メモリも CPUも食わないので、貧弱な環境で検証するのには都合が良いです。

そこで大したネタではないですが、FreeNASでNFSサーバーを構成して、Ubuntu Serverでネットワークマウントしてみたいと思います。

環境は以下の通り。


では、まず FreeNASの設定から。

FreeNASのインストールについては「ソフトウェアiSCSIデバイス(FreeNAS)(中編)」に書いていますので、それを参照して下さい。
2台目のディスク(da1:10GB)がある前提となります。


NFSで提供するディスクは、FreeNASの OS(FreeBSDがベース)にファイルシステムとして組み込まれている必要があります。

メニューから[共有]-[Unix共有(NFS)]を選択してみて下さい。
FreeNASの共有 1

今は何もないですね。
右上の追加を押します。
FreeNASの共有 2

この画面になります。
/mntはデフォルトで出てくるところを見ると、/mntとサブディレクトリを NFSに供せるようです。
FreeNASの共有 3
ただ /mnt は システム用である 1台目のディスク(da0)にありますので、ここを共有させるべきではありません。

なので 2台目以降のディスクを /mnt 配下にマウントして、そこを提供するようにするのが良い方法のようです。

そこで次は、メニューから[ストレージ]-[プール]を選択します。
FreeNASのストレージ 1

画面右上に出てくる追加を押します。
FreeNASのストレージ 2

[新しいプールの作成]を選択し、プールの作成を押します。
FreeNASのストレージ 3

[名前]に任意の名前(これが /mnt 下のディレクトリ名になります)を入れ、対象のディスク(da1)のチェックを入れると、このような画面になりますので、を押します。
FreeNASのストレージ 4

[da1]が[Data VDevs]の枠に移りますので、左下の作成を押します。
FreeNASのストレージ 5

[確認]にチェックし、プールの作成を押します。
FreeNASのストレージ 6

このようにプールが1つできました。
FreeNASのストレージ 7

※この後、ここで作ったプール(/mnt/NFStestディレクトリに相当)をそのまま共有させて、Ubuntu Serverでマウントしてみたのですが、マウントポイントのパーミッションが nobody:nobody の rwxr-xr-x になっており、書き込みができませんでした。
プールに対するアクセス制御の設定は変えられないようで、以下の通りプールの下にデータセットを作ることで細かく設定が可能になるようです。

上の絵で[NFStest]の行の右の方に点々のアイコンがありますので、それをクリックするとメニューが出ますから、[データセットを追加]を選択します。
([Edit Permissions]がグレーアウトされていて使えないことが分かります)
FreeNASのストレージ 8

[名前]に任意の名前(これが /mnt/NFStest 下のディレクトリ名になります)を入れ、保存を押します。
データセット名は「NFStestDataset」にしました。
FreeNASのストレージ 9

また1行増えました。
階層表示されているので分かりやすいです。
今度は[NFStestDataset]の行の右の点々アイコンをクリックします。
FreeNASのストレージ 10

出てきたメニューから[Edit Permissions]を選択します。
FreeNASのストレージ 11

本当はパーミッションをしっかり考えないといけませんが、とりあえずはグループとグループ外に対して書き込み権限を与えてしまいます。
赤枠のチェックを入れて、保存を押します。
FreeNASのストレージ 12


再びメニューの[共有]-[Unix共有(NFS)]を選択します。

右上の追加を押します。
FreeNASの共有 4

ツリーで /mnt を開いてみると、さっきと違って[NFStest]ディレクトリ・[NFStestDataset]ディレクトリができています。
これが作成したプールとデータセットです。
[NFStestDataset]ディレクトリを選択し、保存を押します。
FreeNASの共有 5

一覧に[/mnt/NFStest/NFStestDataset]ができました。
これが NFSクライアント(Ubuntu Server)でマウントする時の指定先になります。
FreeNASの共有 6


NFSのサーバープロセスを起動しましょう。

メニューから[サービス]を選択します。
FreeNASのサービス 1

NFSの行をこうします。(マウスでクリックすれば OK)
FreeNASのサービス 2

これでとりあえず FreeNAS側の設定はできています。


Ubuntu Serverでマウントしてみましょうか。

Ubuntu Serverはデフォルトインストールでは、NFSクライアントがありませんでしたので、nfs-commonパッケージをインストールします。

subro@UbuntuServer2204:~$ sudo apt install -y nfs-common
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了

〜〜〜 中略 〜〜〜

No VM guests are running outdated hypervisor (qemu) binaries on this host.

インストールできました。

マウントします。

subro@UbuntuServer2204:~$ sudo mount -t nfs FreeNAS:/mnt/NFStest/NFStestDataset /data

何も出ませんが、これで /data ディレクトリにマウントできています。

ファイルシステムではどうなってるでしょうか。

subro@UbuntuServer2204:~$ df
Filesystem                          1K-blocks     Used Available Use% Mounted on
tmpfs                                  810580     1544    809036   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv    28719140 12427876  14807080  46% /
tmpfs                                 4052900        0   4052900   0% /dev/shm
tmpfs                                    5120        0      5120   0% /run/lock
/dev/sda2                             1992552   251932   1619380  14% /boot
tmpfs                                  810580        4    810576   1% /run/user/1000
FreeNAS:/mnt/NFStest/NFStestDataset   7610496      128   7610368   1% /data

マウントされていますね。

オーナーは nobody、グループは nogroup にマッピングされています。
パーミッションはデータセットでの設定通りになっています。

subro@UbuntuServer2204:~$ ls -ld /data
drwxrwxrwx 2 nobody nogroup 2 11月 23 06:55 /data

書き込みテストをします。

subro@UbuntuServer2204:~$ touch /data/aaa

subro@UbuntuServer2204:~$ ls -l /data/aaa
-rw-rw-r-- 1 nobody nogroup 0 11月 23 07:04 /data/aaa

上手くいきました。


何のことはないNFSマウントですが、FreeNASの設定では意外とハマりました。
ドキュメントは以下にあるんですが、余り詳しくなく…。
13.3. Unix (NFS) Shares

ただ一度分かってしまえば、仮想OSとして FreeNASを持っておけば、いつでも NFSサーバーを立ち上げられるのは便利です。
皆さんも活用してみてはいかがでしょうか。