NFS 共有領域へのアクセスについて

こんにちは。 Windows テクノロジー サポートの松田です。

Windows Server 2003 R2 以降のシステムでは、Windows コンポーネントの一部として NFS
サービスが提供されています。Unix や Linux 環境において広く用いられているネットワーク
ファイル共有の NFS (Network File System) に対応するためのもので、このサービスを利用
することで Unix/Linux 環境と Windows 環境との間で NFS プロトコルを介したファイル共有
が出来るようになります。

Unix/Linux と Windows が混在するネットワーク環境をお持ちのユーザー様にご活用いただい
ていますが、Windows Server 2008 (Windows Vista) に SP2 を適用することにより NFS が
利用出来なくなる問題が生じています。なお、同様の現象は Windows  Server 2008 R2 では
発生いたしません。

この問題の原因について説明させていただくとともに、問題を解決するための修正プログラム
をご案内させていただきます。

  -----

Windows では、Unix/Linux 環境からエクスポートされた NFS 共有領域に対してアクセスする
ための方法として、以下の二つの方法を提供しています。

 - mount や net use コマンドを利用してドライブ文字にマウントする
 - UNC (Universal Naming Convention) 形式で直接アクセスする

ただし、ドライブ文字にマウントを行った場合でも、内部処理上は UNC 形式に変換してから
アクセスされることも多く、結局のところ大多数の状況下で UNC 形式によるアクセスが行わ
れています。

この UNC 形式には、リモート共有領域に関するファイル システムの種類やネットワーク プロ
バイダの情報を含まないため、UNC 形式でファイルへのアクセスが行われると MUP (Multiple
UNC Providers) にてネットワーク プロバイダの選択が行われます。

選択の仕組みはシンプルなもので、MUP はすべてのネットワーク プロバイダを利用して対象
領域へのアクセスを行い、アクセスに成功したネットワーク プロバイダが有効なものである
と判断します。

また、Windows には DFS (Distributed File System) と呼ばれる機能があり、クライアント
では既定で有効になっています。この DFS を利用する場合のパスにも UNC 形式を利用します。
このため、UNC 形式によるアクセスが行われると、まず最初にその UNC パスが DFS のもので
あるのかどうかを確認します。

DFS としての有効性を確認する方法は先述の MUP と似た処理を行いますが、これまでの DFS
ではネットワーク プロバイダが SMB (CIFS) であることを前提に動作していました。これに
対して Windows Server 2008 (Windows Vista) に SP2 を適用すると、DFS に対しても MUP
と同様にすべてのネットワーク プロバイダが探索されるように変更されました。

これは、任意の UNC 形式が DFS のものであるのかどうかを確認する際に、NFS が有効化され
ていた環境においては NFS のネットワーク プロバイダも含めて探索されることを意味します。

この際、NFS は DFS に対応していないために STATUS_NOT_IMPLEMENTED のエラー ステータス
を返しますが、DFS がこのエラーを理解出来ず、DFS として有効な UNC 形式であると誤って
判断してしまうという問題があることがわかりました。

その結果、NFS 上のファイルを UNC 形式でアクセスした際、DFS のものだと誤って判断されて
しまうことにより、"Incorrect Function" のエラーにてファイルのアクセスに失敗してしまい
ます。

この問題については、下記のサポート技術情報にて修正プログラムが公開されています。

FIX: Error message when you access an NFS share from a computer that is running Windows Vista SP2 or Windows Server 2008 SP2: "Incorrect Function"
https://support.microsoft.com/kb/978845

なお、通常は "Incorrect Function" のエラーが返されますが、ファイルのアクセス方法など
によっては "Permission Denied" のエラーが返される場合があります。SP2 が適用された環境
において、ファイル パーミッションに問題がないにもかかわらず "Permission Denied" が記録
される場合にも、修正プログラムの適用をお試しください。

松田