NTFS 링크

NTFS links

NTFS 파일 시스템은 파일 및 폴더를 리디렉션하는 다양한 방법을 정의합니다. 예를 들어, 파일이 다른 파일 또는 파일의 내용을 가리키도록 합니다.가리키는 대상을 대상이라고 합니다.링크에는 다음 3가지 클래스가 있습니다.

  • 파일이 있는 하드링크는 같은 파일시스템 내에서 같은 MFT 엔트리(inode)를 공유합니다.
  • 연결 지점 - 하드 링크와 유사하지만 폴더에 대해 정의됩니다.로컬 절대 [1][2]경로만 받아들입니다.
  • 심볼릭 링크: 링크 내용이 표시되어야 하는 다른 파일의 경로를 기록합니다.상대 경로를 받아들일 수 있습니다.NTFS 3.1에서 디렉터리 및 UNC 경로에 대한 지원이 추가되었습니다.

모든 NTFS 링크는 애플리케이션에 대해 투과적으로 설계되어 있습니다.즉, 링크에 액세스 하고 있는 애플리케이션이 파일 시스템 드라이버에 의해서 심리스하게 리다이렉트 되어, 특별한 조작은 불필요합니다.유저에게는, 통상의 디렉토리 또는 파일로 표시됩니다.이로 인해 에일리어스 효과도 발생합니다.링크에 쓰기는 기본 링크 파일 또는 MFT 엔트리에 전달됩니다.

심볼릭 링크 및 연결 지점은 가리키는 경로를 포함하여 추가 데이터를 전송해야 하며 NTFS 재분석 지점을 기반으로 합니다.경로 기록 기능을 통해 다른 볼륨의 파일이나 원격 파일에 연결할 수 있습니다.한편, 하드 링크는 MFT 내의 엔트리에 계승할 새로운 파일명을 부여하는 것만으로 작성되기 때문에, 같은 파일 시스템내의 파일로 제한됩니다.

NTFS 심볼 링크는 일반 파일인 윈도우즈 바로 가기 파일과 다릅니다.후자는 모든 파일 시스템(이전 FAT32 등)에 작성할 수 있으며 메타데이터(링크 제거에서 바로 가기를 표시할 때 표시되는 아이콘 등)를 포함할 수 있으며 애플리케이션에 대해 투과적이지 않습니다.

역사

디렉토리 또는 볼륨에 대한 심볼릭 링크(접속 지점 및 마운트 지점)는 Windows 2000과 함께 제공되는 NTFS 3.0과 함께 도입되었습니다.NTFS 3.1 이후로는 모든 종류의 파일 시스템 개체에 대해 심볼릭 링크를 만들 수 있습니다.NTFS 3.1은 Windows XP와 함께 도입되었지만 사용자 모드 응용 프로그램에서 (ntfs.sys를 통해) 기능을 사용할 수 없었습니다.키무라 마사토시의 오픈 소스 등 서드파티 필터 드라이버senabledriver – 단, 사용자 모드에서도 기능을 사용할 수 있도록 설치할 수 있습니다.Windows Vista릴리스 된 ntfs.sys 에서는, 디폴트로 이 기능을 유저 모드 애플리케이션으로 사용할 수 있게 되었습니다.

NTFS 3.1부터는 심볼릭 링크가 파일 또는 원격 SMB 네트워크 경로를 가리킬 수도 있습니다.NTFS 연결 지점은 로컬 드라이브의 절대 경로만 지원하지만 NTFS 심볼 링크는 상대 경로를 사용하여 연결할 수 있습니다.또한 NTFS 심볼릭 링크 구현은 교차 파일 시스템 링크를 완전히 지원합니다.다만, 크로스 호스트 심볼릭 링크를 유효하게 하려면 , 리모트 시스템도 이러한 심볼릭 링크를 서포트할 필요가 있습니다.이 때문에, Windows Vista 이후의 Windows operating system에 대한 서포트가 효과적으로 제한됩니다.

제약사항 및 단점

