NFS(Network File System) ローカルに接続されたストレージをネットワークを介して接続するファイルシステムのプロトコルになります。主にUnix系で利用されるプロトコルです。今回は Ubuntu Server 22.04 LTS にNFSサーバおよびNFSクライアントを設定方法を紹介します。
インストール環境
- Ubuntu 22.04 LTS
NFS サーバーの設定
NFSサーバーのインストール
下記コマンドを実行してインストールします。
1 |
sudo apt install nfs-kernel-server |
NFSサーバーをインストールするとデーモンが起動されて、自動起動(is-enabled)の設定がされている状態になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
test@ubuntu2202-1:~$ systemctl status nfs-server ● nfs-server.service - NFS server and services Loaded: loaded (/lib/systemd/system/nfs-server.service; enabled; vendor preset: enabled) Active: active (exited) since Sat 2022-07-23 21:08:45 JST; 45s ago Main PID: 2559 (code=exited, status=0/SUCCESS) CPU: 8ms Jul 23 21:08:44 ubuntu2202-1 systemd[1]: Starting NFS server and services... Jul 23 21:08:44 ubuntu2202-1 exportfs[2558]: exportfs: can't open /etc/exports for reading Jul 23 21:08:45 ubuntu2202-1 systemd[1]: Finished NFS server and services. test@ubuntu2202-1:~$ systemctl is-enabled nfs-server.service enabled test@ubuntu2202-1:~$ |
NFSサーバーの設定ファイル ( /etc/exports )
NFSサーバーの設定は /etc/exports に記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
test@ubuntu2202-1:~$ sudo vi /etc/exports test@ubuntu2202-1:~$ cat /etc/exports # /etc/exports: the access control list for filesystems which may be exported # to NFS clients. See exports(5). # # Example for NFSv2 and NFSv3: # /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check) # # Example for NFSv4: # /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check) # /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check) # /nfsdata 10.3.101.0/24(rw,no_root_squash,no_subtree_check) test@ubuntu2202-1:~$ |
上記の設定例は
- /nfsdata NFSサーバがクラインに公開するディレクトリ
- NFSサーバがクライアントに公開するアドレス(10.3.101.0/24)を指定。
- (rw,no_root_squash,no_subtree_check) NFSサーバ設定オプションの指定になります。 rwは クラインとからの読み書きの許可、root_squash NFSクラインからroot権限でのアクセスした場合、NFSサーバ側も同じくroot権限として取り扱う、no_subtree_check サブツリーのチェックを無効にする最近のnfsではこの設定値を推奨。 他のオプションは下記を参照
パラメータ | 意味 |
---|---|
ro | クライアントからの読み込みを許可、書き込みを不許可(デフォルト) |
rw | クライアントからの読み込み、書き込みを許可 |
sync | クライアントからの書き込みを同期(即時)動作する。(デフォルト) サーバークラッシュ時にデータを損失を防げるが転送効率が悪い |
async | クライアントからの書き込みを非同期動作する。 サーバからの書き込みをメモリ上にキャッシュするため転送効率が向上するが、クラッシュ時にデータ損失の可能性が上がる。 |
no_subtree_check | サブツリーのチェックを無効にする。パフォーマンス、セキュリティ的にも最近のNFSでは推奨値 |
root_squash | クライアント側からrootとして読み込み、書き込みの要求を匿名(anonymous UID/GID)として処理する。 |
no_root_squash | クライアント側からrootとして読み込み、書き込みの要求をrootとして処理する。 |
no_all_squash | クライアント側のroot以外のUID/GIDの読み込み、書き込みの要求を、そのままのUID/GIDで処理される。(デフォルト動作) サーバ、クライアントでUID/GIDが一致させる必要がある。 |
all_squash | クライアント側のroot以外のUID/GIDの読み込み、書き込みの要求を匿名(anonymous UID/GID)として処理する。 |
anonuid=UID | 指定のUIDを anonymous UID としてマッピングする。 |
anonuid=GID | 指定のGIDを anonymous GID としてマッピングする。 |
オプションの一部を紹介 詳細は man exports コマンドで確認できます。
公開ディレクトリ作成
今回は新規のディレクトリのため作成します。
1 |
sudo mkdir /nfsdata |
設定の反映
下記コマンドで設定が反映されます。
1 |
sudo exportfs -a |
NFSクライアントの設定
NFSクライアントのインストール
1 |
sudo apt install nfs-common |
マウントポイントの作成
NFSサーバーとの接続用のマウントポイントのディレクトリを作成します。
1 |
sudo mkdir /mnt/nfsdata |
一時的なマウント(接続)およびアンマウント(接続解除)
1 |
sudo mount -t nfs 10.3.101.1:/nfsdata /mnt/nfsdata |
上記コマンドで NSFサーバー( 10.3.101.1 )の /nfsdata を /mnt/nfsdata にマウントすることになります。
※mountコマンドではは再起動後には自動的に接続されないので注意すること
接続の確認
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# /mnt/nfsdata がマウントされている箇所になります。 test@ubuntu2202-2:~$ df -h Filesystem Size Used Avail Use% Mounted on tmpfs 198M 1.2M 197M 1% /run /dev/mapper/ubuntu--vg-ubuntu--lv 28G 4.8G 22G 19% / tmpfs 989M 0 989M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock /dev/sda2 2.0G 126M 1.7G 7% /boot tmpfs 198M 4.0K 198M 1% /run/user/1000 10.3.101.1:/nfsdata 28G 4.8G 22G 19% /mnt/nfsdata test@ubuntu2202-2:~$ ls -l /mnt/nfsdata total 0 # NFSサーバで共有されたディレクトリに test.txt ファイルを作成 test@ubuntu2202-2:~$ sudo touch /mnt/nfsdata/test.txt test@ubuntu2202-2:~$ ls -l /mnt/nfsdata total 0 -rw-r--r-- 1 root root 0 Jul 23 21:46 test.txt test@ubuntu2202-2:~$ |
下記はサーバ側で該当のディレクトリを確認するとNFSサーバ側にクライアントで作成された test.txt ファイルを確認することができます。
1 2 3 4 |
test@ubuntu2202-1:~$ ls -lt /nfsdata total 0 -rw-r--r-- 1 root root 0 Jul 23 21:46 test.txt test@ubuntu2202-1:~$ |
再起動されたらNFSサーバとの接続も解除されますが、下記コマンドでアンマウント(接続解除)することができます。
1 |
sudo umount /mnt/nfsdata |
接続解除の確認
1 2 3 4 5 6 7 8 9 10 |
# ディレクトリ /mnt/nfsdata が表示から消えています。アンマウント(接続解除)されている。 test@ubuntu2202-2:~$ df -h Filesystem Size Used Avail Use% Mounted on tmpfs 198M 1.2M 197M 1% /run /dev/mapper/ubuntu--vg-ubuntu--lv 28G 4.8G 22G 19% / tmpfs 989M 0 989M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock /dev/sda2 2.0G 126M 1.7G 7% /boot tmpfs 198M 4.0K 198M 1% /run/user/1000 test@ubuntu2202-2:~$ |
恒久的(再起動後も接続)なマウント(接続)
再起動後も起動時にマウントするには /etc/fstab に追記することで設定できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
test@ubuntu2202-2:~$ sudo vi /etc/fstab # 今回は最終行に 10.3.101.1:/nfsdata /mnt/nfsdata nfs default 0 0 を追加 test@ubuntu2202-2:~$ cat /etc/fstab # /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # <file system> <mount point> <type> <options> <dump> <pass> # / was on /dev/ubuntu-vg/ubuntu-lv during curtin installation /dev/disk/by-id/dm-uuid-LVM-TXyuJYsg0zMtHvQr0dHbxDYHCQwOnyoy2VUy59z6LTUwJzvQvPU2dwzqbGUT96mK / ext4 defaults 0 1 # /boot was on /dev/sda2 during curtin installation /dev/disk/by-uuid/241655e5-f934-4cf2-8dcf-bf6429dd9e64 /boot ext4 defaults 0 1 /swap.img none swap sw 0 0 10.3.101.1:/nfsdata /mnt/nfsdata nfs default 0 0 test@ubuntu2202-2:~$ |
設定の反映
1 |
sudo mount -a |
マウントの確認および test1.txt ファイルの作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
test@ubuntu2202-2:~$ df -h Filesystem Size Used Avail Use% Mounted on tmpfs 198M 1.2M 197M 1% /run /dev/mapper/ubuntu--vg-ubuntu--lv 28G 4.8G 22G 19% / tmpfs 989M 0 989M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock /dev/sda2 2.0G 126M 1.7G 7% /boot tmpfs 198M 4.0K 198M 1% /run/user/1000 10.3.101.1:/nfsdata 28G 4.8G 22G 19% /mnt/nfsdata test@ubuntu2202-2:~$ ls -l /mnt/nfsdata total 0 -rw-r--r-- 1 root root 0 Jul 23 21:46 test.txt test@ubuntu2202-2:~$ sudo touch /mnt/nfsdata/test1.txt test@ubuntu2202-2:~$ ls -l /mnt/nfsdata total 0 -rw-r--r-- 1 root root 0 Jul 23 21:56 test1.txt -rw-r--r-- 1 root root 0 Jul 23 21:46 test.txt test@ubuntu2202-2:~$ |
下記はサーバ側で該当のディレクトリを確認するとNFSサーバ側にクライアントで作成された test1.txt ファイルを確認することができます。
1 2 3 4 5 |
test@ubuntu2202-1:~$ ls -lt /nfsdata total 0 -rw-r--r-- 1 root root 0 Jul 23 21:56 test1.txt -rw-r--r-- 1 root root 0 Jul 23 21:46 test.txt test@ubuntu2202-1:~$ |
参考サイト
Ubuntu 22.04 LTS Server 記事一覧
Ubuntu 22.04 LTS Server インストール
Ubuntu 22.04 LTS Server 環境変更
- Ubuntu 22.04 LTS Server タイムゾーン日本時間(JST)への変更手順
- Ubuntu 22.04 LTS Server システムのロケール 日本語(UTF-8)への変更手順
- Ubuntu 22.04 LTS Server ネットワークの設定 ( IPv4アドレス、DNS(resolve) 、デフォルトゲートウェイ、static route )
- Ubuntu 22.04 LTS Server ファイアウォール(ufw)の起動および設定手順