【Windows Server 2022】NFSサーバーを構築する

OS

以下の環境で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 と同じであり、互換性の理由からこのリリースに含まれています。

ファイルシステムの管理 | Red Hat Product Documentation
ファイルシステムの管理 | Red Hat Documentation

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コマンドでファイル名を変更することも確認しておくこともできます。

タイトルとURLをコピーしました