Windows Vista/Windows 7 의 디폴트 시큐러티 설정에서는, 레벨 업이 아닌 관리자 및 비관리자 모두가 심볼릭 링크를 작성할 수 없습니다.이 동작은 Local Security Policy 관리 콘솔에서 "secpol.msc"를 실행하여 변경할 수 있습니다(다음 항목).보안 설정\로컬 정책\User Rights Assignment\Create Symbolic Links).cmd를 시작하여 해결할 수 있습니다.관리자 권한으로 실행 옵션 또는runas명령어를 입력합니다.Windows 10 Insiders 빌드 14972 이후 Windows "개발자 모드"에서는 관리자 권한 상승이 필요 없게 되어 관리자로서 콘솔을 상승시키지 않고도 심볼링크를 생성할 수 있게 되었습니다.API 레벨에서는SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE플래그가 제공됩니다.[3]

접속할 수 없는 파일

Windows NT기동 프로세스Windows Vista 의 기동 프로세스도 접속 지점을 서포트하고 있지 않기 때문에, 특정의 시스템 폴더를 리다이렉트 할 수 없습니다.

  • \Windows
  • \Windows\System32
  • \Windows\Config

그러나 중요하지 않은 폴더는 리다이렉트할 수 있습니다.

  • \사용자
  • \문서 및 설정
  • \Program 파일
  • \Program 파일(x86)

다른 드라이브를 가리키는 \Users 및 \ProgramData에 대한 접합을 만드는 것은 업데이트 및 Windows [4]Store Apps가 중단되므로 권장하지 않습니다.

다른 위치를 가리키는 \Users, \ProgramData, "\Program Files" 또는 "\Program Files (x86)"의 결합을 작성하면 Windows [5]설치 또는 업그레이드가 중단됩니다.

다른 드라이브를 가리키는 "\Program Files" 또는 "\Program Files (x86)"의 결합을 생성하면 저장소에서 파일을 하드링크하는 Windows의 컴포넌트 기반 서비스가 중단됩니다.\Windows\SxS 를 인스톨 [citation needed]디렉토리에 추가합니다.

사용 예

빌트인 사용

  • Windows Component Store(WinSxS)는 하드 링크를 사용하여 하드 디스크 드라이브에 저장된 다양한 버전의 DLL을 추적합니다.
  • 심볼링크는 윈도우즈 서버 2008에서 \Users\All Users\ → \ProgramData\ 리디렉션(기본 설치)에 있습니다.

프로그램 리다이렉트

소프트웨어의 특정 버전을 포함하는 디렉토리를 가리키는 접속 지점을 설정함으로써 소프트웨어의 다른 버전을 추가하고 원하는 버전을 가리키도록 접속 지점을 리디렉션할 수 있습니다.

디스크 공간 절약

접합의 내용은 디스크 공간을 거의 사용하지 않습니다(원래 디렉토리를 가리키기만 하면 됩니다).큰 디렉토리에 여러 개의 진입점이 필요한 경우 연결점이 그 목적에 적합합니다.접합점은 단순히 원본을 가리킬 뿐이므로 어떤 사본과 혼동해서는 안 됩니다.디렉토리를 개별적으로 수정해야 하는 경우 접합은 디렉토리 또는 파일 내의 개별 복사본을 제공하지 않으므로 사용할 수 없습니다.

마찬가지로 심볼릭 링크와 하드 링크는 개별 파일의 내용을 병합하는 데 유용합니다.

사전 정의된 경로 우회

Windows 를 재인스톨(또는 새로운 버전의 인스톨) 하려면 , C: 드라이브의 내용을 삭제할 필요가 있는 경우가 많기 때문에, 인스톨중에 파티션을 1 개만 삭제할 필요가 있도록 복수의 파티션을 작성하는 것이 편리합니다.그러나 일부 프로그램에서는 다른 드라이브에 설치된 경우에도 사용자가 설치 디렉토리를 선택하거나 일부 파일을 C: 드라이브에 설치하지 않습니다.접속점을 작성하면, 프로그램을 속여서 다른 디렉토리에 인스톨 할 수 있습니다.

