web-dev-qa-db-ja.com

NTFSハードリンクとディレクトリジャンクションの違いは何ですか?

タイトルはそれをすべて言います...違いは何ですか?いつ一方を使用し、もう一方をいつ使用しますか?

追加:ジャンクションポイントハードリンク および 記号(ソフト)リンク は、NTFSでは3つの異なるものです。

81
Vilx-

NTFSデータファイルは、すべての属性とともにIDを持つ「iノード」として保存され、ファイル名はiノードを指します。すべてのファイルに1つ以上のハードリンクがあります。一部のツールは、同じiノードを指す追加の名前(ハードリンク)を作成できます。これには、それを指している名前の数のカウンターがあります。数がゼロになると、OSはファイル、つまりiノードを削除します。

LNのような特別なツールは、それらを指すファイル名を使用して、既存のiノードを指す追加のファイル名を作成できます。日付と時刻を含むすべてのファイル属性は、ファイル名ではなくiノードに保存されることに注意してください。

(追加)ハードリンクは、異なる名前で同じデータを指すようにしたり、読み書きしたりする場合に便利です。彼らはスペースとオーバーヘッドを節約します。ただし、それらは、異なる名前が異なるデータを指すと仮定するプログラムを破壊します。たとえば、重複ファイルへの参照を1つのファイルへのハードリンクに置き換えると、バックアップが削除されます。 Windows OSは、異なる名前が異なるビットのセットを指すと想定する1つのプログラムです。

ハードリンクは同じ物理ボリュームと論理ボリューム上にある必要があります。

次の場合に役立ちます。

  • windowsは256文字程度しかサポートしていないため、パスの長さを減らします。

  • 重複するデータファイルのストレージスペースを削減します。たとえば、複数の完全なディレクトリツリーを持つパーティションの複数のバックアップを作成できますが、前回のバックアップ以降に変更されていないファイルのハードリンクがあります。

ジャンクションポイントは厄介で、再解析ポイント(わかりません)を使用します。異なる物理ボリュームまたは論理ボリュームを指すことができますが、同じコンピューター上にある必要があります。それらは明らかにディレクトリのシンボリックリンクのように使用でき、同じ宛先の2番目の名前を許可しますが、単一のボリュームだけでなく、単一のコンピューターに制限されます。

パスの長さを短くしたり、ハードコードされたディレクトリ名を使用していくつかのプログラムを簡単に操作したりするのに役立ちます。

同じ警告も!多くのプログラムは、異なる名前=異なるファイルを想定しています。

そして、シンボリックリンク(ネットワーク間を移動できます)、ショートカット、PIFなどがあります。

Microsoft自身からの情報もあります

基本的に、彼らは同じボリューム(ディスクドライブ文字)内のファイルにのみハードリンクを使用し、同じコンピューター上のディレクトリ(異なるローカルボリュームにまたがることができる)にのみジャンクションポイントを使用すると述べています。

34
tOM Trottier

クイック定義:

シンボリックリンク:同じまたは異なるボリューム上のファイルまたはディレクトリ(ドライブ文字)、またはリモートファイルまたはディレクトリ(さらにUNCを使用)へのリンクそのパス)。

ハードリンク:同じボリューム(ドライブ文字)上のファイルへのリンクのみ。すべてのファイル(ファイルのデータ)には、少なくとも1つのハードリンク(ファイル名)があります。すべてのハードリンクを削除すると、ファイルが効果的に削除されます。

ジャンクション:同じまたは異なるボリューム(ドライブ文字)上のディレクトリへのリンクですが、リモートディレクトリへのリンクではありません。


詳細:

Windows Vista/7でNTFSボリュームを使用している場合、コマンドラインツールを使用してMKLINK3つすべてを作成できます。リンクの種類:

MKLINK [[/D] | [/H] | [/J]] Link Target

        /D      Creates a directory symbolic link.  Default is 
                a file symbolic link.

        /H      Creates a hard link instead of a symbolic link.

        /J      Creates a Directory Junction.

        Link    specifies the new symbolic link name.

        Target  specifies the path (relative or absolute) that 
                the new link refers to.

シンボリックリンク:シンボリックリンクは、別のファイルシステムオブジェクトを指すファイルシステムオブジェクトです(例:ファイル/ディレクトリ)。

  • MKLINKを使用して、シンボリックリンクを作成できます。 /Dパラメータを使用すると、ディレクトリのシンボリックリンクが作成されます。 MKLINKは、ターゲットがファイルかディレクトリか、またはターゲットが存在するかどうかをチェックしません!つまり、ファイルへのディレクトリシンボリックリンクや、存在しないファイル/ディレクトリへのシンボリックリンクなどの無効なリンクが作成される可能性があります。

  • シンボリックリンクは、絶対リンクでも相対リンクでもかまいません。絶対リンクは、パス名の各部分を指定するリンクです。相対リンクは、相対リンク指定子が指定されたパスのどこにあるかに対して決定されます。

  • 絶対シンボリックリンクは、同じまたは異なるボリューム上のファイル/ディレクトリ、およびUNCパスを使用したリモートファイルまたはディレクトリを指すことができます。ただし、相対シンボリックリンクは1つのボリュームに制限されています。

  • シンボリックリンクを作成するには昇格した権限が必要ですが、一度作成した昇格した権限はリンクを削除する必要はありません。

