以下の環境でNFSサーバーを構築、接続とファイルの読み書きテストを実施します。
- ホスト:Windows Server 2022
- クライアント:Red Hat Enterprise Linux 9.5
Windows Server 2022、RHEL9で構築してみたが、NFSv4で接続された
Windows側がNFSv3でRHEL側がNFSv4でマウントすると日本語の読み書きができなかったり、ファイルやフォルダの所有者がnobodyやnfsnobodyになるなどのバグが発生します。
今回試した環境ではWindows側がNFSv4でRHEL側もNFSv4でマウントさせることができました。
Windows側がNFSv3の場合はRHEL側でNFSv3でマウントできるよう、マウントする際に以下のオプションを指定します。
nfsvers = 3
vers = 3
なお、どちらのマウントオプションも機能的に差分がないことは以下のRed Hat公式ドキュメントに記載があります。
オプション
vers
は、nfsvers
と同じであり、互換性の理由からこのリリースに含まれています。
Windows Server 2022をNFSサーバーとして使用する
まずはWindows(Windows Server 2022)側をNFSサーバーとして使えるように役割と機能の追加からソフトをインストールします。
役割と機能の追加
以下をサーバーマネージャーからWindows Server 2022にインストールします。












共有パス(マウントポイント)を作成する





今回は以下のフォルダをマウントポイントとして使用します。以下のフォルダにLinuxからファイルを読み書きできるようにWindows Serverに設定します。
C:\Users\Administrator\Desktop\nfs_test





追加ボタンをクリックして、Windows Serverに接続したいLinuxのIPアドレスをホスト(H)に入力します。


共有アクセス許可(S)を読み取り/書き込みにし、ルートアクセスを許可するにチェックを今回は入れます。以下の状態になったら次へ(N)をクリックします。

フォルダのアクセス許可(F)にEveryoneを追加します。

アクセス許可をカスタマイズする(C)をクリックします。

追加ボタンをクリックし、プリンシパルの選択をクリックし、選択するオブジェクトを入力してくださいに「Everyone」と入力し、「名前の確認(C)」をクリックしてOKをクリックします。



上記の画面になったら、フルコントロールにチェックを入れ、OKをクリックします。

アクセス許可にEveryoneがいることを確認し、OKボタンをクリックします。

フォルダーアクセス許可(F)にEveryoneが存在することを確認します。
次へをクリック。

内容を確認して「作成(C)」をクリック。

これでNFSのマウントポイントを作成できました。作成したマウントポイントは以下のようにサーバーマネージャーから確認できます。

