NFS エクスポートしてみた
前回、2 回に分けて Samba サーバーの環境構築について投稿しました。今日は、NFS サーバーを立ててみます。
/etc/exports
LPIC Lv.2 のあずき本によると、NFS サーバーで特定のディレクトリを公開することをエクスポートというそうです。エクスポートというと、輸出とか書き出し専用をイメージしますが、/etc/exports に記述するとのこと。
AWS で NFS サーバーというと、Amazon EFS が一般的かと思いますが、今日は Amazon EC2 に NFS サーバー機能をインストールして検証してみます。
事前準備
Amazon EC2 インスタンスを追加する
前回構築した Samba サーバーの横に NFS 用の EC2 インスタンスを追加します。
セキュリティグループ「sg_ec2-nfs」を追加してアタッチしました。VPC 内のsべてのプライベート IP に対して、SSH (22) と NFS (2049) のポートを開放しています。
それ以外は Samba サーバーと同様なので、不明な方がいらっしゃれば Samba の投稿 を参考にしてください。
インスタンスが起動したら、yum update をしておきました。
PS C:\Users\Administrator> ssh -i C:\Users\Administrator\Desktop\XXXXX.pem ec2-user@172.29.2.45
The authenticity of host '172.29.2.45 (172.29.2.45)' can't be established.
ECDSA key fingerprint is SHA256:Wwuy9YCyBYIzz7IN6r07eCEgX0dZonIloHN3lZQM5L0.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '172.29.2.45' (ECDSA) to the list of known hosts.
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-2/
2 package(s) needed for security, out of 6 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-172-29-2-45 ~]$
[ec2-user@ip-172-29-2-45 ~]$ sudo yum -y update
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
amzn2-core
(中略)
Installed:kernel.x86_64 0:5.10.112-108.499.amzn2
Updated:
curl.x86_64 0:7.79.1-2.amzn2.0.1. iproute.x86_64 0:5.10.0-2.amzn2.0.2
kernel-tools.x86_64 0:5.10.112-108.499.amzn2 libcurl.x86_64 0:7.79.1-2.amzn2.0.1
openldap.x86_64 0:2.4.44-23.amzn2.0.4
Complete!
[ec2-user@ip-172-29-2-45 ~]$
EBS ボリュームを追加する
こちらの記事を拝見してルートボリューム以外で提供すべきと感じたので、EBS ボリュームも追加しておきます。
EC2 コンソールから、左側のメニューペインにあるボリュームを開き、[ボリュームの作成] ボタンをクリックします。
EBS ボリュームはサイズを大きくするのは簡単ですが、小さくする場合は作り直しなので 10GiB でスモールスタートします。
Name タグを付けてボリュームを作成しました。
利用可能になったら、ボリュームを選択して [アクション] から [ボリュームのアタッチ] を選択します。
アタッチする際にインフォメーションが表示されている通り、ここでつけた名前が OS 上でそのまま認識されるわけでないです。
アタッチ前はこちら。
[ec2-user@ip-172-29-2-45 ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:0 0 8G 0 disk
├─nvme0n1p1 259:1 0 8G 0 part /
└─nvme0n1p128 259:2 0 1M 0 part
[ec2-user@ip-172-29-2-45 ~]$
アタッチ後は、10G の nvme1n1 が追加されました。
[ec2-user@ip-172-29-2-45 ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:0 0 8G 0 disk
├─nvme0n1p1 259:1 0 8G 0 part /
└─nvme0n1p128 259:2 0 1M 0 part
nvme1n1 259:3 0 10G 0 disk
[ec2-user@ip-172-29-2-45 ~]$
nvme1n1 を ext4 としてフォーマットします。
[ec2-user@ip-172-29-2-230 ~]$ sudo mkfs -t ext4 /dev/nvme1n1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2621440 blocks
131072 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2151677952
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
[ec2-user@ip-172-29-2-230 ~]$
その後、/share としてマウントしました。
[ec2-user@ip-172-29-2-45 ~]$ sudo vi /etc/fstab
/dev/nvme1n1 /share ext4 defaults,nofail 1 2
[ec2-user@ip-172-29-2-45 ~]$ sudo mkdir -p /share
[ec2-user@ip-172-29-2-45 ~]$ sudo mount /share
[ec2-user@ip-172-29-2-45 ~]$
[ec2-user@ip-172-29-2-45 ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme1n1 259:0 0 10G 0 disk /share
nvme0n1 259:1 0 8G 0 disk
├─nvme0n1p1 259:2 0 8G 0 part /
└─nvme0n1p128 259:3 0 1M 0 part
[ec2-user@ip-172-29-2-45 ~]$
正常に動作するか、reboot もしておきました。
[ec2-user@ip-172-29-2-45 ~]$ sudo reboot
Connection to 172.29.2.45 closed by remote host.
Connection to 172.29.2.45 closed.
PS C:\Users\Administrator>
PS C:\Users\Administrator> ssh -i C:\Users\Administrator\Desktop\XXXX.pem ec2-user@172.29.2.45
Last login: Sat Jun 4 08:03:50 2022 from ip-172-29-2-133.ap-northeast-1.compute.internal
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-2/
[ec2-user@ip-172-29-2-230 ~]$
[ec2-user@ip-172-29-2-45 ~]$ uptime
08:13:29 up 1 min, 1 user, load average: 0.26, 0.20, 0.08
[ec2-user@ip-172-29-2-45 ~]$
認識していました。
[ec2-user@ip-172-29-2-45 ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 462M 0 462M 0% /dev
tmpfs 471M 0 471M 0% /dev/shm
tmpfs 471M 412K 470M 1% /run
tmpfs 471M 0 471M 0% /sys/fs/cgroup
/dev/nvme0n1p1 8.0G 1.7G 6.4G 21% /
/dev/nvme1n1 9.8G 37M 9.2G 1% /export/nfs
tmpfs 95M 0 95M 0% /run/user/1000
[ec2-user@ip-172-29-2-45 ~]$
NFS の設定
それでは、本日のメインテーマである NFS の設定を確認していきます。
export ポイントの設定
共有ディレクトリを /etc/exports にて設定します。
まずは、あずき本 437 ページに記載されている設定を試してみました。/share ディレクトリ以下を、172.29.0.0/22 のホストすべてに対して読み書き可能にするとのこと。
※ 後述していますが、設定間違いしています。○ exports / × export
[ec2-user@ip-172-29-2-45 ~]$ sudo vi /etc/export
/share 172.29.0.0/255.255.64.0(rw,no_root_squash)
nfs サービスを起動してみました。
[ec2-user@ip-172-29-2-45 ~]$ sudo systemctl start nfs
クライアントから接続
nfs サーバー側は準備が整いました。次はクライアントから接続を試します。
Samba サーバーに SSH 接続して、マウントポイントを作成しました。
[ec2-user@ip-172-29-2-230 ~]$ sudo mkdir -p -m 775 /mnt/nfs
[ec2-user@ip-172-29-2-230 ~]$
次に、あずき本 442 ページを参考に fstab に以下を追記しました。
[ec2-user@ip-172-29-2-230 ~]$ sudo vi /etc/fstab
172.29.2.45:/share /mnt/nfs nfs4 rw 0 0
マウントを試しましたが、Access Denied エラーになりました。root マウントなら問題なさそうでしたが。。
[ec2-user@ip-172-29-2-230 ~]$ sudo mount /mnt/nfs
mount.nfs4: access denied by server while mounting 172.29.2.45:/share
[ec2-user@ip-172-29-2-230 ~]$
/etc/export で、all_squash に変更してみましたが、状況は変わりませんでした。
[ec2-user@ip-172-29-2-45 ~]$ systemctl status nfs
● nfs-server.service - NFS server and services
Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled)
Active: active (exited) since Sat 2022-06-04 09:16:33 UTC; 3min 55s ago
Process: 2674 ExecStopPost=/usr/sbin/exportfs -f (code=exited, status=0/SUCCESS)
Process: 2671 ExecStopPost=/usr/sbin/exportfs -au (code=exited, status=0/SUCCESS)
Process: 2669 ExecStop=/usr/sbin/rpc.nfsd 0 (code=exited, status=0/SUCCESS)
Process: 2695 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)
Process: 2690 ExecStartPre=/bin/sh -c /bin/kill -HUP `cat /run/gssproxy.pid` (code=exited, status=0/SUCCESS)
Process: 2688 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
Main PID: 2695 (code=exited, status=0/SUCCESS)
CGroup: /system.slice/nfs-server.service
Jun 04 09:16:32 ip-172-29-2-45.ap-northeast-1.compute.internal systemd[1]: Starting NFS server and services...
Jun 04 09:16:33 ip-172-29-2-45.ap-northeast-1.compute.internal systemd[1]: Started NFS server and services.
[ec2-user@ip-172-29-2-45 ~]$
[ec2-user@ip-172-29-2-45 ~]$ systemctl status nfslock
● rpc-statd.service - NFS status monitor for NFSv2/3 locking.
Loaded: loaded (/usr/lib/systemd/system/rpc-statd.service; static; vendor preset: disabled)
Active: active (running) since Sat 2022-06-04 09:04:19 UTC; 16min ago
Process: 2554 ExecStart=/usr/sbin/rpc.statd $STATDARGS (code=exited, status=0/SUCCESS)
Main PID: 2559 (rpc.statd)
CGroup: /system.slice/rpc-statd.service
└─2559 /usr/sbin/rpc.statd
Jun 04 09:04:19 ip-172-29-2-45.ap-northeast-1.compute.internal systemd[1]: Starting NFS status monitor for NFSv2/3 .....
Jun 04 09:04:19 ip-172-29-2-45.ap-northeast-1.compute.internal rpc.statd[2559]: Version 1.3.0 starting
Jun 04 09:04:19 ip-172-29-2-45.ap-northeast-1.compute.internal rpc.statd[2559]: Flags: TI-RPC
Jun 04 09:04:19 ip-172-29-2-45.ap-northeast-1.compute.internal rpc.statd[2559]: Initializing NSM state
Jun 04 09:04:19 ip-172-29-2-45.ap-northeast-1.compute.internal systemd[1]: Started NFS status monitor for NFSv2/3 l.....
Hint: Some lines were ellipsized, use -l to show in full.
[ec2-user@ip-172-29-2-45 ~]$
exportfs コマンドで設定変更を反映
あずき本 439 ページに記載の showmount -e で、指定したホストでエクスポートしているディレクトリが表示されるとのことですが、何もありませんでした。
[ec2-user@ip-172-29-2-45 ~]$ showmount -e
Export list for ip-172-29-2-45.ap-northeast-1.compute.internal:
[ec2-user@ip-172-29-2-45 ~]$
もう一度上から手順を見返していくと、/etc/exports ではなく、/etc/export に設定をしていることに気づきました。
[ec2-user@ip-172-29-2-45 ~]$ sudo vi /etc/exports
/share 172.29.0.0/255.255.64.0(rw,no_root_squash)
exportfs コマンドで再読み込みできるとのこと。
[ec2-user@ip-172-29-2-45 ~]$ sudo exportfs -ar
[ec2-user@ip-172-29-2-45 ~]$
共有ディレクトリが増えました!
[ec2-user@ip-172-29-2-45 ~]$ showmount -e
Export list for ip-172-29-2-45.ap-northeast-1.compute.internal:
/share 172.29.0.0/255.255.64.0
[ec2-user@ip-172-29-2-45 ~]$
マウントできました!!
[ec2-user@ip-172-29-2-230 ~]$ sudo mount /mnt/nfs
mount.nfs4: access denied by server while mounting 172.29.2.45:/share
[ec2-user@ip-172-29-2-230 ~]$ sudo mount /mnt/nfs
[ec2-user@ip-172-29-2-230 ~]$ ls -l /mnt/nfs/
total 16
drwx------ 2 root root 16384 Jun 4 08:10 lost+found
[ec2-user@ip-172-29-2-230 ~]$
まとめ
今回は、記述ミスから切り分けも経験することができ、いい感じで学習が進みました。
以下まとめて締めたいと思います。
NFS サーバー側の設定ポイント
/etc/exports に設定を記述する。
出力設定は showmount -e コマンドで確認する。
設定変更は exportfs -ar コマンドを使う。
NFS クライアント側の設定ポイント
マウントポイントを作成してマウントする。
この記事が気に入ったらサポートをしてみませんか?