OCI_File Storage(NFS)サービスを使ってみた。とNFSの勉強をちょっと

準備

NFSマウント用のCompute Instance(リソース名はVM_NFS)を 作成
OSはOracle Linux 9

[opc@vm-nfs ~]$ df -h
Filesystem                  Size  Used Avail Use% Mounted on
devtmpfs                    4.0M     0  4.0M   0% /dev
tmpfs                       2.8G     0  2.8G   0% /dev/shm
tmpfs                       1.2G  9.1M  1.1G   1% /run
efivarfs                    256K   14K  243K   6% /sys/firmware/efi/efivars
/dev/mapper/ocivolume-root   30G  8.5G   21G  29% /
/dev/sda2                   2.0G  392M  1.6G  20% /boot
/dev/mapper/ocivolume-oled   15G  144M   15G   1% /var/oled
/dev/sda1                   100M  7.5M   93M   8% /boot/efi
tmpfs                       565M     0  565M   0% /run/user/989
tmpfs                       565M     0  565M   0% /run/user/1000
[opc@vm-nfs ~]$

File Storage作成

Storage > File Storage > File Systems
Create File System
image-365.png

File System for NFSを選ぶ
→Edit detailsから各種設定が展開できる
image-366.png

デフォルト
image-370.png

Export pathはテスト用のためデフォルト
※Use secure Export optionsはセキュリティ上チェックしたほうがいいらしいが、今回の目的では不要なのでチェックつけない。
image-369.png

Mount Targetは別で作成したものを使うこともできるらしい
今回はここで作る
SubnetはCompute Instanceを作ったPrivate subnetを指定した(サブネットまたぎでも使用することは可能)
image-368.png

設定がらみで気になった部分をメモった

https://docs.oracle.com/ja-jp/iaas/Content/File/Concepts/filestorageoverview.htm

  • ファイル・ストレージ・サービスでは、ネットワーク・ファイル・システム・バージョン3.0 (NFSv3)プロトコルをサポートしています。
  • デフォルトでは、各可用性ドメインでアカウントごとに2つのマウント・ターゲットを作成できます。
  • ファイル・ストレージ領域割当て:可変サイズのブロックで領域を割り当てます。
  • ファイル・システムを別の可用性ドメインまたはリージョンに移動することはできません。

https://docs.oracle.com/ja-jp/iaas/Content/File/Tasks/managingmounttargets.htm

  • 各マウント・ターゲットには3つのIPアドレスが必要です。
  • マウント・ターゲット・タイプ:Standard、High Performanceが選べるらしい

https://docs.oracle.com/ja-jp/iaas/Content/File/Tasks/exportoptions.htm

  • NFSエクスポート・オプション
    • ソース: 接続しているNFSクライアントのIPアドレスまたはCIDRブロック
    • ポート: デフォルトは任意ポート。特権ポート(1-1023を含む任意のポート)にするとrootのみmount出来る
    • アクセス:「読取り/書込み」がデフォルト
    • Squash: デフォルトはなし。ユーザーは再マップされません。

Createしたらすぐできた。
image-371.png

RejonalじゃないのでReplication推奨ってことらしい
image-372.png

MountTargetもできてた。デフォルトStandard。High Parformanceはもっと細かく20、40、80Gbpsって選べるらしい。
image-373.png

detail画面上でHostname付けられるらしい
image-374.png

hostnameを付けてみた
Domain Nameは勝手についた
image-375.png

Compute Instanceからmountして使用する

https://docs.oracle.com/ja-jp/iaas/Content/File/Tasks/mountingunixstyleos.htm
これにしたがってマウントする。Ubuntu用とか別にある。今回はOracle Linuxなのでこれ。
image-377.png

つながらなかった

[opc@vm-nfs ~]$ sudo yum install nfs-utils
Last metadata expiration check: 0:37:30 ago on Sun 07 Sep 2025 03:24:11 PM GMT.
Package nfs-utils-1:2.5.4-34.0.1.el9.aarch64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
[opc@vm-nfs ~]$ sudo mkdir -p /mnt/base/test1
[opc@vm-nfs ~]$ sudo mount -o nosuid,resvport,sec=sys nfs-srv.sub05090751551.nwblogsash.oraclevcn.com:/FileSystem-20250907-1521-08 /mnt/base/test1
^C
[opc@vm-nfs ~]$

