Linux環境でファイルを共有する方法としては、NFS(Network File System)が一般的です。
そこでここでは、RedHat互換のLinux(CentOS 7)でNFSサーバーを構築する方法や、NFSクライアントからNFSサーバーに接続する方法を紹介します。
目次
NFSサーバーを構築する
必要なパッケージのインストール
まず、NFSサーバーに必要なパッケージをインストールします。
# yum install nfs-utils
公開ディレクトリの作成
つぎに、公開するディレクトリを作成します。(既存のディレクトリを公開する場合は、作成の必要はありません。)
# mkdir -p /share/nfs
つぎに、公開するディレクトリにテスト用のテキストファイルを作成しておきます。(公開後に、クライアントからアクセスできるかなどをテストするときに利用します。)
#echo hello > /share/nfs/test.txt
設定ファイルの作成
つぎに、どのような権限でディレクトリを公開するかなどを、設定ファイルに記述します。
# vi /etc/exports
設定ファイルの書式は、次のとおりです。
[公開するディレクトリ] [アクセスを許可するホスト名またはネットワークアドレス範囲](オプション設定)
ここでは例として、以下の内容を設定ファイルに記述します。
- /share/nfs:公開するディレクトリ
- 172.29.112.0/20:アクセスできるネットワーク範囲
- rw:読み書きが可能
- no_root_squash:rootでのアクセス時にroot権限で実行する
- async:非同期で書き込む(性能向上が見込める)
# vi /etc/exports
/share/nfs 172.29.112.0/20(rw,no_root_squash,async)
指定できる主だったオプションは、次のとおりです。
オプション | 説明 |
---|---|
ro | 読み取り専用(既定値) |
rw | 読み書き可能 |
no_root_squash | rootでのアクセス時にroot権限で実行する |
root_squash | rootでのアクセス時に匿名アカウント権限で実行する(既定値) |
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
NFSクライアントからマウントしたディレクトリにファイルなどを作成した場合、そのファイルの所有者にはNFSクライアントのユーザー(UID)が設定されるため、NFSサーバーとNFSクライアントの間では、ユーザー名とUIDは揃えておくとよいでしょう。
あとがき
NFSサーバーの設定ファイル「/etc/exports」や、NFSクライアントで使用するmountコマンドには、ここで紹介した以外にも指定可能なオプションがたくさんあり、環境に合わせてオプション設定を調整することで、パフォーマンスを最適化できます。
詳しくはmanコマンドで確認してみてください。
# man exports
# man mount