NTFS 파일 시스템에서 ls 및 stat에 의해 보고된 하드 링크 수에 하드 링크뿐만 아니라 다른 링크 유형도 포함됩니까?

NTFS 파일 시스템에서 ls 및 stat에 의해 보고된 하드 링크 수에 하드 링크뿐만 아니라 다른 링크 유형도 포함됩니까?

NTFS는 다른 링크 유형을 계산하기 위해 하드 링크와 동일한 카운터를 사용합니까? 아니면 NTFS 파일 시스템의 하드 링크 수를 계산할 때 Linux에 다른 링크 유형이 포함됩니까?

Windows 및 Linux(fedora)에서 사용하는 외장 하드 드라이브에 NTFS 파일 시스템이 있습니다.

일부 파일의 하드 링크 개수는 2입니다. "ls" 및 "stat"의 출력 예:

$ ls -li | grep samplefile.jpg 
1002 -rwxrwxrwx. 2 charlie charlie     29496 Apr 18  2019 samplefile.jpg
$ stat samplefile.jpg 
  File: samplefile.jpg
  Size: 29496       Blocks: 64         IO Block: 4096   regular file
Device: 811h/2065d  Inode: 1002        Links: 2

그러나 파일 시스템에는 파일 시스템 루트에서 시작된 "ls" 및 "find"에서 알 수 있듯이 동일한 inode 번호(NTFS의 파일 ID) 또는 동일한 길이를 참조하는 다른 디렉터리 항목이 포함되어 있지 않습니다.

$ ls -Rli . | grep '1002\|29496'
1002 -rwxrwxrwx. 2 charlie charlie     29496 Apr 18  2019 samplefile.jpg
$ find . -samefile  path-to-file/samplefile.jpg 
./path-to-file/samplefile.jpg

내가 아는 한, Canon의 DPP4 소프트웨어(Digital Photo Professional)는 파일을 수정한 다음 save as하드 링크 개수 = 2인 파일을 생성합니다 export. 수정된 파일을 동일한 이름으로 저장해도 (save)하드 링크 수가 증가하지 않습니다. 따라서 DPP4는 원본 파일에 대한 참조를 저장하는 반면 NTFS(또는 Linux)는 해당 참조를 하드 링크로 간주합니다. 그러나 이것이 하드 링크 수와 어떤 관련이 있는지, DPP가 사용하는 NTFS 메커니즘이 무엇인지, 또는 하드 링크 수를 계산할 때 Linux(퓨즈)에 다른 링크 유형이 포함되어 있는지 또는 내가 잘못된 트리를 찾고 있는지 여부를 이해하지 못합니다.

Q: Windows에서든 Linux에서든 Samplefile.jpg를 삭제하면 사용 횟수가 0이 아니기 때문에 파일의 데이터가 삭제되지 않나요? 답변: Linux에서는 파일 데이터가 올바르게 삭제됩니다. (Windows에 대해서는 잘 모릅니다.) 증거: Linux에서 디렉토리 항목을 삭제 rm filename하고 삭제된 파일의 크기를 줄이기 위해 공간을 사용했습니다.

참고 자료: 아래 질문에서 대답은 ls -l출력의 하드 링크 필드의 의미를 설명합니다. 항목 유형에 따라 여러 가지 의미가 있지만 NTFS를 명시적으로 대상으로 하는 대답은 없다는 점을 지적합니다.

ls 출력 필드는 무엇을 의미합니까?

이것은 Microsoft NTFS 설명서입니다. 오래되었지만 기본 사항은 여전히 ​​유지되어야 합니다.

NTFS 파일 시스템

답변1

역사적으로 지원되는 NTFS 파일 시스템8.3 파일 이름.

이 기능이 활성화되면 Windows에서 파일을 생성하는 과정은 다음과 같습니다.

  • 파일 이름이 8.3 패턴을 따르는 경우 파일 이름은 하나만 있습니다.
  • 그렇지 않은 경우(귀하의 것과 같은 samplefile.jpg) 추가 "숨겨진" 8.3 이름(귀하의 것과 같은)을 얻고 SAMPLE~1.JPG실제로는 하드 링크입니다.

Windows와 Linux에서 두 이름으로 파일을 참조할 수 있지만 8.3 이름은 목록에 숨겨져 있습니다. 따라서 ls표시되지 않았지만 SAMPLE~1.JPG구체적으로 ls SAMPLE~1.JPG표시되었습니다.

이것이 Linux가 하드 링크 수를 2로 표시하는 이유입니다. 이름을 지정하면 sample.jpg1이 표시됩니다.

흥미롭게도 Linux에서 이 NTFS에 긴 이름의 파일을 생성하면 8.3 이름을 얻지 못합니다. Windows에서는 여전히 긴 이름으로 표시됩니다.

마지막으로 모든 NTFS 시스템이 이 기능을 활성화하는 것은 아니며 일부 사용자는 Windows만 사용하더라도 이 기능을 비활성화하는 것을 선호합니다.

관련 정보