背景:なぜローカルネットワークでNFSを使うのか?
3〜5台のLinuxサーバークラスターを管理していたり、古いUbuntu搭載PCを家族全員で使える共有ドライブにしたいと考えていませんか?ファイルの共有は非常に重要です。以前、私はSambaの設定にかなりの時間を費やしたことがありますが、Linux間のみの環境であれば、NFS (Network File System)こそが「正解」だと言えます。
NFS is lightweight and its access speeds are very impressive. In fact, on a 1Gbps network, you can get stable copy speeds of around 112MB/s, close to the physical cable limit. More importantly, Linux permissions are preserved. I implemented NFS on a cluster project to sync source code and logs between multiple nodes. As a result, the system スムーズに動作し, there is no noticeable latency.
UbuntuへのNFS Kernel Serverのインストール
インストールファイルをわざわざ手動でダウンロードする必要はありません。Ubuntuなら、公式リポジトリに必要なものがすべて揃っています。数秒で完了します。まず、システムを最新の状態にアップデートしましょう。
sudo apt update
sudo apt upgrade -y
次に、nfs-kernel-server パッケージをインストールします。これが、Ubuntuマシンをデータ共有の「中央倉庫」にするためのコアコンポーネントです。
sudo apt install nfs-kernel-server -y
NFSサービスはインストール後すぐに自動起動します。しかし、すぐに接続しようとしないでください。まずは「倉庫」の準備と適切な権限設定が必要です。
詳細設定:ディレクトリ作成から権限設定まで
この部分は、最もエラーが発生しやすい難所です。設定を終えても、権限設定が不適切で Permission denied エラーに悩まされる人が多くいます。
1. 共有ディレクトリの作成
私の経験上、管理しやすいように /mnt 内にディレクトリを作成することをお勧めします。例えば、nfs_share という名前のディレクトリを作成します。
sudo mkdir -p /mnt/nfs_share
2. ディレクトリの権限設定
NFSはUIDとGIDに基づいて権限を管理します。最も手っ取り早くシンプルな方法は、このディレクトリをユーザー nobody とグループ nogroup に割り当てることです。これにより、マシン間でのユーザー識別子の不一致を気にすることなく、すべてのクライアントからデータを書き込めるようになります。
sudo chown nobody:nogroup /mnt/nfs_share
sudo chmod 777 /mnt/nfs_share
3. Exportsファイルの設定
どのディレクトリを共有するかを宣言するために、/etc/exports ファイルを開きます。nano を使うのが手軽です。
sudo nano /etc/exports
ファイルの最後に以下の行を追加してください。192.168.1.0/24 の部分は、ご自身のネットワークのIPレンジに合わせて変更するのを忘れないでください。
/mnt/nfs_share 192.168.1.0/24(rw,sync,no_subtree_check)
設定項目の意味を簡単に説明します(盲目的なコピー&ペーストは避けましょう):
- rw: クライアントにデータの読み書きを許可します。
- sync: データがハードディスクに安全に書き込まれた後にのみ、サーバーが確認応答を返します。少し遅くなりますが、突然の停電時のデータ損失を防げるため安全です。
- no_subtree_check: サブツリーのチェックをスキップすることで、アクセス速度を向上させます。
ファイルを保存します。最後に、サーバーに新しい設定を認識させるために以下のコマンドを実行します。
sudo exportfs -a
sudo systemctl restart nfs-kernel-server
4. ファイアウォール(UFW)の設定
サーバーでファイアウォールが有効な場合、クライアントがアクセスできるようにポートを開放する必要があります。
sudo ufw allow from 192.168.1.0/24 to any port nfs
sudo ufw status を実行して、NFSポートが ALLOW 状態になっていることを確認してください。
クライアント側からの接続と自動マウントの設定
クライアント側(共有ファイルを利用したいマシン)に移ります。NFSサーバーと通信するためのツールをインストールする必要があります。
sudo apt update
sudo apt install nfs-common -y
クライアントマシン上に、接続ポイントとなる空のディレクトリを作成します。
sudo mkdir -p /home/user/data_shared
すべてが正しく繋がっているか、手動で接続をテストしてみましょう。サーバーの正しいIPアドレスに置き換えてください。
sudo mount 192.168.1.10:/mnt/nfs_share /home/user/data_shared
接続できましたか?小さなテキストファイルを作成して、サーバー側に表示されるか確認してみてください。問題なければ、再起動のたびに自動でマウントされるように設定します。毎日手動でマウントコマンドを打つのを好む人はいないでしょう。
システムのパス設定ファイルである /etc/fstab を開きます:
sudo nano /etc/fstab
最後にこの行を追加します:
192.168.1.10:/mnt/nfs_share /home/user/data_shared nfs defaults,user,exec,_netdev 0 0
ちょっとした、しかし非常に重要なコツ:_netdev パラメータは極めて重要です。これはネットワークが準備できるまでマウントを待機させるようシステムに強制するもので、起動時のハングアップ(ブートループ)を防ぎます。
システムの確認と監視
設定が完了しました。成果を確認しましょう。サーバー側で現在実際に共有されているディレクトリの一覧を表示するには、次のコマンドを使用します。
sudo exportfs -v
パフォーマンスやアクティブな接続を監視するには、nfsstat コマンドを使用します。
nfsstat -s
コピー速度が遅い場合は、LANケーブルやスイッチを確認してください。私の経験では、1Gbpsネットワークで10-20MB/s程度しか出ない場合、ネットワークカードやハードディスクがボトルネックになっている可能性が高いです。
最後のTips:クライアント側で mount | grep nfs を実行すると、システムが使用している詳細なオプションを確認できます。このガイドが、独自の集中ストレージシステムを自信を持って構築する助けになれば幸いです。