이연 대상 무효 위험

다음과 같은 하드링크 방식의 사용에 중대한 위험이 도사리고 있습니다.

  • 하드 링크 작성 등 자신의 부모 폴더를 참조하는 링크를 포함합니다.X:\path\to\parent어느쪽인가를 가리키고 있다.X:\path\또는X:\path\to\, 또는
  • 다음과 같은 볼륨 드라이브 문자를 사용하여 대상을 지정합니다.X:, 인X:\some\path\.

첫 번째 경우 문제는 재귀 경로가 생성된다는 것입니다. 이는 디렉토리 구조에서 무한 재귀가 발생한다는 것을 의미합니다.재진입함으로써 하나 이상의 디렉토리 접합이 존재하면 파일 시스템의 구조가 단순적절한 트리에서 방향 그래프로 변경되지만, 재귀 링크는 그래프 이론의 특성을 비순환에서 순환으로 더욱 복잡하게 만든다.같은 파일이나 디렉토리가 복수의 패스를 개입시켜 검출할 수 있게 되었기 때문에, 재진입 구조나 재귀 구조를 순진하게 통과하는 애플리케이션은, 부정확한 결과나 일관성이 없는 결과를 낳거나, 종료하지 않는 경우가 있습니다.게다가, 재귀적으로 삭제되는 경우, 이러한 프로그램은, 현재 통과하고 있는 디렉토리의 상위를 삭제하려고 할 가능성이 있습니다.

위의 두 가지 조건은 모두 에 확립된 하드링크 시스템에 존재하는 것에 주의해 주십시오.C:를 클릭합니다.예를 들어, 모든 윈도우즈 10 설치는 재귀 경로를 정의합니다.

C:\ProgramData\ApplicationData\C:\ProgramData\ApplicationData\ApplicationData\ApplicationData\C:\ProgramData\ApplicationData\ApplicationData\ApplicationData\ApplicationData\ApplicationData\ApplicationData\ApplicationData\ApplicationData\ApplicationData\C:\ApplicationData\ApplicationData\ApplicationData\ApplicationData\ApplicationData\ApplicationData\ApplicationData\C...

무한해 보이는 이 세트의 추가 경로 이름은 동일한 위치를 참조하는 실제 유효한 Windows 경로입니다.실제로 패스명은 260 문자의 DOS 패스 제한(또는 새로운 32,767 문자 제한)에 의해 제한되지만, 잘라내면 패스 및 파일명이 불완전하거나 무효가 될 수 있습니다.Windows 인스톨의 카피가 같은 컴퓨터(또는 그보다 나쁜 컴퓨터)상의 다른 볼륨에 어카이브 되어 있는 경우는, 어카이브 되고 있는 인스톨로부터 액티브한 폴더가 짜넣어지는 일이 있습니다.예를 들어, 복사 방법에 따라 윈도우즈 드라이브의 백업 복사본입니다.X:\archive\...라고 하는 하드 링크가 포함됩니다.X:\archive\Users\USERNAME\My Documents여전히 폴더를 가리키고 있습니다.C:\Users\USERNAME\Documents\현재 활성 설치에서 사용됩니다.

두 번째 형태의 이연 목표 잘못 참조는 개념적으로는 간단하지만 더 심각한 결과를 초래할 수 있다.볼륨 드라이브 문자 경로 이름을 사용하는 하드 링크가 포함된 볼륨 또는 디렉터리 구조가 복사되거나 다른 볼륨으로 이동되는 경우(또는 볼륨의 드라이브 문자가 다른 수단으로 재할당되는 경우) 이러한 링크는 더 이상 복사된 구조의 해당 대상을 가리키지 않을 수 있습니다.결과는 복사에 사용된 소프트웨어에 따라 달라집니다.일부 프로그램에서는 구조의 일관성을 유지하기 위해 복사에 포함된 하드링크를 완전히 수정하여 인터럽트 할 수 있습니다.또, 다른 프로그램에서는, 무시하거나, 정확하게 복사하거나, 하드링크로 이동하거나, 컨텐츠를 카피하거나 하는 경우도 있습니다.

