ダブルシンボリックリンク(パーティションとサーバー用)

ダブルシンボリックリンク(パーティションとサーバー用)

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

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

問題は、データ パーティションに「www」フォルダー (復元する必要のある Web サイトのバックアップ) があり、 にそのシンボリック リンクを作成する必要があることです/home/user。また、/var/www/htmlサーバー上のファイル/フォルダーに変更を加えることができるように、 にシンボリック リンクを作成する必要があります。これは可能ですか? 最善の方法は何でしょうか?

以前は、「www」フォルダーを直接オンにしていた/home/userため、必要なシンボリックリンクは 1 つだけで済みました。しかし、今は別のデータ パーティションがあるため、どうすればよいかわかりません。サーバーにシンボリックリンクを 1 つだけ持つこともできますが、追加された新しい情報を手動でコピー/バックアップする必要があります。方法があれば、それを自動的に行いたいです。

答え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およびのディレクトリ構造全体 (互いに同期を保つ 2 つの同一の「フォルダー」など) が必要な場合は/var/www/html/home/userバインド マウントを検討してください。

答え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/wwwApache では構成にオプションが必要です。+FollowSymLinks
  2. 編集された変更はすべて、すぐに Web サーバーに「プッシュ」されます。コミットされた内容のみが Web サイトに反映されるように、何らかのリビジョン コントロール システムを使用してこれを行う必要があります。

上記の問題を解決するには、さまざまな方法があります。/すべてを に置く理由がスペースの問題である場合は/data、 を作成し/data/www、 ではなくそこから Web サーバーをサーバーに置きます/var/www。これにより、シンボリック リンクをたどる必要がなくなります。また、 の下にある資料のリビジョン管理に Mercurial を使用し/data/html、これをデフォルトの場所に複製して、または/data/wwwからコミットできるようにします。安定したら、コミットとプッシュを実行して、Web サイトから提供されるようにします。/data/html/home/user/html

答え3

Linux では、任意の物理ストレージをファイルシステム内の任意のパスに何度でも割り当てることができます。ファイル パスは、物理ストレージへの inode (ハンドル/ポインター) にすぎません。同じ物理ファイル/フォルダーを異なるファイルシステム パスにマップするには、少なくとも次の 3 つの方法があります。

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

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

これはこれを行う最善の方法です。なぜなら、Web サーバーは、アクセスすべきでないファイルシステムの部分へのアクセスを許可する可能性があるため、通常、シンボリック リンクをたどることをデフォルトで好まないからです。

任意のフォルダーを他の任意のフォルダーに何度でもマウントできます。元のディレクトリは、それが別の場所にマウントされていることさえ認識しません。OS がこれを処理します。

2) シンボリックリンク。シンボリックリンクは単なるエイリアスです。これは最も弱い結合です。マウントとは異なり、シンボリックリンクには、それが指すパスが(基本的にテキスト形式で)含まれているだけです。つまり、起動のたびに(または必要なときに)マウントする必要はなく、パスが存在しない場合もあります。また、変更される可能性もあります。ほとんどのアプリケーションは、通常のファイルと同様にシンボリックリンクを操作しますが、注意点があります。ディレクトリのシンボリックリンクには、そこに行ってから戻ってきても、必ずしも同じ場所に到達するとは限らないという問題があります。また、アプリケーションはファイル/ディレクトリがリンクであることを認識しています。循環を回避するために、オペレーティングシステムは、たどるリンクのチェーンの長さを制限します(非常に乱用しない限り、ほとんど問題にはなりません)。もちろん、リンクは必要な数だけ持つことができ、元のディレクトリはそれらを認識しません。

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

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

3) ハード リンク。UNIX のファイル システムは、ハード ドライブ上の物理的な場所を指す inode のセットとして設計されているため、各 inode は、そこに到達するためのアドレスにすぎません。したがって、同じアドレスを指す inode (同じファイル システム内) が多数存在する可能性があります。switch -sonlnコマンドを使用しない場合は、ハード リンクが作成されます (可能な場合)。同じ物理ストレージを指すすべてのファイル名は、実際には同等です。「元の」ファイルは存在しません。すべて同じファイルであり、同じものに対して 2 つ以上の名前があるだけです。削除によって実際に削除されるのは inode のみであるため (inode が指し示していない場合にのみ、スペースが空きとしてマークされます)、1 つのファイルを削除しても他のファイルは削除されません。名前のみが削除されます。もちろん、すべてのハード リンクを削除すると、ストレージの場所を示す inode がなくなり、ストレージは最終的に失われます (ファイル システムは、そのスペースを他の用途に使用できます)。

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

つまり、何でも何でもシンボリックリンクでき、別のリンクにリンクすることもできます (ほとんどのライブラリはこのように/usr/libリンクされており、一般的なライブラリ名がインストールされている特定のバージョンにリンクされています)。ルートアクセス権がある場合は、Web サーバーが使用するディレクトリをバインドマウントすることをお勧めします。これがより適切な方法です。ハードリンクが必要になることはおそらくないでしょうが、ハードリンクが存在することは知っておく必要があります。

関連情報