LinuxでNFSサーバーを構築する方法

LinuxでNFSサーバーを構築する方法

Linux環境でファイルを共有する方法としては、NFS(Network File System)が一般的です。

そこでここでは、RedHat互換のLinux(CentOS 7)でNFSサーバーを構築する方法や、NFSクライアントからNFSサーバーに接続する方法を紹介します。

Windows 10からLinux上のNFSサーバに接続する方法
ここでは、Windows 10でNFSクライアント機能を有効化して、Linux上のNFSサーバに接続する方法を紹介します。

この記事は、以下の環境での動作結果を基にしています。他のディストリビューションやバージョンでは、動作結果が異なる場合があることをご了承ください。

ソフトウェアバージョン
CentOS Linux7.9.2009

NFSサーバーを構築する

必要なパッケージのインストール

まず、NFSサーバーに必要なパッケージをインストールします。

# yum install nfs-utils

公開ディレクトリの作成

つぎに、公開するディレクトリを作成します。(既存のディレクトリを公開する場合は、作成の必要はありません。)

# mkdir -p /share/nfs

つぎに、公開するディレクトリにテスト用のテキストファイルを作成しておきます。(公開後に、クライアントからアクセスできるかなどをテストするときに利用します。)

#echo hello > /share/nfs/test.txt

設定ファイルの作成

つぎに、どのような権限でディレクトリを公開するかなどを、設定ファイルに記述します。

# vi /etc/exports

設定ファイルの書式は、次のとおりです。

[公開するディレクトリ] [アクセスを許可するホスト名またはネットワークアドレス範囲](オプション設定)

ここでは例として、以下の内容を設定ファイルに記述します。

  1. /share/nfs:公開するディレクトリ
  2. 172.29.112.0/20:アクセスできるネットワーク範囲
  3. rw:読み書きが可能
  4. no_root_squash:rootでのアクセス時にroot権限で実行する
  5. async:非同期で書き込む(性能向上が見込める)
# vi /etc/exports

/share/nfs 172.29.112.0/20(rw,no_root_squash,async)

指定できる主だったオプションは、次のとおりです。

オプション説明
ro読み取り専用(既定値)
rw読み書き可能
no_root_squashrootでのアクセス時にroot権限で実行する
root_squashrootでのアクセス時に匿名アカウント権限で実行する(既定値)
all_squashすべてのアクセスを匿名アカウント権限で実行する
sync同期書き込み(既定値)
async非同期書き込み

ファイアウォールの設定

つぎに、ネットワーク上のNFSクライアントからNFSサーバーに接続できるようファイアウォールに許可設定を追加します。

クライアントがNFSv4を利用する場合:

# firewall-cmd --add-service=nfs --permanent
success

クライアントがNFSv3を利用する場合:

# firewall-cmd --add-service={nfs3,mountd,rpc-bind} --permanent
success

許可設定を追加したら、ファイアウォールサービスをリロードして、設定を適用します。

# firewall-cmd --reload
success

設定を適用したら、正しく許可設定が追加されているかを確認します。

# firewall-cmd --list-all

NFSサービスの起動設定

つぎに、NFS関連サービスの起動/自動起動を設定します。

# systemctl start nfs rpcbind
# systemctl enable nfs rpcbind

つぎに、サービスが正常に起動していることを確認します。

# systemctl status nfs rpcbind

公開状況の確認

最後に、設定したディレクトリが公開されているかを確認します。

# exportfs
/share/nfs 172.29.112.0/20

NFSサーバーへ接続する

ここでは例として、他のCentOS 7マシン(NFSクライアント)から構築したNFSサーバーに接続できるか確認します。

まず、NFSクライアントマシンに、NFSクライアントとして必要なパッケージをインストールします。

# yum install nfs-utils

パッケージをインストールしたら、mountコマンドでNFSサーバーに接続します。

下のコマンドでは、NFSサーバーの公開ディレクトリをローカルの「/share/nfs-client」ディレクトリにマウントしています。

# mkdir -p /share/nfs-client
# mount -v -t nfs 172.29.115.251:/share/nfs /share/nfs-client

コマンド実行後、次のように出力されていれば、正常にマウントできています。

mount.nfs: timeout set for Fri Jul 15 00:58:55 2022
mount.nfs: trying text-based options 'vers=4.1,addr=172.29.115.251,clientaddr=172.29.117.83'

正常にマウントできたら、マウントしたディレクトリに対して許可された操作が可能かテストしておきましょう。

NFSサーバーから切断するときは、以下のようにコマンドを実行します。

# umount /share/nfs-client
Memo

NFSクライアントからマウントしたディレクトリにファイルなどを作成した場合、そのファイルの所有者にはNFSクライアントのユーザー(UID)が設定されるため、NFSサーバーとNFSクライアントの間では、ユーザー名とUIDは揃えておくとよいでしょう。

あとがき

NFSサーバーの設定ファイル「/etc/exports」や、NFSクライアントで使用するmountコマンドには、ここで紹介した以外にも指定可能なオプションがたくさんあり、環境に合わせてオプション設定を調整することで、パフォーマンスを最適化できます。

詳しくはmanコマンドで確認してみてください。

# man exports
# man mount