하드 링크가 새 복사본에서 소스 볼륨의 원래 파일과 폴더를 가리키는 크로스 볼륨 하드 링크가 되도록 정확하게 복사되면 심각한 문제가 발생합니다.(드라이브 문자에 따라) 원래 볼륨의 위치를 가리키는 "아카이브" 폴더의 하드 링크와 같은 의도하지 않은 크로스 볼륨 하드 링크는 발생을 기다리는 재앙입니다.예를 들어 사용되지 않는 백업 볼륨에서 사용되지 않는 아카이브 디렉토리로 추정되는 파일을 삭제하면 현재 활성 사용자 데이터 또는 시스템 파일이 삭제될 수 있습니다.

디렉토리 접속의 타겟 패스를 지정할 때는, 볼륨 드라이브 문자를 포함한 패스가 아닌 볼륨 GUID 패스 [6]구문을 사용하는 것이, 드라이브 문자 위험에 대한 예방책입니다.예를 들어 에일리어스를 작성하는 것을 검토해 주십시오.X:\Some\Other\PathX:\Some\Path\Foo:

X:\Some\Path>linkd Foo X:\Some\Other\Path

위에서 설명한 바와 같이 결과 링크를 포함하는 폴더 구조가 다음 드라이브 문자가 아닌 디스크로 이동되는 경우X:또는 드라이브에서 문자가 변경된 경우X:대상 위치의 데이터 컨텐츠 자체는 우발적인 손상이나 악의적인 남용에 취약합니다.이 링크의 보다 탄력적인 버전에서는 타깃 볼륨을 GUID 식별자 값으로 참조함으로써 이 위험을 부분적으로 완화할 수 있습니다(이 값은 GUID를 실행하여 검출할 수 있습니다).fsutil volume list명령)을 실행합니다.

X:\Some\Path>linkd Foo \\?\Volume{12345678-abcd-1234--abcdefghijkl}\Some\Other\Path

이렇게 하면 드라이브 문자가 다음과 같은 경우에도 접점이 유효하게 유지됩니다.X:어떻게 해서든 변한다.

디렉토리 접속 장애를 회피하는 프로 액티브한 방법에 대해서는, 다음의 명령어를 참조해 주세요.dir /AL /S /B "X:\Some\Path"를 사용하면, 파일 시스템의 변경을 실시하기 전에, 특정의 파일 시스템의 위치를 「수정」하는 모든 하드 링크의 리스트를 신중하게 분석할 수 있습니다.정의상으로는 결과 목록의 모든 링크에는 다음 이름으로 시작하는 경로 이름이 있습니다.X:\Some\Path\이러한 하드 링크 중 하나라도 에 포함되지 않은 타깃을 포함하는 경우X:\Some\Path지정된 범위가 이스케이프되어 지정한 시작 디렉토리가 완전히 인식되지 않습니다.이 경우 지정된 디렉토리에는 다른 물리 볼륨에 상주하는 파일 및 디렉토리가 포함되거나 지정된 디렉토리가 포함되지 않은 부모 트래버설/루트 디렉토리가 포함되므로 각별한 주의가 요구될 수 있습니다.

명령줄 도구