ハードリンク:ハードリンクは、複数のパスが単一のファイルを参照するファイルのファイルシステム表現です。

  • MKLINKを指定すると、(/Hパラメータを使用して)ファイル(ディレクトリではない)のみのハードリンクを作成できます。ハードリンクは、同じボリューム内のファイルからのみ作成できます。

  • 複数のハードリンクを持つファイルは、すべてのハードリンクが削除された場合、つまりリンクカウントがゼロになった場合にのみ実際に削除されます。したがって、実際に作成するすべてのファイルには、MKLINKを使用するかどうかに関係なく、少なくとも1つのハードリンクがあります。

  • そのファイルへの変更は、それを参照するハードリンクを介してアクセスするアプリケーションに即座に表示されます。ただし、ディレクトリエントリのサイズと属性情報は、変更が行われたリンクに対してのみ更新されます。

  • ファイルの属性はそのファイルへのすべてのハードリンクに反映され、そのファイルの属性への変更はすべてのハードリンクに反映されることに注意してください。たとえば、ハードリンクの読み取り専用属性の設定を解除して、その特定のハードリンクを削除し、実際のファイルへのハードリンクが複数ある場合、ファイルの読み取り専用属性を再設定する必要があります。残りのハードリンクの1つから、ファイルと残りのすべてのハードリンクを読み取り専用の状態に戻します。

Junctions:ジャンクション(ソフトリンクとも呼ばれます)は、ハードリンクとは異なり、参照するストレージオブジェクトは個別のディレクトリであり、ジャンクションはリンクできます。同じコンピューター上の異なるローカルボリュームにあるディレクトリ。それ以外の場合、ジャンクションはハードリンクと同じように動作します。ジャンクションは再解析ポイントを通じて実装されます。

  • MKLINKは、(/Jパラメータを使用して)ディレクトリ(およびファイルのジャンクションの作成を許可しますが、これはおそらく無効なリンクと見なされます)。

  • ジャンクションは、ディレクトリへのシンボリックリンクに相当するハードリンクと考えることができます。ジャンクションリンクはリモートディレクトリに作成できませんが、同じ/異なるボリューム上のディレクトリに作成できます。


参照:

[1]ハードリンクとジャンクション: https://msdn.Microsoft.com/en-us/library/windows/desktop/aa365006%28v=vs.85%29.aspx

[2]シンボリックリンクの作成: https://msdn.Microsoft.com/en-us/library/windows/desktop/aa363878%28v=vs.85%29.aspx

[3] "ディレクトリジャンクション" vs "ディレクトリシンボリックリンク"?

54
moo

ハードリンクはファイルの単なる別名です。 A.txtという名前のファイルがあり、リンクL.txtがある場合、A.txtを削除しても、L.txtを介してそのデータにアクセスできます。両方が削除された場合のみ、ファイルはなくなります。

一方、いわゆるソフトリンク(フォルダーの場合はジャンクション、ファイルの場合はシンボリックリンク)があります。その場合、A.txtを削除すると、ファイルは本当になくなります。 L.txtを削除しても、ファイルには何の影響もありません。

ハードリンクは元のファイルと同じパーティションでのみ使用でき、ソフトリンクはパーティション間で使用できます。

追伸NTFSに関する限り、ファイルとフォルダはほとんど交換可能です。

10
Josip Medved

ハードリンク:同じボリュームでのみ機能します。
ジャンクション:ローカルボリューム
記号:ローカルボリュームまたはUNCパス

| Link Type     | Same Volume | Different Volume | UNC Path |
|---------------|-------------|------------------|----------|
| Hard link     | Yes         | No               | No       |
| Junction      | Yes         | Yes              | No       |
| Symbolic link | Yes         | Yes              | Yes      |

ボーナスチャッター

Windowsは、AppCompatの目的でジャンクションとシンボリックリンクを作成します。以下のことを考える、不十分に書かれたアプリケーションのために

  • C:\ Users\All Users
  • C:\ Users\Default User

有効です。

C:\Users>dir /as

 Directory of C:\Users

04/11/2018  07:45 PM    <SYMLINKD>     All Users [C:\ProgramData]
04/11/2018  07:45 PM    <JUNCTION>     Default User [C:\Users\Default]

同じことがユーザーのプロファイルフォルダーにも当てはまります。WindowsXP時代のフォルダーが今日も存在することを期待するアプリケーションの場合:

| Folder           | Type       | Target                                                           |
|------------------|------------|------------------------------------------------------------------|    | Application Data | <JUNCTION> | C:\Users\Ian\AppData\Roaming                                     |
| Cookies          | <JUNCTION> | C:\Users\Ian\AppData\Local\Microsoft\Windows\INetCookies         |
| Local Settings   | <JUNCTION> | C:\Users\Ian\AppData\Local                                       |
| My Documents     | <JUNCTION> | C:\Users\Ian\Documents                                           |
| NetHood          | <JUNCTION> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\Network Shortcuts |
| PrintHood        | <JUNCTION> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\Printer Shortcuts |
| Recent           | <JUNCTION> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\Recent            |
| SendTo           | <JUNCTION> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\SendTo            |
| Start Menu       | <JUNCTION> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\Start Menu        |
| Templates        | <JUNCTION> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\Templates         |
0
Ian Boyd