2つのNFS共有間でハードリンクを確立する方法は?

2つのNFS共有間でハードリンクを確立する方法は?

共有NFSディレクトリが単一のバックアップファイルシステムでホストされている場合は、複数のNFSマウントにわたってクライアントにハードリンクを設定する方法はありますか? (これを行うと、ローカルでログインしたり、sshでログインしたりすると、サーバーのinodeとハードリンクに問題はありません。)

NFSv4共有で複数のディレクトリを提供するサーバーがあります。すべての共有ディレクトリは[ext4]ファイルシステムにあります。個別に共有されるため、クライアントは個別にインストールできます。

共有AまたはBがそれぞれマウントされているディレクトリツリーにハードリンクを作成できますbar.file。ただし、マウントAとBIの間にORを生成しようとするとlnエラーが発生します。サーバーに直接ログインすることに加えて、この問題を解決する他の方法はありますか?cp -lInvalid cross-device link

ソースのinodeを読み込み、ターゲットディレクトリに同じinodeを持つファイルエントリを手動で生成する短いスクリプトを考えていましたが、少しハッキングされているようで、必要なコンポーネントを調べる必要があります。

それとも一種のジョイントマウントソリューションですか?

両方のシステムに一般ユーザーとrootアクセス権があるとします。

答え1

一般的な観察

個別に共有されるため、クライアントは個別にインストールできます。

この推論は言葉ではありません。親ディレクトリが共有されている場合、クライアントは子ディレクトリを別々にマウントできます。それでも。親ディレクトリに共有したくないアイテムがある場合(または存在する場合)、ディレクトリを別々に共有する必要があるかもしれません。これは妥当な理由かもしれませんし、他の理由があるかもしれません。しかし…

個別にインストールできる機能を提供することは、別々に共有する必要がある理由ではありません。それにもかかわらず、NFSv4はクライアントにこの機能を提供します。/etc/exportsサーバーに1つあります。アクセス制御リストリストの代わりに分離顧客が保有するべき株式。mountクライアントで使用する場合制限なし/etc/exportsサーバーへの正確なパスです。クライアントは/サーバーをマウントし、まだすべての共有にアクセスできます。または、アクセスを許可するすべてのサブディレクトリをマウントできます。

/サーバーをインストールしてみてください。特定の共有の特定の((...)sub-)sub-)サブディレクトリをマウントしようとしています。私のポイントは、あなたができることです。


解決策

Invalid cross-device linkあなたが得る結果は、NFSクライアントでローカルに使用するパスが正式に別々の「デバイス」にあるためです。解決策は、関連するすべての共有を含む階層(ディレクトリツリー)をマウントして、1つのマウントポイントの下にローカルに表示することです(つまり、単一の「デバイス」)。

/NFSクライアントまたは関連するリモートファイルシステムのリモートマウントポイントまたは共有の他の共通の親ディレクトリにサーバーのルートディレクトリ()をマウントします。インストールへのリモートパスをサーバーから明示的にエクスポートする必要はありません。例:

sudo mount -t nfs 192.168.99.7:/remote/mountpoint /local/mountpoint

ローカルマウントポイントの下で選択したリモートディレクトリの内容がエクスポートされた共有に制限されていることがわかります。たとえば、リモートディレクトリとをエクスポートし、/remote/mountpoint/foo/A何もエクスポートしないと(エクスポートまたはエクスポートされていない場合でも)、ローカルでおよびを見ることができますが、は表示されません。あなたは到達できるようになります。/remote/mountpoint/bar/baz/B/remote/mountpoint/qux//remote/mountpoint/local/mountpointfoo/bar/qux/foo/A/bar/baz/B/

厳密に下で作業すると、ディレクトリ間でローカルに作業できるよう/local/mountpointになり、ディレクトリが実際にサーバー上の同じファイルシステムにあり、書き込みが許可されている場合は操作が成功します。lnAB

答え2

NFS共有を含むほとんどのファイルシステムの一般的な実装では、マウントされたファイルシステム内で実行できる一連の操作(開く、読み取り...)を定義します(オブジェクト指向言語と同様)。 NFSクライアントの実装は他のファイルシステムに対する操作を処理できません。 (クライアントの立場には2つのファイルシステムがあります。)

理論的には、専用クライアントが2つのNFSファイルシステムをマウントし(NFSメッセージ転送)、2つのファイルハンドルを取得し、それを使用して2つのファイルを関連付けることができます(NFSメッセージ転送も可能)。しかし、オペレーティングシステムがそれを提供しないと、大きな苦痛になり、100%成功する可能性はありません。これはサーバーの実装によって異なります。

関連情報