Windows 에는, NTFS 링크를 작성 및 조작할 수 있는 몇개의 툴이 부속되어 있습니다.

  • PowerShell:New-Item빈 파일, 폴더, 접합 및 하드 [7]링크를 생성할 수 있는 윈도우즈 PowerShell의 cmdlet.PowerShell 5.0 이후에서는 심볼릭 [8]링크도 생성할 수 있습니다.Get-Item그리고.Get-ChildItemcmdlet은 파일 시스템 개체를 조회하는 데 사용할 수 있으며, NTFS 링크인 경우 해당 개체에 대한 정보를 찾습니다.Remove-Itemcmdlet은 해당 항목을 제거할 수 있지만 이 cmdlet이 [9]제대로 작동하지 않는 버그 레코드가 있습니다.
  • Windows 명령 프롬프트:Windows Vista 및 Windows Server 2008부터는mklinkinternal 명령어는 접합,[10] 하드링크 및 심볼릭링크를 작성할 수 있습니다.이 명령어는 ReactOS에서도 [11]사용할 수 있습니다.게다가, 고귀한dir명령어는 를 통해 연결 지점을 표시하고 필터링할 수 있습니다./aL전환합니다.[12]마지막으로,rd명령어(일명rmdir)는 접속점을 삭제할 수 있습니다.
  • fsutil.exe:Windows 2000에 도입된 명령줄 유틸리티.그것의.hardlink하위 명령어는 [13]하드 링크를 만들거나 파일에 연관된 하드 링크를 나열할 수 있습니다.또 다른 하위 명령어,reparsepoint재분석 포인트, 접속 포인트, 하드링크 [14]및 심볼릭링크를 구성하는 파일시스템 오브젝트를 쿼리 또는 삭제할 수 있습니다.

또한 다음 유틸리티는 Windows와 함께 제공되지 않더라도 NTFS 링크를 만들 수 있습니다.

  • linkd: Windows 2000Windows Server [15]2003용 Resource Kit 컴포넌트입니다.그것은 [16]연결점을 만들 수 있다.
  • junction: Microsoft의 무료 명령줄 유틸리티로 junction을 [2]작성하거나 삭제할 수 있습니다.
  • PSCX(PowerShell Community Extensions): Microsoft PowerShell [17]Gallery에서 호스팅되는 이 모듈에서는 NTFS 링크를 처리하기 위한 몇 가지 cmdlet(New-Hardlink,[18] New-Junction, Get-ReparsePoint, Remove-ReparsePoint, New-Symlink 등)을 추가합니다.

API

하드 링크를 작성하기 위해 앱은 Windows API의 CreateHardLink() 함수를 사용할 수 있습니다.Windows NT 패밀리의 모든 버전은GetFileInformationByHandle()파일에 관련되어 있는 하드링크 수를 판별합니다.MFT 엔트리에는 최대 1024개의 링크가 관련지어져 있습니다.마찬가지로 CreateSymbolicLink() 함수도 심볼릭링크를 작성할 수 있습니다.접합부는 만드는 것이 더 복잡합니다.수동 재분석 지점 정보 [19]채우기가 필요합니다.코드 예는 libuv[20]있습니다.junction은 디렉토리에 대해서만 정의됩니다.API는 파일을 가리키는 junction을 작성할 때 실패하지 않지만 나중에 사용하면 junction이 정상적으로 해석되지 않습니다.

디렉토리를 가리키고 있는 접속점 및 심볼릭 링크도 다음 방법으로 삭제할 수 있습니다.pNtSetInformationFileLibuv의 실시unlink[21]참조해 주세요.또는, 을 참조해 주세요.그물System.IO.Directory.Delete()방법도 [22]유효합니다.

기타 속성

심볼릭 링크는 존재하지 않는 대상을 가리킬 수 있습니다.이것은 운영체계가 대상이 [23]존재하는지 여부를 확인하지 않기 때문입니다.

제한 사항

심볼릭 링크는 기동시에 동작하지 않기 때문에, 다음과 같이 리다이렉트 할 수 없습니다.

  • 하이버필름시스템
  • \Windows
  • \Windows\system32
  • \Windows\system32\Config

Windows Installer는 심볼 링크를 완전히 지원하지 않습니다.A 리다이렉트된 \Windows\인스톨러를 실행하면, 대부분의 .msi 베이스의 Windows 인스톨러에 에러 2755 및/또는 에러 1632 가 표시되어 에러가 발생합니다.

