ためしに、VMware Photon OS 2.0 で NFS 環境を構築してみようと思います。
今回は、NFS Server / NFS Clent の両方を Photon OS にしてみます。
NFS Server
- ホスト名は ph20-nfs-sv-01
- IP アドレス/サブネットマスクは 192.168.12.240/24
NFS Client
- ホスト名は ph20-nfs-client-01
- IP アドレス/サブネットマスクは 192.168.12.241/24
OS の準備。
Photon OS 2.0 は、OVA 版(photon-custom-hw13-2.0-304b817.ova)をデプロイしてあります。
NFS Server / NFS Client はどちらも、ホスト名、ネットワークの設定をすませて、
RPM をこの時点の最新のものにしてあります。
root@photon-machine [ ~ ]# hostnamectl set-hostname ph20-nfs-sv-01
root@photon-machine [ ~ ]# tdnf update -y
root@photon-machine [ ~ ]# reboot
NFS Server の構築。
今回は、NFS で共有するために VM に仮想ディスク 2(/dev/sdb)を追加しています。
仮想ディスク 2 は VM に追加ずみです。
(NFS で共有するディレクトリは、仮想ディスクをわけずにディレクトリを指定してもよいです)
NFS 共有のためのディスク準備。
ディスク(/dev/sdb)をフォーマットします。
sdb が認識されています。
root@ph20-nfs-sv-01 [ ~ ]# lsblk -l /dev/sd?
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 16G 0 disk
sda1 8:1 0 3M 0 part
sda2 8:2 0 16G 0 part /
sdb 8:16 0 40G 0 disk
パーティションを作成します。これで /dev/sdb1 が作成されます。
root@ph20-nfs-sv-01 [ ~ ]# echo '2048,,L' | sfdisk -uS /dev/sdb
ext4 ファイルシステムでフォーマットします。
root@ph20-nfs-sv-01 [ ~ ]# mkfs -t ext4 /dev/sdb1
今回は、/opt/share ディレクトリを作成してマウントします。
root@ph20-nfs-sv-01 [ ~ ]# mkdir -p /opt/share
root@ph20-nfs-sv-01 [ ~ ]# chmod -R 755 /opt
root@ph20-nfs-sv-01 [ ~ ]# echo '/dev/sdb1 /opt/share ext4 defaults 0 0' >> /etc/fstab
root@ph20-nfs-sv-01 [ ~ ]# cat /etc/fstab
UUID=c1e929b0-5a75-4783-b99f-f79b4007da4e / ext4 defaults 1 1
/dev/sdb1 /opt/share ext4 defaults 0 0
root@ph20-nfs-sv-01 [ ~ ]# mount -a
root@ph20-nfs-sv-01 [ ~ ]# df -h /opt/share
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 40G 49M 38G 1% /opt/share
lsblk コマンドでも、/dev/sdb1 がマウントされたことが確認できます。
root@ph20-nfs-sv-01 [ ~ ]# lsblk -l /dev/sd?
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 16G 0 disk
sda1 8:1 0 3M 0 part
sda2 8:2 0 16G 0 part /
sdb 8:16 0 40G 0 disk
sdb1 8:17 0 40G 0 part /opt/share
NFS Server のセットアップ。
nfs-utils をインストールします。
root@ph20-nfs-sv-01 [ ~ ]# tdnf install -y nfs-utils
NFS 関連のサービスを有効化 / 起動します。
rpcbind
root@ph20-nfs-sv-01 [ ~ ]# systemctl enable rpcbind
Created symlink /etc/systemd/system/multi-user.target.wants/rpcbind.service → /lib/systemd/system/rpcbind.service.
Created symlink /etc/systemd/system/sockets.target.wants/rpcbind.socket → /lib/systemd/system/rpcbind.socket.
root@ph20-nfs-sv-01 [ ~ ]# systemctl start rpcbind
root@ph20-nfs-sv-01 [ ~ ]# systemctl is-active rpcbind
active
nfs-server
root@ph20-nfs-sv-01 [ ~ ]# systemctl enable nfs-server
Created symlink /etc/systemd/system/multi-user.target.wants/nfs-server.service → /lib/systemd/system/nfs-server.service.
root@ph20-nfs-sv-01 [ ~ ]# systemctl start nfs-server
root@ph20-nfs-sv-01 [ ~ ]# systemctl is-active nfs-server
active
NFS で共有するディレクトリをエクスポートします。
今回は、マウントするアドレスを制限していない(「*」を指定している)ため
exportfs では /opt/share は「<world>」となっています。
ちなみに no_subtree_check は、exportfs 実行時のメッセージ抑止のためにデフォルト値をそのまま記載しています。
root@ph20-nfs-sv-01 [ ~ ]# echo '/opt/share *(rw,no_root_squash,no_subtree_check)' >> /etc/exports
root@ph20-nfs-sv-01 [ ~ ]# cat /etc/exports
/opt/share *(rw,no_root_squash,no_subtree_check)
root@ph20-nfs-sv-01 [ ~ ]# exportfs -r
root@ph20-nfs-sv-01 [ ~ ]# exportfs
/opt/share <world>
iptables の設定。
2049 番ポートあての通信を許可しておきます。
今回の NFS Server / NFS Client は、どちらも 192.168.12.0/24 のネットワーク セグメントにあります。
※環境によっては、systemctl disable iptables でもよいかもしれません。
※今回は、NFS v4 を利用しています。(Photon OS 2.0 のデフォルト)
root@ph20-nfs-sv-01 [ ~ ]# iptables -A INPUT -s 192.168.12.0/24 -p tcp --dport 2049 -j ACCEPT
root@ph20-nfs-sv-01 [ ~ ]# iptables -A INPUT -s 192.168.12.0/24 -p udp --dport 2049 -j ACCEPT
root@ph20-nfs-sv-01 [ ~ ]# iptables-save > /etc/systemd/scripts/ip4save
NFS Client でのマウント。
Client 側でも、nfs-utils をインストールします。
root@ph20-nfs-client-01 [ ~ ]# tdnf install -y nfs-utils
/opt/share ディレクトリ を作成して、NFS をマウントします。
root@ph20-nfs-client-01 [ ~ ]# mkdir -p /opt/share
root@ph20-nfs-client-01 [ ~ ]# chmod -R 755 /opt
root@ph20-nfs-client-01 [ ~ ]# echo '192.168.12.240:/opt/share /opt/share nfs _netdev 0 0' >> /etc/fstab
root@ph20-nfs-client-01 [ ~ ]# mount -a
root@ph20-nfs-client-01 [ ~ ]# df -h /opt/share
Filesystem Size Used Avail Use% Mounted on
192.168.12.240:/opt/share 40G 48M 38G 1% /opt/share
Photon OS 2.0 では、デフォルトは NFS v4 になります。
root@ph20-nfs-client-01 [ ~ ]# nfsstat -m
/opt/share from 192.168.12.240:/opt/share
Flags: rw,relatime,vers=4.2,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.12.241,local_lock=none,addr=192.168.12.240
root@ph20-nfs-client-01 [ ~ ]# nfsstat -l
nfs v4 client total: 300
------------- ------------- --------
nfs v4 client write: 3
nfs v4 client open: 9
nfs v4 client open_noat: 4
nfs v4 client close: 4
nfs v4 client setattr: 10
nfs v4 client fsinfo: 20
nfs v4 client access: 24
nfs v4 client getattr: 81
nfs v4 client lookup: 24
nfs v4 client lookup_root: 5
nfs v4 client create: 2
nfs v4 client pathconf: 15
nfs v4 client statfs: 5
nfs v4 client readdir: 8
nfs v4 client server_caps: 35
nfs v4 client delegreturn: 1
nfs v4 client exchange_id: 5
nfs v4 client create_session: 5
nfs v4 client destroy_session: 4
nfs v4 client sequence: 22
nfs v4 client reclaim_comp: 5
nfs v4 client secinfo_no: 5
nfs v4 client destroy_clientid: 4
ちなみに photon の GitHub にも、少しだけ NFS についての説明があります。
photon/nfs-utils.md at master · vmware/photon · GitHub
以上、Photon OS 2.0 の NFS の様子でした。