DNSが原因ではないらしい

[opc@vm-nfs ~]$ host nfs-srv.sub05090751551.nwblogsash.oraclevcn.com
nfs-srv.sub05090751551.nwblogsash.oraclevcn.com has address 10.201.1.168
[opc@vm-nfs ~]$

NSG割り当て

はい、原因はNSGでした
https://docs.oracle.com/ja-jp/iaas/Content/File/Tasks/securitylistsfilestorage.htm

image-378.png

  1. NSG作成
    Networking > Virtual Cloud Networks > NW_Blogs_Ash > Security タブ

    Network Security Groups
    Create Network Security Group
    ↓作った
    image-379.png

  2. 作ったNSGをアタッチする

    Compute > Instances > (作ったCompute instance:名前 VM_NFS) > Networking タブ
    Network security groupsのところ Edit押して設定
    image-380.png

    MountTargetにもNSGを適用する必要があるみたい
    Storage> File Storage > Mount Taregts > (今回作ったMount Targetを選択)
    Network Security Groupsのところ Edit押して設定
    image-381.png

    今回1つのNSGに作っちゃったが上の2つがMountTargetに、下2つがNFS Client(Compute Instance)に必要なルールっぽい
    image-382.png

マウントできました

[opc@vm-nfs ~]$ sudo mount -o nosuid,resvport,sec=sys nfs-srv.sub05090751551.nwblogsash.oraclevcn.com:/FileSystem-20250907-1521-08 /mnt/base/test1
Created symlink /run/systemd/system/remote-fs.target.wants/rpc-statd.service → /usr/lib/systemd/system/rpc-statd.service.
[opc@vm-nfs ~]$ df -h
Filesystem                                                                    Size  Used Avail Use% Mounted on
devtmpfs                                                                      4.0M     0  4.0M   0% /dev
tmpfs                                                                         2.8G     0  2.8G   0% /dev/shm
tmpfs                                                                         1.2G  9.2M  1.1G   1% /run
efivarfs                                                                      256K   14K  243K   6% /sys/firmware/efi/efivars
/dev/mapper/ocivolume-root                                                     30G  9.9G   20G  34% /
/dev/sda2                                                                     2.0G  392M  1.6G  20% /boot
/dev/mapper/ocivolume-oled                                                     15G  237M   15G   2% /var/oled
/dev/sda1                                                                     100M  7.5M   93M   8% /boot/efi
tmpfs                                                                         565M     0  565M   0% /run/user/989
tmpfs                                                                         565M     0  565M   0% /run/user/1000
nfs-srv.sub05090751551.nwblogsash.oraclevcn.com:/FileSystem-20250907-1521-08  8.0E     0  8.0E   0% /mnt/base/test1
[opc@vm-nfs ~]$
[opc@vm-nfs ~]$

NFSの確認

今回の目的これ。いくつか挙動を確認したかった。
※ACLやSELinuxデフォルトからいじってない前提

作成したマウントポイント(/mnt/base/test1/)とそのパーミッションこれ

[opc@vm-nfs ~]$ ls -ldR /mnt/base/
drwxr-xr-x. 3 root root 19 Sep  7 16:02 /mnt/base/
[opc@vm-nfs ~]$ ls -ld /mnt/base/
drwxr-xr-x. 3 root root 19 Sep  7 16:02 /mnt/base/
[opc@vm-nfs ~]$ ls -ld /mnt/base/test1/
drwxr-xr-x. 2 root root 6 Sep  7 16:02 /mnt/base/test1/
[opc@vm-nfs ~]$

確認1:ローカルで作ったマウントポイントのパーミッションはNFSマウント後にNFSサーバ側のトップディレクトリのパーミッションで上書きされる
→OK、想定通り

