하드 링크가 동일한 파일 시스템 내에서만 유효한 이유는 무엇입니까? 사항은 현재 파일

Mark Bates 의 명령 줄 에서이 소개를 읽고 있습니다.

첫 번째 장에서 그는 하드 링크가 파일 시스템으로 확장 될 수 없다고 언급했습니다.

하드 링크에서주의해야 할 중요한 사항은 현재 파일 시스템에서만 작동한다는 것입니다. 다른 파일 시스템에서 파일에 대한 하드 링크를 작성할 수 없습니다. 그렇게하려면 심볼릭 링크, 섹션 1.4.3을 사용해야합니다.

하나의 파일 시스템 만 알고 있습니다. 루트 ( /) 에서 시작하는 것 입니다. 하드 링크가 파일 시스템에 걸쳐있을 수 없다는이 말은 이해가되지 않습니다.

유닉스 파일 시스템에 관한 Wikipedia 기사 는 도움이되지 않습니다.



답변

바라건대 당신에게 적합한 방식으로 이것에 대답 할 수 있기를 바랍니다. Linux의 파일 시스템은 일반적으로 파일을 저장하는 다양한 방법 중 하나로 포맷 된 파티션으로 구성됩니다 (사랑 선택!). 시스템 파일 또는 개인 파일은 모두 파일 시스템에 저장되어 있어야합니다. 이 부분은 이해하는 것 같습니다.

그러나 하드 드라이브를 분할하여 두 개 이상의 파티션을 갖거나 (Apple Pie를 여러 조각으로 잘라 생각) 추가 하드 드라이브 (아마도 USB 스틱)를 추가하면 어떻게됩니까? 논쟁을 위해서, 그들 모두 파일 시스템을 가지고 있습니다.

컴퓨터의 파일을 보면 파티션의 파일 시스템에있는 데이터가 시각적으로 나타납니다. 각 파일 이름은 아이 노드 (inode)라는 이름에 해당합니다. 즉, 데이터가 실제로 존재하는 곳입니다. 하드 링크를 사용하면 동일한 inode를 가리키는 여러 “파일 이름”(더 나은 설명이 없음)을 가질 수 있습니다. 하드 링크가 동일한 파일 시스템에있는 경우에만 작동합니다. 대신 심볼릭 링크는 “파일 이름”을 가리키고 데이터가 들어있는 inode에 링크됩니다. 내 조잡한 작품을 용서하지만 희망이 더 나은 설명합니다.

image.jpg             image2.jpg
          \           /
           [your data]

여기에서 image.jpg 및 image2.jpg는 모두 데이터를 직접 가리 킵니다. 둘 다 하드 링크입니다. 하나…

image.jpg    <-----------  image2.jpg
           \
             [your data]

이 (조잡한) 예제에서 image2.jpg는 데이터를 가리 키지 않고 데이터에 대한 링크 인 image.jpg를 가리 킵니다.

심볼릭 링크는 파일 시스템 경계를 넘어서 작동 할 수 있습니다 (USB 스틱과 같이 파일 시스템이 연결 및 마운트되었다고 가정). 그러나 하드 링크는 할 수 없습니다. 다른 파일 시스템에 있거나 데이터가 저장된 위치에 대해서는 아무것도 모릅니다.

잘하면 이것은 더 나은 이해를하는 데 도움이됩니다.


답변

파일 시스템은 디렉토리 항목이 파일을 구성 할 구성된 디렉토리 구조로 구성되어있다. 각 디렉토리 항목은 파일 이름을 inode 와 연관시킵니다 .

소프트 링크 ( symbolic )는 데이터를 포함하지 않는 디렉토리 항목이며 다른 항목 (동일한 파일 시스템 또는 다른 파일 시스템의 파일 또는 디렉토리) 만 가리 킵니다. 그리고 뾰족한 파일을 삭제하면 심볼릭 링크를 사용할 수 없게됩니다.

하드 링크 는 파일 이름과 inode 번호 를 포함하는 디렉토리 항목입니다 . 마지막 하드 링크를 제거하면 더 이상 파일에 액세스 할 수 없습니다.

소프트 링크와 하드 링크의 차이점

결론:

는 AS 아이 노드는 파일 시스템 객체를 나타내는 데 사용하는 데이터 구조이며, 그것은 파일 시스템 내부, 그리고 당신은 가리 할 수없는 아이 노드 다른 파일 시스템의.

따라서 하드 링크는 동일한 파일 시스템 내에서만 유효하지만 소프트 링크 (기호 링크)는 단순히 다른 디렉토리 항목 (내부 오브젝트가 아닌 파일 시스템의 인터페이스)을 가리 키기 때문에 파일 시스템에 걸쳐있을 수 있습니다 .


답변

루트 파일 시스템은 여러 파일 시스템으로 구성 될 수 있습니다. /usr/local별도의 파티션에 마운트 /home될 수 있고 다른 곳에 네트워크 디스크의 다른 파티션에있을 수 있습니다. 이 경우에 대한 하드 링크 /usr/local/bin/git(예를 들어) 밖에서 생성 될 수있다 /usr/local, 이 파일 시스템에 걸쳐 때문에 .

그 이유는 아이 노드가 별도로 할당되어 있다는 것입니다 /, /usr/local그리고 /home(이 예에서는 다시), 당신은 하드 링크를 만들 때 정말 그냥 아이 노드에 대한 추가 이름을 확인합니다.


답변

하드 링크는 대상을 활성 상태로 유지하는 효과가 있습니다. 하드 링크에 도달 할 수있는 한 시스템은 대상을 해제 할 수 없도록합니다. 따라서 특정 inode에 대한 하드 링크를 포함 할 수있는 모든 매체는 시스템에서 참조가 있는지 여부를 판별하려고 할 때마다 마운트해야합니다.

inode 수명은 일반적으로 참조를 스캔하는 것이 아니라 참조 카운트를 유지함으로써 결정되므로, 서로 링크를 보유한 둘 이상의 파일 시스템을 독립적으로 사용할 수 있도록 링크를 사용할 필요가없는 경우,이를 정렬 할 수 있습니다. 시스템 사이를 연결하고 어느 한 쪽에서 fsck를 사용할 필요가없는 경우. 그러나 시스템 중 하나의 inode 수가 방해를 받으면 해당 시스템을 다시 유용하게 만드는 유일한 방법은 두 파일 시스템 모두에서 참조를 스캔 할 수있는 fsck 작업 형식을 사용하는 것입니다. 이러한 제약으로 인해 두 개의 상호 연결된 파일 시스템을 독립적으로 사용할 수 있지만 그렇게하는 이점은 그 가치가 너무 제한 될 수 있습니다.


답변

하나의 아이 노드 번호 사용은 각 파일 시스템에서 파일을 나타냅니다. inode 번호를 기반으로하는 모든 하드 링크 파일 시스템 참조 링크는 여기에 있습니다 .


답변