VMware Photon OS 4.0 で NFS 環境を構築してみようと思います。今回は、NFS サーバ / NFS クライアントの両方を Photon OS にしてみます。
今回の内容です。
今回の環境
今回は、NFS サーバ / クライアントを別のマシンとして用意します。
NFS サーバ
- ホスト名: lab-nfs-01
- IP アドレス/サブネットマスク: 192.168.30.67/24
NFS クライアント
- ホスト名: lab-nfs-02
- IP アドレス/サブネットマスク: 192.168.30.68/24
Photon OS 4.0 は、下記の OVA ファイルを利用しています。
- photon-ova_uefi-4.0-c001795b80.ova
- https://packages.vmware.com/photon/4.0/Rev2/ova/photon-ova_uefi-4.0-c001795b80.ova
1. OS の準備
Photon OS は、OVA ファイルのデプロイ、パワーオン、初回 root / changeme ログインでのパスワード変更を済ませてあります。ここでは、NFS サーバ用の lab-nfs-01 を設定していますが、NFS クライアント用の lab-nfs-02 も同様に設定します。
ホスト名を設定しておきます。
root@photon-machine [ ~ ]# hostnamectl set-hostname lab-nfs-01
ネットワーク設定をしておきます。
root@photon-machine [ ~ ]# mv /etc/systemd/network/99-dhcp-en.network /etc/systemd/network/10-static.network root@photon-machine [ ~ ]# vi /etc/systemd/network/10-static.network root@photon-machine [ ~ ]# cat /etc/systemd/network/10-static.network [Match] Name=e* [Network] DHCP=no IPv6AcceptRA=no Address=192.168.30.67/24 Gateway=192.168.30.1 DNS=192.168.30.10 Domains=vcd.go-lab.jp
ネットワーク設定の反映には、systemd-networkd サービスの再起動が必要です。
root@photon-machine [ ~ ]# systemctl restart systemd-networkd
「tdnf update」でRPM の最新化して、OS を再起動しておきます。
root@photon-machine [ ~ ]# tdnf update -y root@photon-machine [ ~ ]# reboot
今回の Photon OS のバージョンです。
root@lab-nfs-01 [ ~ ]# cat /etc/photon-release VMware Photon OS 4.0 PHOTON_BUILD_NUMBER=2f5aad892
2. NFS サーバの構築
NFS Share にはディレクトリを指定できますが、今回は専用のディスクを割り当てます。NFS 領域として、lab-nfs-01 に 50 GB の仮想ディスクを追加してあります。
2-1. NFS Share のためのディスク追加
追加した仮想ディスクを、ゲスト OS で利用できるようにします。仮想ディスク 2 は、Photon OS では /dev/sdb として認識されます。
root@lab-nfs-01 [ ~ ]# lsblk -i /dev/sd? NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 16G 0 disk |-sda1 8:1 0 4M 0 part |-sda2 8:2 0 16G 0 part / `-sda3 8:3 0 10M 0 part /boot/efi sdb 8:16 0 50G 0 disk
sfdisk コマンドで、パーティションを作成します。これで、/dev/sdb から /dev/sdb1 が作成されます。
root@lab-nfs-01 [ ~ ]# echo '2048,,L' | sfdisk -uS /dev/sdb
/dev/sdb1 を、ext4 ファイルシステムでフォーマットします。
root@lab-nfs-01 [ ~ ]# mkfs -t ext4 /dev/sdb1
/etc/fstab に、/nfs ディレクトリに /dev/sdb1 をマウントする設定を追記します。
root@lab-nfs-01 [ ~ ]# echo '/dev/sdb1 /nfs ext4 defaults 0 0' >> /etc/fstab root@lab-nfs-01 [ ~ ]# cat /etc/fstab | grep sdb1 /dev/sdb1 /nfs ext4 defaults 0 0
/nfs ディレクトリを作成して /dev/sdb1 をマウントしておきます。
root@lab-nfs-01 [ ~ ]# mkdir /nfs root@lab-nfs-01 [ ~ ]# df -h /nfs Filesystem Size Used Avail Use% Mounted on /dev/root 16G 613M 15G 5% / root@lab-nfs-01 [ ~ ]# mount -a root@lab-nfs-01 [ ~ ]# df -h /nfs Filesystem Size Used Avail Use% Mounted on /dev/sdb1 49G 24K 47G 1% /nfs
lsblk コマンドでも、/dev/sdb1 がマウントされたことが確認できます。
root@lab-nfs-01 [ ~ ]# lsblk -i /dev/sd? NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 16G 0 disk |-sda1 8:1 0 4M 0 part |-sda2 8:2 0 16G 0 part / `-sda3 8:3 0 10M 0 part /boot/efi sdb 8:16 0 50G 0 disk `-sdb1 8:17 0 50G 0 part /nfs
2-2. NFS サーバのセットアップ
nfs-utils をインストールします。
root@lab-nfs-01 [ ~ ]# tdnf install -y nfs-utils
nfs-server サービスを有効化 / 起動します。
root@lab-nfs-01 [ ~ ]# systemctl enable nfs-server root@lab-nfs-01 [ ~ ]# systemctl start nfs-server
NFS Share として共有するディレクトリの設定を /etc/exports に追記して、エクスポートします。今回の /etc/exports ファイルでは、/nfs でマウントするアドレスを制限しない「*」を指定しているため、exportfs では 「<world>」と表示されています。
また、no_subtree_check はデフォルトの挙動ですが、exportfs 実行時のメッセージ抑止のためにあえて設定しています。
root@lab-nfs-01 [ ~ ]# echo '/nfs *(rw,sync,no_subtree_check,no_root_squash)' >> /etc/exports root@lab-nfs-01 [ ~ ]# cat /etc/exports /nfs *(rw,sync,no_subtree_check,no_root_squash)
/etc/exports ファイルの設定で、NFS Share をエクスポートします。
root@lab-nfs-01 [ ~ ]# exportfs -r root@lab-nfs-01 [ ~ ]# exportfs /nfs
2-3. iptables の設定
2049 番ポートあての通信を許可しておきます。
- 今回の NFS サーバ / NFS クライアントは、どちらも 192.168.30.0/24 のネットワーク セグメントにあります。
- ラボ環境では、systemctl stop iptables と systemctl disable iptables で無効化してもよいかなと思います。
- 今回は、NFS v4 を利用しています。(Photon OS 4.0 のデフォルト)
root@lab-nfs-01 [ ~ ]# iptables -A INPUT -s 192.168.30.0/24 -p tcp --dport 2049 -j ACCEPT root@lab-nfs-01 [ ~ ]# iptables -A INPUT -s 192.168.30.0/24 -p udp --dport 2049 -j ACCEPT root@lab-nfs-01 [ ~ ]# iptables-save > /etc/systemd/scripts/ip4save
3. NFS クライアントからのマウント
NFS クライアント側でも、nfs-utils をインストールします。
root@lab-nfs-02 [ ~ ]# tdnf install -y nfs-utils
NFS サーバの Share を確認しておきます。
root@lab-nfs-02 [ ~ ]# showmount -e 192.168.30.67 Export list for 192.168.30.67: /nfs *
/nfs-share ディレクトリ を作成して、NFS をマウントします。
root@lab-nfs-02 [ ~ ]# mkdir /nfs-share root@lab-nfs-02 [ ~ ]# echo '192.168.30.67:/nfs /nfs-share nfs _netdev 0 0' >> /etc/fstab
マウントします。
root@lab-nfs-02 [ ~ ]# mount -a root@lab-nfs-02 [ ~ ]# df -h /nfs-share Filesystem Size Used Avail Use% Mounted on 192.168.30.67:/nfs 49G 0 47G 0% /nfs-share
マウントした NFS Share に、ファイルが書き込めることを確認しておきます。
root@lab-nfs-02 [ ~ ]# echo test > /nfs-share/test.txt root@lab-nfs-02 [ ~ ]# cat /nfs-share/test.txt test
Photon OS 4.0 では、デフォルトは NFS v4 になります。
root@lab-nfs-02 [ ~ ]# nfsstat -m /nfs-share from 192.168.30.67:/nfs Flags: rw,relatime,vers=4.2,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.30.68,local_lock=none,addr=192.168.30.67 root@lab-nfs-02 [ ~ ]# root@lab-nfs-02 [ ~ ]# nfsstat -l nfs v4 client total: 33 ------------- ------------- -------- nfs v4 client null: 1 nfs v4 client write: 1 nfs v4 client open: 1 nfs v4 client open_noat: 1 nfs v4 client close: 2 nfs v4 client fsinfo: 3 nfs v4 client access: 2 nfs v4 client getattr: 4 nfs v4 client lookup: 2 nfs v4 client lookup_root: 1 nfs v4 client pathconf: 2 nfs v4 client statfs: 1 nfs v4 client server_caps: 5 nfs v4 client exchange_id: 2 nfs v4 client create_session: 1 nfs v4 client sequence: 2 nfs v4 client reclaim_comp: 1 nfs v4 client secinfo_no: 1
ESXi からのマウント
ESXi で NFS データストアとしてマウントする場合には、NFS v3 でもマウントできます。今回は、ESXi 7.0 のホストからマウントしてあります。
NFS データストアとして、NFS v3 でマウントしてあります。
NFS サーバ側でも、ESXi から NFS v3 で接続されていることがわかります。
root@lab-nfs-01 [ ~ ]# showmount -a All mount points on lab-nfs-01: 192.168.31.201:/nfs 192.168.31.202:/nfs root@lab-nfs-01 [ ~ ]# nfsstat -l nfs v3 server total: 506 ------------- ------------- -------- nfs v3 server getattr: 408 nfs v3 server lookup: 40 nfs v3 server access: 29 nfs v3 server fsstat: 27 nfs v3 server fsinfo: 2 nfs v4 server total: 236 ------------- ------------- -------- nfs v4 server null: 2 nfs v4 server compound: 234 nfs v4 servop total: 379 ------------- ------------- -------- nfs v4 servop access: 7 nfs v4 servop close: 3 nfs v4 servop delegreturn: 1 nfs v4 servop getattr: 54 nfs v4 servop getfh: 7 nfs v4 servop lookup: 4 nfs v4 servop open: 3 nfs v4 servop putfh: 55 nfs v4 servop putrootfh: 4 nfs v4 servop read: 1 nfs v4 servop readdir: 1 nfs v4 servop write: 1 nfs v4 servop exchange_id: 4 nfs v4 servop create_ses: 2 nfs v4 servop destroy_ses: 1 nfs v4 servop secinfononam: 2 nfs v4 servop sequence: 226 nfs v4 servop destroy_clid: 1 nfs v4 servop reclaim_comp: 2
ちなみに Photon OS のドキュメントにも、少しだけ NFS についての説明があります。
以上、Photon OS 4.0 で NFS 環境を構築してみる話でした。