次のようなツリーに増分バックアップを保存するバックアップサーバーがあります。
/backups
hourly.0
server 1
server 2
hourly.1
server 1
server 2
hourly.2
server 1
server 2
daily.0
server 1
server 2
etc...
実際のバックアップでソースツリーを変更せずに、次のような再編成されたツリーを作成したいと思います。
/share
server1/1 Hour Ago -> /backups/hourly.0/server1
server1/2 Hours Ago -> /backups/hourly.1/server1
server2/1 Hour Ago -> /backups/hourly.0/server2
server2/2 Hours Ago -> /backups/hourly.1/server2
...
...次に、このツリーをsingleNFSマウントとしてエクスポートします。
NFSクライアントは次を確認する必要があります。
/backups
server 1
1 Hour Ago
2 Hours Ago
server 2
1 Hour Ago
2 Hours Ago
失敗した試み#1-シンボリックリンクを使用
シンボリックリンクはサーバーではなくNFSクライアントマシンに関連しているため、これは機能しません。クライアントで「1時間前」を開こうとすると、存在しないクライアントの/backups/hourly.0/server1にアクセスしようとします。
失敗した試み#2-/etc/fstabでBINDを使用
すなわち:
/backup/hourly.0/server1/ "/share/server1/1 Hour Ago" none ro,bind,defaults 0 0
これにより、NFSクライアントに表示される必要なツリーを作成できましたが、フォルダー内には何も表示されませんでした。これはおそらく、NFSがファイルシステムにまたがらず、NFSがバインドマウントポイントを新しいファイルシステムと見なしているためです。
これを達成する方法はありますか?
いいえ、これはカーネルベースのnfsサーバーでの単一のNFSエクスポートでは不可能です。
exports(5)
マニュアルにあるように:
ファイル/ etc/exportsには、NFSクライアントがアクセスできるNFSサーバー上のローカル物理ファイルシステムのテーブルが含まれています。
ただし、ツリーの一部をエクスポートして、バインドを使用してクライアント上で再アセンブルすることができます。
シンボリックリンク
別の緩和策は、シンボリックリンクを使用することです。
/server_1
hourly.0 -> /backups/hourly.0/server\ 1
hourly.1 -> /backups/hourly.1/server\ 1
...
/server_2
hourly.0 -> /backups/hourly.0/server\ 2
hourly.1 -> /backups/hourly.1/server\ 2
...
これを機能させるには、バックアップツリー全体とサーバーディレクトリをエクスポートする必要があります。これは、シンボリックリンクを使用すると、各サーバーが他のサーバーのバックアップを参照できることを意味します。
nohideオプション
nohide
ファイルにはcrossmount
およびexports
オプションがあります。単一サーバーのエクスポートでのみ機能します。 inode number clashの可能性など、ドキュメントでこのオプションに付随する多くの警告があるため、これを使用したことはありません。
同じ物理ファイルシステムからディレクトリツリーをエクスポートしているため、NFSにマウントされたサブツリーをエクスポートするときに発生する可能性のあるこのiノード番号の衝突やデッド中間サーバーによるデッドロックは発生しません。
LinuxカーネルのNFSサーバーが、バインドオプションでマウントされたファイルシステムをnohideで表示できるとは思いません。
逆に行う
私はその質問について考えていて、おそらくこれにアプローチする正しい方法が逆にそれを行うことに気づきました。つまり、エクスポートしたいサーバーごとにディレクトリツリーを作成します。データを適切な場所に移動してから、mount -o bind
を使用して/ backupsツリーを再構築します。
つまり、ファイルシステムは次のようになります。
/share/server1/1_Hour_Ago
2_Hour_Ago
...
/share/server2/1_Hour_Ago
2_Hour_Ago
...
あなたのfstabは
/share/server1/1_Hour_Ago /backups/hourly.0/server_1 none rw,bind 0 0
/share/server1/2_Hour_Ago /backups/hourly.1/server_1 none rw,bind 0 0
...
/share/server2/1_Hour_Ago /backups/hourly.0/server_2 none rw,bind 0 0
/share/server2/2_Hour_Ago /backups/hourly.1/server_2 none rw,bind 0 0
...
あなたのexports
はただ
/share/server1 server1(rw,no_subtree_check)
/share/server2 server2(rw,no_subtree_check)