2009-04-28 7 views
1

내가 Windows에서 하드 링크를 만들 수있는 방법을 찾고 있었고, 난이 페이지 발견 http://technet.microsoft.com/en-us/library/cc788097.aspxfsutil 하드 링크가 작동하지 않습니까?

이 그것을 밖으로 시도하기를, 나는 내 C의 루트에있는 파일 (1.TXT)을 만들어 : 100 개 라인 드라이브

C : \의 1.TXT (2.598 바이트) : 다음과 같은 내용의

test test test test test 

은 그 때 나는 명령 프롬프트를 열고 입력 :

fsutil hardlink create C:\2.txt C:\1.txt 

성공, 2.txt는 (하드 링크에 대한 이해가 간다까지로) 생성하지만 난 볼 갈 때 그것은 크기가 정확히 2.598 바이트를 가지고 그리고 일부 이상한 행동을 발견했다 :

  1. 내가 2를 삭제합니다. txt (하드 링크 된 파일) 1.txt는 삭제되지 않으며 그 반대의 경우도 마찬가지입니다.
  2. 1.txt (원본 파일)를 삭제 한 후에 2.txt를 열면 콘텐츠가 동일합니다.

fsutil hardlink create 명령은 copy 명령과 어떻게 다릅니 까? Windows에서 진정한 하드 링크를 만들려면 어떻게해야합니까?

Windows XP SP 3을 사용하고 있으며 파일 시스템이 NTFS입니다.

답변

5

그게 정확히 일어날 행동입니다. 하드 링크의 작동 방식을 알고 있습니까? 하드 링크는 실제로 정확히 동일한 파일을 참조하는 파일 시스템의 여러 항목입니다. 파일에 대한 하드 링크를 작성하고 파일 인스턴스 중 하나를 수정하면 디스크의 동일한 데이터 블록을 참조하기 때문에 다른 파일이 변경 사항과 함께 표시됩니다.

하드 링크 중 하나를 삭제하면 실제로 해당 파일을 참조하는 파일 시스템 항목 중 하나를 삭제하는 것입니다. 의 모든 하드 링크 (원래 파일 포함)을 삭제해야 파일이 삭제됩니다. 1.txt를 삭제 한 후에도 2.txt는 여전히 존재하며 원래 있던 파일과 동일한 파일을 참조합니다. 이제는 해당 파일을 참조하는 단일 파일 시스템 항목 만 있습니다 (즉, 2.txt). 2.txt 은 해당 파일 인입니다.

+0

고마워요, 제 머리에는 다른 생각이 들었습니다. –

0

실제 링크입니다. 유닉스 (윈도우 변형에 익숙하지 않다)에서 파일은 디스크에있는 데이터 집합이다 (단순하게). 이 파일에 이름을 지정하는 디렉토리 항목 자체입니다.

당신이 첨부 마지막 디렉토리 엔트리가 (그리고 파일이 여전히 프로세스에 의해 열려 있지 않는 하지 파일을 삭제 않는 그들 중 하나 삭제 동일한 기본 파일을 가리키는 두 개의 디렉토리 항목을 가질 때,하지만, 그것은 다른 문제입니다).

+0

언급할만한 점은 파일 엔트리를 지우는 POSIX 함수의 이름이'unlink'라는 것입니다. –

1

fsutil 하드 링크를 사용하면 명령이 복사 명령과 어떻게 다릅니 까? Windows에서 진정한 하드 링크 을 만들려면 어떻게해야합니까?

하드 링크 된 파일을 만든 후 편집하십시오. 변경 사항이 두 파일 모두에 반영되었음을 알 수 있습니다.

매우 큰 파일 (예 : 비디오 또는 디스크 이미지)의 하드 링크를 만들어보십시오.디스크의 사용 가능한 공간이 변경되지 않았거나 새로운 dir 항목을 반영하기 위해 추가 메타 데이터를 디스크에 기록해야하는 경우 몇 바이트 이상 변경되지 않았습니다.

+0

감사합니다. 아주 좋은 예입니다. –

+0

그건 편집자에 달려 있다고 생각합니다. 일부는 이전 파일의 이름을 바꾸고 원래 이름으로 새 파일을 작성하여 링크를 끊습니다. Windows 하드 링크가 유닉스와 완전히 다르지 않은 한 :-) – paxdiablo

+0

실제로 NTFS는 하드 링크가 있음을 알지 못했습니다. (아직 믿을 수는 없습니다) – SingleNegationElimination