両方のマシンでUbuntu 12.04が実行されています
リモートNFSv4クライアント
$ ls /mnt/storage/aaaaaaa_aaa/bbbb/cccc_ccccc gives this error:
ls: reading directory .: Too many levels of symbolic links
どうすれば修正できますか?
エラーが発生すると、lsはファイルのリストを開始しますが、PHPブレーキです。
NFSv4サーバー上
/etc/fstab
:
/mnt/storage /srv/storage none bind 0 0
/etc/exports
/srv 192.168.1.0/24(rw,async,insecure,no_subtree_check,crossmnt,fsid=0,no_root_squash)
/srv/storage 192.168.1.0/24(rw,async,nohide,insecure,no_subtree_check,no_root_squash)
[〜#〜]エラー[〜#〜]
root@ds:root@ds:/mnt/storage/foreign_dbs/imdb/imdb_htmls# ls -l | head
ls: reading directory .: Too many levels of symbolic links
total 10302840
-rw-r--r-- 1 root root 10484 Jul 5 13:56 0019038.gz
-rw-r--r-- 1 root root 16264 Mar 30 00:31 0259701.gz
-rw-r--r-- 1 root root 13784 Mar 30 14:20 1000000.gz
-rw-r--r-- 1 root root 12741 Mar 30 13:04 1000003.gz
-rw-r--r-- 1 root root 12794 Mar 30 12:40 1000004.gz
-rw-r--r-- 1 root root 13123 Mar 30 12:07 1000005.gz
-rw-r--r-- 1 root root 13183 Mar 30 12:04 1000006.gz
-rw-r--r-- 1 root root 13443 Jul 4 01:16 1000007.gz
-rw-r--r-- 1 root root 12968 Mar 30 11:05 1000008.gz
私はそれをPHPで見つけました。 scandirは1612577.gzと1612579.gzを返しますが、1612578.gzをスキップしますが、ファイルタイプとプロパティは同じです
これはnfsクライアントでのみ発生し、サーバーでは100%機能します
2つ以上のファイルが同じreaddir Cookieを持っていると問題が発生する可能性があります。
この問題は、EXT4バックエンド上でNFSファイルシステム(v3またはv4)を使用し、同じディレクトリに多数のファイル(50000以上)がある場合により一般的です。 NFSの代わりにGlusterFSを使用するときにもこの問題が発生する可能性があります。
PS:この問題は、単一のディレクトリ内のファイルが少ない場合にも発生する可能性がありますが、この最後のケースは非常にありそうもありません。
この場合、Too many levels of symbolic links
エラーは、ディレクトリ内にシンボリックリンクがない場合でも発生します。これを証明するには、次のコマンドが出力を返さないことを確認します。
find /mnt/storage/aaaaaaa_aaa/bbbb/cccc_ccccc -type l
この特定の問題が発生しているかどうかを確認するには、上記のコマンドを実行します。
$ ls /mnt/storage/aaaaaaa_aaa/bbbb/cccc_ccccc >/dev/null
ls: reading directory .: Too many levels of symbolic links
その後、syslog(/var/log/syslog
)のようなエントリの場合:
[400000.200000] NFS: directory /mnt/storage/aaaaaaa_aaa/bbbb/cccc_ccccc
contains a readdir loop. Please contact your server vendor.
The file: DDDDDDDDDD has duplicate cookie COOKIE_NUMBER.
この問題は、readdir Cookieを使用してディレクトリ内のファイルをすばやく見つけるreaddir APIのreaddir
関数に関連しています。 NFSサーバーは、EXT4バックエンドとの通信中にこのAPIを使用します。
重複するCookieの問題(実際には、ハッシュの衝突の問題)に関する完全で優れた説明は、 Widening ext4のreaddir()Cookie にあります。
関連するバグレポートは NFSクライアントが破損した名前の「readdirループ」を報告する にあります。
システムを再起動できる場合、良いニュースは David Hedbergによると です。この問題は、新しいUbuntuカーネルバージョン(> = 3.2.0-60-generic)ですでに解決されています。 NFSサーバーも更新する必要がある場合があります(このソリューションは、NFSサーバーとカーネルの両方が更新されている場合にのみ機能します)。
PS:オペレーティングシステムが本当に好きな場合は、カーネル/ nfsパッチを http://comments.gmane.org- 32/64ビットllseekハッシュ 。
カーネルとNFSカーネルサーバーを更新し、システムを再起動します。
apt-get -y dist-upgrade
reboot
システムを再起動できない場合は、readdir cookieが重複しているファイルを検出し(syslogを確認)、別のディレクトリに移動する(または名前を変更してcookie /ハッシュを変更する)こともできます。
どこかに、親を指すシンボリックリンクがあります。これを使用して検索します。
find /mnt/storage -type l -exec ls -l {} \;
修正したら、おそらくそれを修正する方法を見つけることができます。