다만, 다음의 리다이렉트도 가능합니다.

  • \문서 및 설정
  • \Program Data(프로그램데이터
  • \Program 파일
  • \Program 파일(x86)
  • \사용자

다른 드라이브를 가리키는 \Users 및 \ProgramData 심볼릭 링크를 만드는 것은 업데이트 및 Windows Store [4]Apps가 중단되므로 권장하지 않습니다.

다른 위치를 가리키는 \Users, \ProgramData, "\Program Files" 또는 "\Program Files (x86)" 심볼릭 링크를 작성하면 설치 응답이 중단됩니다.Windows [5]의 업그레이드.

다른 드라이브를 가리키는 "\Program Files" 또는 "\Program Files(x86)" 심볼릭 링크를 생성하면 저장소에서 파일을 하드링크하는 Windows의 컴포넌트 기반 서비스가 중단됩니다.\Windows\설치 디렉토리에 WinSxS를 추가합니다.

Windows XP에서의 심볼릭 링크 지원

Windows XP는 이후 릴리스와 동일한 NTFS 형식 버전을 사용하므로 심볼릭 링크 지원을 사용할 수 있습니다.Windows 2000 및 XP에서 NTFS 심볼릭 링크를 사용하는 경우 파일 시스템 [24][25]필터로 설치함으로써 이를 수행하는 타사 드라이버가 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "Hard Links and Junctions". Windows Developer. Microsoft. 31 May 2018.
  2. ^ a b "Junction v1.07". Sysinternals. Microsoft. 4 July 2016.
  3. ^ "Symlinks in Windows 10! - Windows Developer BlogWindows Developer Blog". blogs.windows.com. 2 December 2016.
  4. ^ a b "Relocation of the Users directory and the ProgramData directory to a drive other than the drive that contains the Windows directory". Retrieved 2015-03-12.
  5. ^ a b "You encounter an error when trying to install Windows 8.1 due to redirecting the Users or Program Files folder to another partition". Retrieved 2015-03-12.
  6. ^ "File path formats on Windows systems". docs.microsoft.com.
  7. ^ "New-Item (PowerShell 3.0)". Microsoft Docs. Microsoft. 22 June 2020. If your location is in a FileSystem drive, the following values are allowed: If your location is in a FileSystem drive, the following values are allowed: File[,] Directory[,] Junction[,] HardLink
  8. ^ "New-Item (PowerShell 5.0)". Microsoft Docs. Microsoft. 22 June 2020.
  9. ^ "Fix Remove-Item <symbolic link to directory>". PowerShell repo. Microsoft. 4 March 2016 – via GitHub.
  10. ^ "mklink.c". reactos repo. ReactOS Deutschland e.V. 3 October 2017 – via GitHub.com.
  11. ^ "Dir". Microsoft Docs. Microsoft. 18 April 2012.
  12. ^ "Fsutil hardlink". Microsoft Docs. Microsoft. 18 April 2012.
  13. ^ "Fsutil reparsepoint". Microsoft Docs. Microsoft. 18 April 2012.
  14. ^ "Download Windows Server 2003 Resource Kit Tools". Download Center. 2015-03-10. Archived from the original on 2015-03-10.
  15. ^ "How to create and manipulate NTFS junction points". 2015-03-09. Archived from the original on 2015-03-09.
  16. ^ "Pscx". PowerShell Gallery. Microsoft. 17 January 2018.
  17. ^ Hill, Keith; Grehan, Oisin (17 January 2018). "README.md". pscx repo – via GitHub.
  18. ^ "NTFS Links, Directory Junctions, and Windows Shortcuts". www.flexhex.com. Retrieved 4 October 2019.
  19. ^ "libuv/src/win/fs.c". GitHub. Retrieved 12 December 2019.
  20. ^ "libuv/src/win/fs.c fs__unlink". GitHub. Retrieved 12 December 2019.
  21. ^ "PowerShell Remove Junction". StackOverflow. Retrieved 12 December 2019.
  22. ^ "Programming Considerations (Windows)". msdn.microsoft.com.
  23. ^ Hermann Schinagl (August 23, 2013). "ln - commandline hardlinks - Symbolic links for Windows XP".
  24. ^ "リンク/ジャンクション作成ツール". emk.name.

외부 링크