デュアルシンボリックリンク(パーティションとサーバー用)

デュアルシンボリックリンク(パーティションとサーバー用)

重複しないことを願って検索しましたが、答えが見つかりませんでした。

私はLinux Mintを使用しています。起動時に自動的にマウントされるデータパーティションがあります。私のフォルダの対応するパーティションにシンボリックリンクを作成しました/home/user

問題は、私のデータパーティション(復元する必要があるWebサイトのバックアップ)にシンボリックリンクを付ける必要がある「www」フォルダがあることです/home/user/var/www/htmlサーバー変更。可能ですか?最良のアプローチは何ですか?

以前は「www」フォルダを直接アーカイブしていた/home/userため、シンボリックリンクのみが必要でした。しかし、今は別々のデータパーティションがありますが、どうすればいいのかわかりません。私のサーバーにはシンボリックリンクが1つしかありませんが、追加する新しい情報を手動でコピー/バックアップする必要があります。方法があれば自動化したほうがいいです。

答え1

はい、フォルダを複数の場所にシンボリックリンクできます。あなたの質問を理解するには、2つのシンボリックリンクが必要です。

/home/user/www -> /mnt/partition/www
/var/www/html -> /mnt/partition/www

状況が異なる場合は、回答を調整させていただきます。ただし、一般的な手順は同じでなければなりません。

 ln -s /mnt/partition/www /home/user/www
 ln -s /mnt/partition/www /var/www/html

/mnt/partition/www/var/www/htmlUnder and Overの完全なディレクトリ構造が必要な場合/home/user(たとえば、互いに同期された2つの同じ「フォルダ」)、バインドマウントを見てください。

答え2

私が正しく理解したら、次のようになります(少し抽象的です)。

/data/html/xyz.html

ホームディレクトリには次のリンクがあります。

/home/user/html -> /data/html

したがって、データは実際には別々のパーティションに保存されます。/data

リンクを介して/var/www/htmlのxyz.htmlファイルを使用できるようになりました。

/var/www/html -> /data/html

そのコマンドは次のとおりです。

cd /home/user
ln -s /data/html .
cd /var/www
ln -s /data/html .

しかし、この設定で2つの問題が見つかりました。

  1. あなたのサーバーは、以下のリンクに従うように設定されていない可能性があります/var/www。たとえば、Apacheには+FollowSymLinks潜在的なセキュリティリスクがあるため、設定にこのオプションを含める必要があります。
  2. 編集された変更はすべてすぐにWebサーバーに「プッシュ」されます。最も多く送信された資料がサイトに表示されるように、一部のリビジョン管理システムを介してこれを行う必要があるかもしれません。

上記の問題を解決する方法はいくつかあります。スペースが/すべてをそこに配置する理由であれば、/data1つを作成し、/data/wwwそこからWebサーバーサーバーを持つことになります/var/www(以下のシンボリックリンクは必要ありません)。 Mercurialを使用して以下のデータを変更し、デフォルトの/data/html場所に複製して状況が安定した場合(または)/data/wwwでコミットし、サイトで提供されるようにコミットしてプッシュすることもできます。/data/html/home/user/html

答え3

Linuxでは、すべての物理ストレージをファイルシステムの任意のパスに複数回割り当てることができます。ファイルパスは物理的に保存されたinode(ハンドル/ポインタ)です。少なくとも3つの方法で、同じ物理ファイル/フォルダを別のファイルシステムパスにマップできます。

1) インストール。物理ドライブ全体をディレクトリにマウントできるように、既存のディレクトリを別の場所にマウントすることもできます(バンドルマウント)。これはシステム内のすべてのアプリケーションに完全に透過的であり、どのプログラムも実際にディレクトリの内容が他の場所にインストールされていることを知りません。あなたの場合は簡単に行うことができます

mount --bind /mnt/partition/www/ /var/www/html/

デフォルトでは、ネットワークサーバーはアクセスできないファイルシステム部分へのアクセスを許可できるため、通常はシンボリックリンクに従うのが好きではないため、これが最善の方法です。

フォルダを別のフォルダに複数回マウントできます。元のディレクトリは、自分が別の場所にインストールされているという事実さえ認識しておらず、オペレーティングシステムはそれを処理します。

2) シンボリックリンク。シンボリックリンクはエイリアスにすぎません。これは最も弱い組み合わせです。インストールとは異なり、シンボリックリンクにはそのリンクが指すパスのみが含まれます(デフォルトではテキスト形式)。つまり、起動するたびに(または必要なときに)インストールする必要はなく、パスが存在しない可能性があります。また、変更されることがあります。ほとんどのアプリケーションは通常のファイルのように使用しますが、いくつかの注意があります。ディレクトリシンボリックリンクにいくつかの問題がある理由は、再び入って出てくるとき必ずしも同じ位置にあるわけではないからです。さらに、アプリケーションはファイル/ディレクトリがリンクであることを知っています。ループを避けるために、オペレーティングシステムは従う必要があるリンクチェーンの長さを制限します(真剣に乱用しない限りほとんど問題ありません)。もちろん、必要なだけ多くのリンクを持つことができ、元のディレクトリはそれについて知りません。

ln -s /mnt/partition/www/ /var/www/html/

ln -s /mnt/partition/www/ /home/user/www/

3) ハードリンク。 Unixのファイルシステムは、ハードドライブの物理的な場所を指す一連のinodeとして設計されているため、各inodeはその場所に到達するためのアドレスです。したがって、同じアドレスを指す多くのinode(同じファイルシステム)を持つことができます。-sスイッチオンコマンドを使用しないと、lnハードリンクが生成されます(可能な場合)。同じ物理ストレージを指すすべてのファイル名は、事実上同じです。 「オリジナル」ファイルはありません。それらはすべて同じファイルで、同じものの複数の名前です。削除すると、実際にはinodeのみが削除され(inodeがそのスペースを指している場合にのみスペースを使用可能としてマークするため)、あるファイルを削除しても別のファイルは削除されません。名前だけが削除されます。もちろん、すべてのハードリンクを削除すると、リポジトリを見つけることができる場所を知らせるinodeがなくなり、最終的に失われます(ファイルシステムはそのスペースを他の目的に使用することができます)。

この状況では役に立ちません。各パーティションには独自の物理アドレス管理機能があるため、ハードリンクは同じファイルシステム(同じパーティション)内でのみ機能します。しかし、私は完全性のためにそれを含んでいます。

したがって、何でもシンボリックリンクでリンクし、他のリンクでリンクすることもできます(/usr/libほとんどのライブラリはこのようにリンクされ、共通ライブラリ名がインストールされている特定のバージョンにリンクされます)。ルートアクセス権がある場合は、Webサーバーが使用するディレクトリをバインドマウントする方が正確です。ハードリンクは必要ないかもしれませんが、ハードリンクが存在することに注意してください。

関連情報