Linuxから接続とマウントできることを試す
以下のコマンドを実行してLinuxからWindowsで作成したフォルダが正しくマウントできることを確認します。
nfs-utilsとその依存関係のパッケージをインストールする
以下のコマンドを実行してnfs-utilsとその依存関係にあるrpmパッケージをインストールします。\
なお、インストール作業前後には「rpm -qa | sort」を実行しておくと、インストール作業前後でのrpmパッケージの差分がわかるでのやっておきましょう。
# dnf install nfs-utils
[root@localhost ~]# dnf install nfs-utils
サブスクリプション管理リポジトリーを更新しています。
メタデータの期限切れの最終確認: 0:02:01 前の 2025年04月05日 21時11分57秒 に実施しました。
依存関係が解決しました。
=================================================================================================================================================================
パッケージ アーキテクチャー バージョン リポジトリー サイズ
=================================================================================================================================================================
インストール:
nfs-utils x86_64 1:2.5.4-27.el9 rhel-9-for-x86_64-baseos-rpms 463 k
依存関係のインストール:
gssproxy x86_64 0.8.4-7.el9 rhel-9-for-x86_64-baseos-rpms 114 k
libev x86_64 4.33-5.el9 rhel-9-for-x86_64-baseos-rpms 56 k
libnfsidmap x86_64 1:2.5.4-27.el9 rhel-9-for-x86_64-baseos-rpms 65 k
libverto-libev x86_64 0.3.2-3.el9 rhel-9-for-x86_64-baseos-rpms 15 k
rpcbind x86_64 1.2.6-7.el9 rhel-9-for-x86_64-baseos-rpms 62 k
sssd-nfs-idmap x86_64 2.9.5-4.el9_5.4 rhel-9-for-x86_64-baseos-rpms 42 k
トランザクションの概要
=================================================================================================================================================================
インストール 7 パッケージ
ダウンロードサイズの合計: 818 k
インストール後のサイズ: 1.9 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
(1/7): libverto-libev-0.3.2-3.el9.x86_64.rpm 30 kB/s | 15 kB 00:00
(2/7): libev-4.33-5.el9.x86_64.rpm 105 kB/s | 56 kB 00:00
(3/7): rpcbind-1.2.6-7.el9.x86_64.rpm 112 kB/s | 62 kB 00:00
(4/7): gssproxy-0.8.4-7.el9.x86_64.rpm 381 kB/s | 114 kB 00:00
(5/7): libnfsidmap-2.5.4-27.el9.x86_64.rpm 229 kB/s | 65 kB 00:00
(6/7): nfs-utils-2.5.4-27.el9.x86_64.rpm 1.1 MB/s | 463 kB 00:00
(7/7): sssd-nfs-idmap-2.9.5-4.el9_5.4.x86_64.rpm 210 kB/s | 42 kB 00:00
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
合計 812 kB/s | 818 kB 00:01
トランザクションを確認しています
トランザクションの確認に成功しました。
トランザクションをテストしています
トランザクションのテストに成功しました。
トランザクションを実行しています
準備中 : 1/1
インストール中 : libnfsidmap-1:2.5.4-27.el9.x86_64 1/7
scriptletの実行中: rpcbind-1.2.6-7.el9.x86_64 2/7
インストール中 : rpcbind-1.2.6-7.el9.x86_64 2/7
scriptletの実行中: rpcbind-1.2.6-7.el9.x86_64 2/7
Created symlink /etc/systemd/system/multi-user.target.wants/rpcbind.service → /usr/lib/systemd/system/rpcbind.service.
Created symlink /etc/systemd/system/sockets.target.wants/rpcbind.socket → /usr/lib/systemd/system/rpcbind.socket.
インストール中 : libev-4.33-5.el9.x86_64 3/7
インストール中 : libverto-libev-0.3.2-3.el9.x86_64 4/7
インストール中 : gssproxy-0.8.4-7.el9.x86_64 5/7
scriptletの実行中: gssproxy-0.8.4-7.el9.x86_64 5/7
scriptletの実行中: nfs-utils-1:2.5.4-27.el9.x86_64 6/7
インストール中 : nfs-utils-1:2.5.4-27.el9.x86_64 6/7
scriptletの実行中: nfs-utils-1:2.5.4-27.el9.x86_64 6/7
インストール中 : sssd-nfs-idmap-2.9.5-4.el9_5.4.x86_64 7/7
scriptletの実行中: sssd-nfs-idmap-2.9.5-4.el9_5.4.x86_64 7/7
検証中 : libev-4.33-5.el9.x86_64 1/7
検証中 : libverto-libev-0.3.2-3.el9.x86_64 2/7
検証中 : rpcbind-1.2.6-7.el9.x86_64 3/7
検証中 : gssproxy-0.8.4-7.el9.x86_64 4/7
検証中 : libnfsidmap-1:2.5.4-27.el9.x86_64 5/7
検証中 : nfs-utils-1:2.5.4-27.el9.x86_64 6/7
検証中 : sssd-nfs-idmap-2.9.5-4.el9_5.4.x86_64 7/7
インストール済みの製品が更新されています。
インストール済み:
gssproxy-0.8.4-7.el9.x86_64 libev-4.33-5.el9.x86_64 libnfsidmap-1:2.5.4-27.el9.x86_64 libverto-libev-0.3.2-3.el9.x86_64
nfs-utils-1:2.5.4-27.el9.x86_64 rpcbind-1.2.6-7.el9.x86_64 sssd-nfs-idmap-2.9.5-4.el9_5.4.x86_64
完了しました!
[root@localhost ~]#
まずはネットワークの疎通確認から

