Windows Server 2008 および Windows Storage Server 2008 上の NFS 共有フォルダーに対して ls コマンドを実行すると、正しくファイル情報を取得できない場合がある

現象
Microsoft Windows Server 2008 および Microsoft Windows Storage Server 2008 上に構築された NFS サーバーに対し、NFS クライアントから rsize オプションを用いて Read Buffer の値を 1024 のような小さな値に指定してマウントを行った場合、ls コマンドなどでフォルダー情報を確認すると、対象フォルダーに含まれるファイル情報が正常に表示されない場合があります。

mount コマンドの利用例 :
mount -o rsize=1024 <マウント対象先> <マウント ポイント>
原因
NFS クライアントから ls コマンドなどを利用してディレクトリ内のファイル一覧を取得する場合、NFS の READDIRPLUS リクエストが利用されます。READDIRPLUS では、サーバーとクライアント間で一度にやり取り出来る最大データ量を示す 2 つの値 dircount と maxcount を構成情報として持ちますが、NFS サーバー内部の処理にて maxcount を参照しなければならないところを誤って dircount を参照してしまう問題があります。

例えば、マウント時に Read Buffer を 1024 Byte に設定し、dircount と maxcount がそれぞれ 128 byte と 1024 byte の値を設定された場合、Windows 上に構築された NFS サーバーでは本来 1024 byte までのデータを保持出来るところを最大 128 byte までと誤認識します。ディレクトリの属性情報は約 100 byte のサイズを持つため、残された 20 byte 程度のデータ領域ではディレクトリ内のファイル情報をひとつも保持することができず、ファイルが存在しないかのように見える現象が発生します。
回避策
この現象を回避するには、Read Buffer をより大きい値に設定してください。
状況
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。  
詳細

問題の再現手順

  1. Windows Server 2008 または Windows Storage Server 2008 上に NFS サーバーを構築し、NFS 共有フォルダーに対してアクセスを行います。
  2. ls コマンドを利用してフォルダー情報を確認します。

結果

以下のように、対象フォルダーに含まれるファイル情報が正常に表示されません。
[root@localhost ~]# mount -t nfs -o rsize=1024 192.168.1.82:/NFSShare /var/tmp/nfstest[root@localhost ~]# ls /var/tmp/nfstest[root@localhost ~]# ls /var/tmp/nfstest/test4.txt/var/tmp/nfstest/test4.txt[root@localhost ~]# ls -la /var/tmp/nfstest/test4.txt-rw-r--r-- 1 root root 11 Jan 11  2011 /var/tmp/nfstest/test4.txt

なお、正常時は以下のように、対象フォルダーに含まれるファイル情報が表示されます。
[root@localhost ~]# mount -t nfs 192.168.1.82:/NFSShare /var/tmp/nfstest[root@localhost ~]# ls /var/tmp/nfstesttest4.txt[root@localhost ~]# ls /var/tmp/nfstest/test4.txt/var/tmp/nfstest/test4.txt[root@localhost ~]# ls -la /var/tmp/nfstest/test4.txt-rw-r--r-- 1 root root 11 Jan 11  2011 /var/tmp/nfstest/test4.txt
プロパティ

文書番号:2506157 - 最終更新日: 10/04/2016 15:14:00 - リビジョン: 4.0

Windows Server 2008 Datacenter, Windows Server 2008 Enterprise, Windows Server 2008 Foundation, Windows Storage Server 2008 Basic, Windows Storage Server 2008 Basic Embedded, Windows Storage Server 2008 Enterprise, Windows Storage Server 2008 Enterprise Embedded

  • kbharmony kbexpertiseinter kbtshoot KB2506157
フィードバック