좋아, 나는 이것이 Linux에 관한 비교적 초보자적인 질문이라는 것을 알고 있지만 하드 링크와 관련된 어떤 경우에도 기존 파일에 대한 하드 링크를 만든 다음 원본 파일을 삭제하면 데이터는 여전히 새 파일 아래에 저장됩니다. ?
그렇다면 이 경우 두 번째 파일을 생성하면 실제로 하드 드라이브에서 사용되는 공간이 늘어나나요? file1 = 원본 file2 = file1에 대한 하드 링크가 있다고 가정합니다.
file2를 인스턴스화하여 생성하면 디스크에서 사용되는 공간이 늘어납니다. 즉, 이제 거의 동일한 2개의 파일이 있기 때문에 사용되는 공간이 두 배로 늘어납니다. 분명히 두 파일이 동일한 inode를 공유하고 file2에는 저장할 약간의 공간이 필요하다는 것을 알고 있습니다. 메타데이터)?
그러면 파일을 삭제하면 inode가 해제될 때까지 디스크 공간은 실제로 복구되지 않습니다. 그렇죠?
초보적인 질문을 해서 죄송합니다. 명확히 해야 할 것이 있습니다.
답변1
inode가 동일하므로 file1과 file2는 동일한 데이터(따라서 동일한 메타데이터)를 참조하므로 데이터 복사본이 필요하지 않습니다.
참조된 inode는 file1과 file2가 모두 삭제될 때까지 해제되지 않습니다.
한 가지 더 분명한 점은 을 생성하고 에 file1
하드링크 한 다음 어떤 파일이 원본인지 알려달라고 요청하면 해당 작업을 안정적으로 수행할 수 없다는 것입니다.file2
file1
간단히 말해서, 하드 링크를 생성하면 dir_entry
원본과 동일한 데이터의 두 번째 복사본이 생성됩니다. 하드 링크가 차지하는 추가 공간은 해당 크기입니다.dir_entry
답변2
두 링크(이름)는 모두 동일한 파일(색인 노드)을 가리킵니다. 그들은 공간을 두 배로 차지하지 않습니다.
데이터(파일/inode)는 마지막 링크가 제거되고 파일을 닫기 전에 파일을 열었을 수 있는 모든 프로세스가 파일을 닫을 때까지 해제되지 않습니다.
답변3
하드 링크는 파일 이름 별칭일 뿐입니다. 즉, file2와 file1은 동일한 디스크 inode를 가리킵니다.
하드 링크를 생성하면 디스크 공간이 늘어나지만 그 양은 실제 데이터에 따라 달라집니다. 파일이 "a"와 같은 바이트만 저장하는 경우 파일 이름은 더 많은 디스크 공간을 차지합니다. 그러나 일반적으로 파일 이름 문자열은 파일의 데이터보다 훨씬 짧습니다. 따라서 하드 링크 디스크 공간은 무시할 수 있습니다.