[opc@vm-nfs ~]$ sudo chmod 777 /mnt/base/test1/
[opc@vm-nfs ~]$ ls -ld /mnt/base/test1/
drwxrwxrwx. 2 root root 6 Sep  7 16:02 /mnt/base/test1/
[opc@vm-nfs ~]$ sudo mount -o nosuid,resvport,sec=sys nfs-srv.sub05090751551.nwblogsash.oraclevcn.com:/FileSystem-20250907-1521-08 /mnt/base/test1
[opc@vm-nfs ~]$ ls -ld /mnt/base/test1/
drwxr-xr-x. 2 root root 0 Sep  7 15:45 /mnt/base/test1/
[opc@vm-nfs ~]$ sudo umount /mnt/base/test1
[opc@vm-nfs ~]$ ls -ld /mnt/base/test1/
drwxrwxrwx. 2 root root 6 Sep  7 16:02 /mnt/base/test1/
[opc@vm-nfs ~]$

確認2:NFSマウントしたディレクトリのトップディレクトリの権限をmount後に書き換えられる
→OK、想定通り

[opc@vm-nfs ~]$ ls -ld /mnt/base/test1/
drwxrwxrwx. 2 root root 6 Sep  7 16:02 /mnt/base/test1/
[opc@vm-nfs ~]$ sudo mount -o nosuid,resvport,sec=sys nfs-srv.sub05090751551.nwblogsash.oraclevcn.com:/FileSystem-20250907-1521-08 /mnt/base/test1
[opc@vm-nfs ~]$ ls -ld /mnt/base/test1/
drwxr-xr-x. 2 root root 0 Sep  7 15:45 /mnt/base/test1/
[opc@vm-nfs ~]$ sudo chmod 777 /mnt/base/test1/
[opc@vm-nfs ~]$ ls -ld /mnt/base/test1/
drwxrwxrwx. 2 root root 0 Sep  7 15:45 /mnt/base/test1/
[opc@vm-nfs ~]$ sudo umount /mnt/base/test1
[opc@vm-nfs ~]$ ls -ld /mnt/base/test1/
drwxrwxrwx. 2 root root 6 Sep  7 16:02 /mnt/base/test1/
[opc@vm-nfs ~]$ sudo mount -o nosuid,resvport,sec=sys nfs-srv.sub05090751551.nwblogsash.oraclevcn.com:/FileSystem-20250907-1521-08 /mnt/base/test1
[opc@vm-nfs ~]$ ls -ld /mnt/base/test1/
drwxrwxrwx. 2 root root 0 Sep  7 15:45 /mnt/base/test1/
[opc@vm-nfs ~]$

確認3:mountポイントの上位ディレクトリをopcのみアクセスできるようにした場合にNFSディレクトリにファイル作成できることを確認(NFSディレクトリ配下は777にしてある)
→opc、rootのみ書き込みができる(その他ユーザーは書き込み不可にしたい)という目的。NFSのトップディレクトリのパーミッションではなく上位ディレクトリとしたのは、NFSディレクトリは他のサーバでマウントされて権限が書き替えることが可能っていう前提の環境、プラスあくまでこのサーバー上からのアクセス制御をしたかったため。

[opc@vm-nfs ~]$ ls -ld /mnt/base/
drwxr-xr-x. 3 root root 19 Sep  7 16:02 /mnt/base/
[opc@vm-nfs ~]$ sudo chown opc:opc /mnt/base/
[opc@vm-nfs ~]$ sudo chmod 770 /mnt/base/
[opc@vm-nfs ~]$ ls -ld /mnt/base/
drwxrwx---. 3 opc opc 19 Sep  7 16:02 /mnt/base/
[opc@vm-nfs ~]$

→OK、想定通り

[opc@vm-nfs ~]$ cd /mnt/base/
[opc@vm-nfs base]$ ls -ltr
total 0
drwxrwxrwx. 2 root root 0 Sep  7 15:45 test1
[opc@vm-nfs base]$ cd test1/
[opc@vm-nfs test1]$ pwd
/mnt/base/test1
[opc@vm-nfs test1]$ df -h ./
Filesystem                                                                    Size  Used Avail Use% Mounted on
nfs-srv.sub05090751551.nwblogsash.oraclevcn.com:/FileSystem-20250907-1521-08  8.0E     0  8.0E   0% /mnt/base/test1
[opc@vm-nfs test1]$ id
uid=1000(opc) gid=1000(opc) groups=1000(opc),4(adm),190(systemd-journal) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[opc@vm-nfs test1]$ touch test
[opc@vm-nfs test1]$ ls -ltr
total 0
-rw-r--r--. 1 opc opc 0 Sep  7 16:38 test
[opc@vm-nfs test1]$

