NTFS 하드 링크와 디렉토리 정션의 차이점은 무엇입니까?


79

제목에 모든 내용이 나와 있습니다 ... 차이점은 무엇입니까? 언제 하나를 사용하고 다른 하나를 언제 사용합니까?

추가 : 참고 연결 지점 , 하드 링크심볼릭 (소프트) 링크 NTFS에 별도의 세 가지가됩니다.


2
Microsoft 설명서에 따르면 다음과 같은 세 가지 범주가 있습니다. 하드 링크 : 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 .
Josip Medved

답변:


33

NTFS 데이터 파일은 모든 속성과 함께 ID가있는 "inode"로 저장되며 파일 이름은 inode를 가리 킵니다. 모든 파일에는 하나 이상의 하드 링크가 있습니다. 일부 도구는 동일한 이름의 아이 노드를 가리키는 추가 이름 (하드 링크)을 만들 수 있으며,이 이름에는 해당 이름을 가리키는 카운터가 있습니다. 숫자가 0이되면 OS는 파일 inode를 삭제합니다.

LN과 같은 특수 도구는 파일 이름을 사용하여 기존 inode를 가리키는 추가 파일 이름을 만들 수 있습니다. 날짜 및 시간을 포함한 모든 파일 속성은 파일 이름이 아닌 inode와 함께 저장됩니다.

(추가) 하드 링크는 다른 이름이 동일한 데이터, 읽기 또는 쓰기를 가리 키도록 할 때 유용합니다. 공간과 오버 헤드를 줄입니다. 그러나 서로 다른 이름을 가진 것으로 가정하는 프로그램은 서로 다른 데이터를 가리 킵니다. 예를 들어, 단일 파일에 대한 하드 링크로 중복 파일에 대한 참조를 바꾸면 모든 백업을 제거한 것입니다! Windows OS는 다른 이름이 다른 비트 세트를 가리키는 것으로 가정하는 하나의 프로그램입니다.

하드 링크는 동일한 물리적 및 논리적 볼륨에 있어야합니다.

그들은 다음에 유용합니다.

  • Windows는 256 자 정도만 지원하므로 경로 길이를 줄입니다.

  • 중복 데이터 파일의 저장 공간 감소 – 예를 들어, 완전한 디렉토리 트리가 여러 개이지만 이전 백업 이후 변경되지 않은 파일에 대한 하드 링크가있는 파티션의 여러 백업이있을 수 있습니다.

정션 포인트는 더 지저분하고 재분석 포인트를 사용합니다. 서로 다른 물리적 또는 논리적 볼륨을 가리킬 수 있지만 동일한 컴퓨터에 있어야합니다. 그것들은 디렉토리의 심볼릭 링크처럼 사용될 수 있으므로 동일한 대상에 대한 두 번째 이름을 허용하지만 단일 볼륨이 아닌 단일 컴퓨터로 제한됩니다.

경로 길이를 줄이거 나 하드 코드 된 디렉토리 이름을 가진 여러 프로그램으로 작업을 단순화하는 데 유용합니다.

같은 경고도! 많은 프로그램이 다른 이름 = 다른 파일을 가정합니다.

그리고 심볼릭 링크 (네트워크를 통과 할 수 있음), 바로 가기 및 PIF 및 .....

또한 Microsoft 자체의 일부 정보 :

기본적으로 그들은 동일한 볼륨 (디스크 드라이브 문자) 내의 파일에 대해서만 하드 링크를 사용하고 동일한 컴퓨터의 디렉토리에 대해서만 접합점을 사용하려고합니다 (다른 로컬 볼륨에 걸쳐있을 수 있음).


1
기호 링크가 하드 디스크 (NTFS) 레벨에서 작동합니까 아니면 Windows 운영 체제 레벨 개념에서 작동합니까?
IsmailS

48

빠른 정의 :

기호 링크 : 동일하거나 다른 볼륨 (드라이브 문자)의 파일 또는 디렉토리 또는 원격 파일 또는 디렉토리 (경로에 UNC 사용)에 대한 링크입니다.

하드 링크 : 동일한 볼륨 (드라이브 문자)의 파일에 대한 링크 만 해당합니다. 모든 파일 (파일의 데이터)에는 적어도 하나의 하드 링크 (파일 이름)가 있습니다. 모든 하드 링크를 삭제하면 파일이 효과적으로 삭제됩니다.

접합 : 동일하거나 다른 볼륨 (드라이브 문자)의 디렉토리에 대한 링크이지만 원격 디렉토리에는 없습니다.


세부:

Windows Vista / 7에서 NTFS 볼륨을 사용한다고 가정하면 명령 줄 도구 MKLINK 를 사용하여 세 가지 유형의 링크를 모두 만들 수 있습니다.

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심볼릭 링크를 만드는 데 사용할 수 있습니다. 은 Using /D매개 변수를하는 것은 디렉토리에 심볼릭 링크를 만듭니다. MKLINK는 대상이 파일 또는 디렉토리인지 또는 대상이 존재하는지 확인하지 않습니다! 즉, 파일에 대한 디렉토리 기호 링크 또는 존재하지 않는 파일 / 디렉토리에 대한 기호 링크와 같은 유효하지 않은 링크를 잠재적으로 작성할 수 있습니다.

  • 심볼릭 링크는 절대 또는 상대 링크 일 수 있습니다. 절대 링크는 경로 이름의 각 부분을 지정하는 링크이며 상대 링크는 상대 링크 지정자가 지정된 경로에있는 위치를 기준으로 결정됩니다.

  • 절대 기호 링크는 UNC 경로를 사용하여 동일하거나 다른 볼륨의 파일 / 디렉토리뿐만 아니라 원격 파일 또는 디렉토리를 가리킬 수 있습니다. 그러나 상대 심볼릭 링크는 단일 볼륨으로 제한됩니다.

  • 한 번 생성 된 높은 권한은 링크를 삭제하는 데 필요하지 않지만 심볼릭 링크를 생성하려면 높은 권한이 필요합니다.

하드 링크 : 하드 링크는 둘 이상의 경로가 단일 파일을 참조하는 파일의 파일 시스템 표현입니다.

  • MKLINK/H(디렉토리가 아닌) 파일 만 하드 링크 ( 매개 변수 사용) 를 만들 수 있습니다. 하드 링크는 동일한 볼륨에있는 파일로만 만들 수 있습니다.

  • 여러 개의 하드 링크가있는 파일은 모든 하드 링크가 삭제 된 경우에만 실제로 삭제됩니다. 즉, 링크 수가 0에 도달합니다. 따라서 실제로 만드는 모든 파일에는 사용 여부에 관계없이 하나 이상의 하드 링크가 있습니다 MKLINK.

  • 해당 파일의 모든 변경 사항은 해당 파일을 참조하는 하드 링크를 통해 파일에 액세스하는 응용 프로그램에 즉시 표시됩니다. 그러나 디렉토리 항목 크기 및 속성 정보는 변경이 이루어진 링크에 대해서만 업데이트됩니다.

  • 파일의 속성은 해당 파일에 대한 모든 하드 링크에 반영되며 해당 파일의 속성에 대한 변경 사항은 모든 하드 링크에 전파됩니다. 예를 들어 하드 링크에서 읽기 전용 속성을 설정 해제하여 특정 하드 링크를 삭제하고 실제 파일에 대한 여러 하드 링크가있는 경우 파일에서 읽기 전용 속성을 다시 설정해야합니다. 나머지 하드 링크 중 하나에서 파일 및 나머지 하드 링크를 모두 읽기 전용 상태로 되돌립니다.

정션 : 정션 (소프트 링크라고도 함)은 참조하는 스토리지 오브젝트가 별도의 디렉토리이며, 정션이 동일한 컴퓨터의 다른 로컬 볼륨에있는 디렉토리를 링크 할 수 있다는 점에서 하드 링크와 다릅니다. 그렇지 않으면 접점은 하드 링크와 동일하게 작동합니다. 정션은 재분석 지점을 통해 구현됩니다.

  • 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-

2
msdn.microsoft.com/en-us/library/aa365006%28VS.85%29.aspx 인용구 : "A 접합 (또한 소프트 링크라고도 함)"
요시프하기 Medved

3
그러나 정션 (일명 소프트 링크)과 심볼릭 링크는 더 구분되지만 여기서는 자세히 다루지 않았습니다. 자세한 내용은 msdn.microsoft.com/en-us/library/aa365006%28VS.85%29.aspxmsdn.microsoft.com/en-us/library/aa363878%28VS의 Windows 설명서를 참조 하십시오. 85 % 29.aspx .
Josip Medved 12

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 \ 모든 사용자
  • C : \ Users \ 기본 사용자

유효합니다.

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]

오늘날 Windows XP 시대 폴더가 여전히 존재할 것으로 예상되는 응용 프로그램의 경우 사용자의 프로필 폴더에서도 마찬가지입니다.

| 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         |

-1

프로그래밍 방식으로 답변하려면 :

하드 링크 : shared_ptr <>. 항상 존재합니다.

소프트 링크 : weak_ptr <>. 다른 하드 링크가 존재하는 경우에만 유효합니다.


쉬운 일입니다. :) 문제는 하드 링크와 정션에 관한 것입니다. ;)
Vilx-
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.