ハードリンクが同じファイルシステム内でのみ機能するのはなぜですか?

ハードリンクが同じファイルシステム内でのみ機能するのはなぜですか?

私はこれを読んでいますコマンドラインの紹介著者:マーク・ベイツ

第1章では、彼はハードリンクがファイルシステムにまたがることはできないと述べました。

ハードリンクに注目すべき重要な点は、現在のファイルシステムでのみ機能することです。他のファイルシステム上のファイルへのハードリンクを作成できません。これを行うには、セクション1.4.3のシンボリックリンクを使用する必要があります。

私はファイルシステムを1つだけ知っています。ルート()で始まるものです/。ハードリンクがファイルシステムにまたがることはできないという主張は私には理解されていません。

ウィキペディアUnixファイルシステムに関する記事役に立ちません。

答え1

この質問にあなたが理解できる方法で回答できることを願っています。 Linuxのファイルシステムは通常、ファイルを保存するさまざまな方法の1つでフォーマットされたパーティションで構成されています(必ず選択してください!)。システムファイルでも個人ファイルでも、ファイルシステムに保存されます。この部分は理解できそうです。

しかし、ハードドライブを複数のパーティションに分割するか(Apple Pieを複数の部分に分割すると想像してみてください)、追加のハードドライブ(USBスティック?)を追加するとどうなりますか?議論のためにファイルシステムもあります。

コンピュータでファイルを表示すると、パーティションのファイルシステム内のデータの視覚的表現を見ることができます。各ファイル名は、データが実際に裏側に存在する inode に対応します。ハードリンクを使用すると、同じinodeを指す複数の「ファイル名」を持つことができます(より良い説明がありません)。これは、ハードリンクが同じファイルシステムにある場合にのみ機能します。代わりに、シンボリックリンクは「ファイル名」を指し、これはデータを保持しているinodeにリンクされます。私の粗雑な作品を許してください。しかし、これがよりよく説明されることを願っています。

image.jpg             image2.jpg
          \           /
           [your data]

ここで、image.jpgとimage2.jpgはどちらもデータを直接指します。それらはすべてハードリンクです。しかし...

image.jpg    <-----------  image2.jpg
           \ 
             [your data]

この(ソース)例では、image2.jpgはデータを指すのではなく、データへのリンクであるimage.jpgを指します。

シンボリックリンクはファイルシステム境界全体で動作します(ファイルシステムがUSBスティックのように接続およびマウントされていると仮定)。しかし、ハードリンクはできません。他のファイルシステムに何があるのか​​、データがどこに保存されているのかわかりません。

これがより良い理解に役立つことを願っています。

答え2

これファイルシステムファイルを構成するディレクトリエントリを含むディレクトリ構造で構成されます。各ディレクトリエントリはファイル名ですインデックスノード

ソフトリンク象徴的な)はデータのないディレクトリエントリであり、単に他のエントリ(同じファイルシステムまたは別のファイルシステムのファイルまたはディレクトリ)を指します。シンボリックリンクが指すファイルを削除すると、シンボリックリンクは使用できなくなります。

ハードリンクファイル名を含むディレクトリエントリ。 インデックスノード数字。最後のハードリンクを削除した後は、ファイルにアクセスできなくなります。

ソフトリンクとハードリンクの違い

結論として:

〜のようにインデックスノードこれはファイルシステムオブジェクトを表すために使用されるデータ構造であり、ファイルシステム内にあるため、指すことはできません。インデックスノード他のファイルシステム

したがって、ハードリンクは同じファイルシステム内でのみ機能しますが、ソフトリンク(シンボルリンク)はファイルシステムにまたがる可能性があります。なぜなら、それらは他のディレクトリエントリ(内部オブジェクトではなくファイルシステムへのインタフェース)を指しているからです。

答え3

ハードリンクはターゲットをアクティブに保つ効果があります。ハードリンクに接続できる限り、システムはそのターゲットが解放されないようにします。したがって、システムが参照を持っていることを確認しようとするたびに、特定のinodeへのハードリンクを含む可能性のあるすべてのメディアをマウントする必要があります。

inodeの寿命は、通常、参照を検索するのではなく参照カウントを維持することによって決定されることを考慮すると、リンクを使用する必要がない場合に互いに接続されたままの2つ以上のファイルシステムを独立して使用できるように状況を整理できます。あります。両方のシステムでfsckを使用せずにシステムブリッジ間。ただし、システムの1つのinode数が邪魔になっている場合は、そのシステムを再利用できるようにする唯一の方法は、参照用に両方のファイルシステムを取得するfsckジョブフォーマットを使用することです。この制限により、2つのリンクされたファイルシステムを独立して使用することが可能になる可能性がありますが、そうすることで利点が制限されすぎて価値がない可能性があります。

答え4

一つインデックスノード数値は、各ファイルシステムのファイルを表すために使用されます。すべてのハードリンクはinode番号に基づいています。ファイルシステム参照リンクここ

関連情報