一般ユーザでは当然降りられない
→OK、想定通り

[opc@vm-nfs test1]$ sudo useradd testuser
[opc@vm-nfs test1]$ sudo su - testuser
[testuser@vm-nfs ~]$ id
uid=1001(testuser) gid=1001(testuser) groups=1001(testuser) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[testuser@vm-nfs ~]$ cd /mnt/base/test1
-bash: cd: /mnt/base/test1: Permission denied
[testuser@vm-nfs ~]$ cd /mnt/base/test1
-bash: cd: /mnt/base/test1: Permission denied
[testuser@vm-nfs ~]$ cd /mnt/base
-bash: cd: /mnt/base: Permission denied
[testuser@vm-nfs ~]$

rootだと問題なくアクセスできる
デフォルトがNo squashなのでuidの再マップはされてない
→OK、想定通り

[testuser@vm-nfs mnt]$ exit
logout
[opc@vm-nfs test1]$ sudo su -
[root@vm-nfs ~]# cd /mnt/base/test1/
[root@vm-nfs test1]# pwd
/mnt/base/test1
[root@vm-nfs test1]# df -h ./
Filesystem                                                                    Size  Used Avail Use% Mounted on
nfs-srv.sub05090751551.nwblogsash.oraclevcn.com:/FileSystem-20250907-1521-08  8.0E     0  8.0E   0% /mnt/base/test1
[root@vm-nfs test1]# touch root.txt
[root@vm-nfs test1]# ls -ltr
total 0
-rw-r--r--. 1 opc  opc  0 Sep  7 16:38 test
-rw-r--r--. 1 root root 0 Sep  7 16:42 root.txt
[root@vm-nfs test1]#

確認4:ローカルのマウントポイントのパーミッションがNFSマウント後には影響しないことを確認
→mountポイント(ローカル)のパーミッションをrootのみアクセス可能にした状態で、NFSマウント後にopcでアクセスできるを確認
 →OK、想定通り

[opc@vm-nfs test1]$ cd ~
[opc@vm-nfs ~]$ sudo umount /mnt/base/test1
[opc@vm-nfs ~]$ ls -ld /mnt/base/test1/
drwxrwxrwx. 2 root root 6 Sep  7 16:02 /mnt/base/test1/
[opc@vm-nfs ~]$ sudo chmod 700 /mnt/base/test1/
[opc@vm-nfs ~]$ ls -ld /mnt/base/test1/
drwx------. 2 root root 6 Sep  7 16:02 /mnt/base/test1/
[opc@vm-nfs ~]$ sudo mount -o nosuid,resvport,sec=sys nfs-srv.sub05090751551.nwblogsash.oraclevcn.com:/FileSystem-20250907-1521-08 /mnt/base/test1
[opc@vm-nfs ~]$ ls -ld /mnt/base/test1/
drwxrwxrwx. 2 root root 2 Sep  7 16:42 /mnt/base/test1/
[opc@vm-nfs ~]$ cd /mnt/base/test1/
[opc@vm-nfs test1]$ ls -ltr
total 0
-rw-r--r--. 1 opc  opc  0 Sep  7 16:38 test
-rw-r--r--. 1 root root 0 Sep  7 16:42 root.txt
[opc@vm-nfs test1]$ touch opc.txt
[opc@vm-nfs test1]$ ls -ltr
total 0
-rw-r--r--. 1 opc  opc  0 Sep  7 16:38 test
-rw-r--r--. 1 root root 0 Sep  7 16:42 root.txt
-rw-r--r--. 1 opc  opc  0 Sep  7 16:47 opc.txt
[opc@vm-nfs test1]$