ifconfigコマンドでLinuxの自身のIPアドレスを確認します。
Windows側からコマンドプロンプトを立ち上げてLinuxへpingコマンドが通ることを確認します。
ping <LinuxのIPアドレス>
LinuxのhostsファイルにWindows ServerのIPアドレスとホスト名を書き、Windows Serverのホスト名とIPアドレスが名前解決できるようにしておきます。

[root@localhost ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
Windows(Windows Server)のIPアドレスをコマンドプロンプトを立ち上げてipconfigコマンドを打ち確認します。

Linuxのhostsファイルに確認したWindows ServerのIPアドレスとホスト名を紐づけて記載します。

[root@localhost ~]# vi /etc/hosts
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
<IPv4アドレス> <ホスト名>
hostsに書いたので、ping <ホスト名>で通信の疎通確認を行います。
[root@localhost ~]# ping WIN2022
PING WIN2022 (<IPv4アドレス>) 56(84) bytes of data.
^C
--- WIN2022 ping 統計 ---
送信パケット数 4, 受信パケット数 0, 100% packet loss, time 3085ms
うまくつながりません。IPアドレスでpingコマンドを実行してもつながりません。
Windows側からLinux側へはpingコマンドが有効だったため、Windows Server 側のファイヤーウォールかもしれません。


Windows Serverのファイヤーウォールを無効にしたところ、問題なくpingが通りました。
[root@localhost ~]# ping WIN2022
PING WIN2022 (<IPv4アドレス>) 56(84) bytes of data.
64 バイト応答 送信元 WIN2022 (<IPv4アドレス>): icmp_seq=1 ttl=128 時間=0.271ミリ秒
64 バイト応答 送信元 WIN2022 (<IPv4アドレス>): icmp_seq=2 ttl=128 時間=2.11ミリ秒
64 バイト応答 送信元 WIN2022 (<IPv4アドレス>): icmp_seq=3 ttl=128 時間=1.72ミリ秒
64 バイト応答 送信元 WIN2022 (<IPv4アドレス>): icmp_seq=4 ttl=128 時間=1.41ミリ秒
64 バイト応答 送信元 WIN2022 (<IPv4アドレス>): icmp_seq=5 ttl=128 時間=2.00ミリ秒
64 バイト応答 送信元 WIN2022 (<IPv4アドレス>): icmp_seq=6 ttl=128 時間=2.01ミリ秒
^C
--- WIN2022 ping 統計 ---
送信パケット数 6, 受信パケット数 6, 0% packet loss, time 5065ms
rtt min/avg/max/mdev = 0.271/1.585/2.111/0.632 ms
名前解決させておくのは、マウントコマンドでWindows Serverのマウントポイントを指定する際にホスト名がファイルパスに含まれるためです。名前解決できない、もしくは名前解決をしない場合はmountコマンド実行時にホスト名のところをIPアドレスに書き換えてマウントします。
実際にマウントしてみる
以下のコマンドを実行してLinuxからWindowsで作成したフォルダが正しくマウントできることを確認します。
mount -t nfs WIN2022:/nfs_test /NAS
※あらかじめ/NASをmkdirコマンドで作成しておきます。
以下のコマンドのいずれか、もしくはすべて実行してマウントできていることを確認します。
dh -Th
cat /etc/mtab
ls -la /NAS
マウントしたらファイルの読み書きを試す
以下のコマンドを実行してファイルを作成します。
touch test
もしくは以下のコマンドでも問題ありません。
touch test.txt
viコマンドで作ったファイルの編集可否を確認します。
ls -la /NAS
vi test.txt
ls -la /NAS
cat test.txt
日本語のファイルが作成できることも確認してみます。
touch 日本語.txt
viコマンドで日本語の読み書きができることも確認します。
また、mvコマンドでファイル名を変更することも確認しておくこともできます。
