NFSでコンテキストパス名(CDPN)を実装する方法はありますか?

NFSでコンテキストパス名(CDPN)を実装する方法はありますか?

私のGFSクラスタでは、次のものを使用します。CDPN/dev/log別のクラスタノードに別のchrootディレクトリを持つ機能:

/ホーム/ftpuser/foo:
lrwxrwxrwx 1 root root 2010年9月26日18日dev - > .sys/@hostname/dev

/home/ftpuser/foo/.sys:
drwx--x--x 3 ルート ルート 3864 2010 年 9 月 26 日 server1.example.com
drwx--x--x 3 ルート ルート 3864 2010 年 9 月 26 日 server2.example.com
drwx--x--x 3 root3864 2010年9月26日 server3.example.com

/home/ftpuser/foo/.sys/server2.example.com:
drwx--x--x 2ルートルート3864 9月25日09時34分開発

/home/ftpuser/foo/.sys/server2.example.com/dev:
srw-rw-rw- 1 root root 0 9月25日09:23 ログ

/home/ftpuser/foo/dev: (ノード名に基づいて1つのサブディレクトリを透過的に選択します)
srw-rw-rw- 1 root root 0 9月25日09:23 ログ

各ノードのrsyslogデーモンが互いに干渉しないようにこれを使用します。@hostnameパスの内容がそれを解釈したホストのホスト名に変更されるため、機能するため、ホストごとに異なるディレクトリがあります。クラスタはすべてのノードで同時にアクティブになります。

私の質問:

  • NFS共有からその機能を取得する方法はありますか?
  • 理論的には、すべてのファイルシステムのLinuxカーネルに実装できますか(マウントオプションでデフォルトで問題が発生しないように)。

この質問は次の質問に似ていますが、同じではありません。名前は同じですが、ホストによって内容が異なるNFSファイル

答え1

NFSにはCDPNが存在しないと思いますが、基本的なツールを使用するとほぼ同じ機能を実現できます。制限は、すべてのノード固有のファイルを同じ場所に配置する必要があります(または少なくとも場所のリストを維持する必要があります)、目的の@hostname場所でこの機能を使用できないことです。

同じ場所にあるすべてのノードにローカルファイルシステムをマウントします(例:)/local。そのファイルシステムでは、ターゲットがノードごとに異なり、リモートファイルシステムのノード固有の領域を指すシンボリックリンクを作成します。ローカルストレージは必要なく、シンボリックリンクのみを保存するだけで、メモリ内のファイルシステムになり、オーバーヘッドが最小限に抑えられます。

mount -t tmpfs -o noexec,nodev,nosuid,mode=755,nr_inodes=2,nr_blocks=2 local-redirect /local
ln -s "/nfs/.sys/$HOSTNAME" /local/storage

あなたの例で/local/storage使用する場所を使用してください。.sys/@hostname

他のLinux関連のアプローチは、各ノードでバインドマウントを実行することです。共有ファイルシステムに空のディレクトリを置き、@hostnameNFSファイルシステムをマウントしてから、ここにバインドマウントします。

mount --bind "/.nfs/sys/$HOSTNAME" /nfs/.sys/@hostname

関連情報