Ask CORE

Microsoft Japan Windows Technology Support

Windows を NFS サーバーとして利用した際のNFS Cookie について

こんにちは。 Windows プラットフォーム サポートの松田です。

今回は Windows の NFS サーバーで利用される NFS Cookie についてお話しします。

NFS Cookie とは、NFS サーバーと NFS クライアント間の通信において、ディレクトリの個々のファイル エントリーに対して NFS サーバー側で割り振る値です。
NFS version 3 では、以下の RFC に記載されているとおり 64 bit Cookie が主に利用されます。

NFS Version 3 Protocol Specification
http://www.ietf.org/rfc/rfc1813.txt

READDIR
The READDIR arguments now include a verifier to allow the server to validate the cookie. The cookie is now a 64 bit unsigned integer instead of the 4 byte array which was used in the NFS version 2 protocol. This will help to reduce interoperability problems.

しかしながら、Windows で利用される NFS サーバーでは、64 bit Cookie に対応できないクライアント アプリケーションを考慮して、既定では NFS Version 3 であっても 32 bit Cookie が利用されます。
(Windows Server 2012 からは既定で 64 bit Cookie が利用されます)

一方、Windows の NTFS ファイル システム上では、それぞれのファイルは 64 bit 長の NTFS FileID という一意な値で管理されています。
32 bit Cookie ではこの NTFS FileID を利用して 32 bit Cookie が生成されますので、稀に同じ値の Cookie が異なるファイル エントリーに対して作成されてしまい、NFS クライアントで無限ループや、意図しない動作などが発生する場合があります。

その場合には、以下のサポート技術情報を参照し FileCookieV3Size の値を 4 に変更し、64 bit Cookie を使用するように構成して下さい。

FIX: You receive an error message and a client computer may stop responding when you try to run the ls command to list files or subdirectories on a large directory in Windows Services for UNIX 2.3
http://support.microsoft.com/kb/910609/en-us

上記の資料に記載されている FileCookieV3Size レジストリは、Windows Server 2012 まで同様に有効です。

また、一緒に記載されている DisableFilenameHashing については32 bit Cookie の生成時に既定で利用されるファイル名のハッシュ情報を含んだ算出方法を無効化するレジストリです。

DisableFilenameHashing  のレジストリを変更することで、32 bit Cookie の内部算出方法が変更されますので、これにより 32 bit Cookie の重複を回避できる可能性があります。
ただし、本レジストリは Windows Server 2003 R2 までは利用可能ですが、Windows Server 2008 については以下のサポート技術情報で公開されている修正プログラムを適用し、DisableFilenameHashing  を設定可能な状態に変更する必要があります。
(Windows Server 2008 R2 以降では DisableFilenameHashing による 32 bit Cookie 生成方法の変更はできません)
また、Cookie の生成に際して NTFS FileID のみが使用されるようになるため、同一 FileID を持つ、ハード リンクされたファイル同士が同一の Cookie を持つようになる点を考慮する必要もあります。

Can’t perform a file operation from a UNIX client to a Windows Server 2008-based NFS server
http://support.microsoft.com/kb/2813363/en-us

NFS Version 3 が利用される環境で、NFS クライアントが 64 bit Cookie に対応している場合には、64 bit Cookie を利用していただくのが推奨される構成となりますので、NFS 通信において無限ループが発生するような場合には64 bit Cookie の利用について是非ご検討ください。