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


79

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

追加:ジャンクションポイントハードリンク、およびシンボリック(ソフト)リンクは、NTFSでは3つの別個のものであることに注意してください。


2
Microsoftのドキュメントによると、3つの異なるカテゴリがあります。ハードリンク:msdn.microsoft.com/en-us/library/aa365006%28VS.85%29.aspx ; ジャンクション(ソフトリンク):msdn.microsoft.com/en-us/library/aa365006%28VS.85%29.aspx ; シンボリックリンク:msdn.microsoft.com/en-us/library/aa363878%28VS.85%29.aspx
ヨシップMedved

回答:


33

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

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

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

ハードリンクは同じ物理ボリュームと論理ボリューム上になければなりません。

それらは次の場合に役立ちます。

  • Windowsは256文字程度をサポートしているだけなので、パスの長さを減らします。

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

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

パスの長さを短くしたり、ディレクトリ名がハードコードされている複数のプログラムでの作業を簡素化するのに役立ちます。

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

そして、シンボリックリンク(ネットワークを介して移動できます)、ショートカット、PIF、および.....があります。

また、マイクロソフト自体からのいくつかの情報

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


1
シンボリックリンクはハードディスク(NTFS)レベルで動作しますか、それともWindowsオペレーティングシステムレベルの概念で動作しますか?
IsmailS

48

クイック定義:

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

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

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


詳細:

Windows Vista / 7でNTFSボリュームを使用していると仮定すると、コマンドラインツール MKLINK を使用して3種類すべてのリンクを作成できます。

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パスを使用するリモートファイルまたはディレクトリを指すことができます。ただし、相対シンボリックリンクは単一のボリュームに制限されます。

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

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

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

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

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

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

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

  • 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] 「ディレクトリジャンクション」と「ディレクトリシンボリックリンク」


9

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

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

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

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


3
申し訳ありませんが、ジャンクションとソフトリンクはNTFSでは同じものではありません。:(
Vilx- 09年

2
msdn.microsoft.com/en-us/library/aa365006%28VS.85%29.aspx引用:「ジャンクション(ソフトリンクとも呼ばれます)」
Josip Medved

3
ただし、ジャンクション(別名ソフトリンク)とシンボリックリンクにはさらに区別がありますが、ここでは詳しく説明しません。興味のある方は、msdn.microsoft.com / en- us / library / aa365006%28VS.85%29.aspxおよびmsdn.microsoft.com/en-us/library/aa363878%28VSの Windowsドキュメントで詳細を確認できます。 85%29.aspx
ヨシップMedved

1
Windows Vista以降、NTFSジャンクション(ディレクトリのみを指すことができます)とUnixスタイルのシンボリックリンク(文字通り何でも指すことができます)の両方があります。
grawity

0

ハードリンク:同じボリュームでのみ機能します。
ジャンクション:ローカルボリューム
シンボリック:ローカルボリュームまたは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         |

2
また、英語以外のWindowsインストールでは、さらに多くのシンボリックリンク/ジャンクションを取得するため、さらに多くのシンボリックリンク/ジャンクションを取得すると、XPまでのWindowsには実際にローカルディレクトリ名があり、他の言語用に作成されたスクリプトやチュートリアルを簡単に台無しにする可能性があります。Vistaはそれを殺し、代わりにローカライズされたDISPLAY名を使用するため、実際のパスはすべての言語で同じですが、ローカライズされたウィンドウには英語よりも多くのリンクがあります
My1

-1

プログラムで回答するには:

ハードリンク:shared_ptr <>。常に1つ存在します。

ソフトリンク:weak_ptr <>。別のハードリンクが存在する場合にのみ有効です。


それは簡単です。:)質問は、ハードリンクとジャンクションについてでした。;)
Vilx- 16
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.