디렉토리에 하드 링크하면 콘텐츠가 각 파일에 하드 링크된 것처럼 "보존"됩니까?

디렉토리에 하드 링크하면 콘텐츠가 각 파일에 하드 링크된 것처럼 "보존"됩니까?

인터넷에서 파일이 원래 위치에서 삭제되더라도 파일을 백업으로 디스크에 강제로 유지하기 위해 하드 링크를 사용하는 것에 대해 이야기하는 사람들을 본 적이 있습니다.

이것이 디렉토리에도 적용됩니까? 그 이유는 무엇?

ext4 파일 시스템을 사용한다고 가정하면(중요하다면) 다른(UNIX/inode 기반) 파일 시스템(특히 btrfs)에 대한 답변에도 관심이 있습니다.

답변1

이것은 작동하지 않습니다.

하드 링크는 파일의 내용을 유지하지 않고 해당 내용에 대한 포인터만 유지합니다. 따라서 파일의 경우 파일 수정 사항이 유지되지 않으며 디렉터리의 경우 디렉터리 내용에 대한 변경 사항도 유지되지 않습니다. (아래) 각 파일이 개별적으로 삭제되기 때문입니다. 디렉토리를 하드링크할 수 있더라도 나중에는 여전히 비어 있습니다.

첫째, 디렉토리는 일반적으로 하드 링크를 허용하지 않습니다. 디렉토리에 대한 심볼릭 링크에는 이미 문제가 있으며 무한 심볼릭 링크 루프가 너무 멀리 진행되는 것을 방지하는 트릭이 있습니다. 적어도 심볼릭 링크의 경우 식별하기 쉽고 간단하게 무시되며 디렉터리 트리를 순회하는 대부분의 프로그램(예: find)은 기본적으로 심볼릭 링크를 완전히 무시합니다(절대로 따르지 않음).

하드 링크된 디렉토리는 이미 방문한 디렉토리를 알 수 없기 때문에 감지하고 추적하기가 더 어렵습니다. 따라서 각 디렉토리가 이미 방문한 디렉토리 중 하나인지 확인해야 합니다. 대부분의 프로그램은 관례에 따라 이것이 애초에 존재하지 않을 것이라고 예상하기 때문에 이 작업을 수행하지 않습니다.

어떤 이유로 인해 여전히 디렉토리를 하드 링크해야 하는 경우 매우 유사한 작업을 수행하는 것이 있습니다. 즉, mount --bind olddir newdir마운트가 한 위치에 고정되어 있지 않기 때문에 바인딩 마운트에는 무한 구조가 없는 등의 몇 가지 단점이 없습니다. 반복하십시오. 대신에 다른 하위 마운트가 있습니다(다른 하위 마운트도 트리에 표시되지 않음). 이는 다른 설치로 인해 숨겨진 파일을 찾고 있는 경우 유용한 기능입니다.

두 경우 모두 항상 실제 사본이 필요하므로 콘텐츠가 보존되지 않습니다.

관련 정보