하드 링크가 동일한 파일 시스템 내에서만 작동하는 이유는 무엇입니까?

하드 링크가 동일한 파일 시스템 내에서만 작동하는 이유는 무엇입니까?

나는 이것을 읽고 있다명령줄 소개저자: 마크 베이츠

1장에서 그는 하드 링크가 파일 시스템에 걸쳐 있을 수 없다고 언급했습니다.

하드 링크에 대해 주목해야 할 중요한 점은 현재 파일 시스템에서만 작동한다는 것입니다.다른 파일 시스템의 파일에 대한 하드 링크를 만들 수 없습니다.이렇게 하려면 섹션 1.4.3의 기호 링크를 사용해야 합니다.

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

위키피디아Unix 파일 시스템에 관한 기사도움이 되지 않습니다.

답변1

이 질문에 대해 귀하가 이해할 수 있는 방식으로 답변할 수 있기를 바랍니다. 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 스틱처럼 연결 및 마운트되어 있다고 가정). 그러나 하드 링크는 그럴 수 없습니다. 다른 파일 시스템에 무엇이 있는지, 데이터가 어디에 저장되어 있는지 알 수 없습니다.

이것이 더 나은 이해에 도움이 되기를 바랍니다.

답변2

이것파일 시스템파일을 구성하는 디렉토리 항목이 포함된 디렉토리 구조로 구성됩니다. 각 디렉토리 항목은 파일 이름을인덱스 노드.

소프트 링크(상징적인)는 데이터가 없는 디렉토리 항목이며 단순히 다른 항목(동일한 파일 시스템이나 다른 파일 시스템의 파일 또는 디렉토리)을 가리킵니다. 심볼릭 링크가 가리키는 파일을 삭제하면 심볼릭 링크를 사용할 수 없게 됩니다.

하드 링크파일 이름을 포함하는 디렉토리 항목입니다. 인덱스 노드숫자. 마지막 하드 링크를 삭제한 후에는 더 이상 파일에 액세스할 수 없습니다.

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

결론적으로:

~처럼인덱스 노드파일 시스템 개체를 나타내는 데 사용되는 데이터 구조이며 파일 시스템 내부에 있으므로 가리킬 수 없습니다.인덱스 노드다른 파일 시스템의

그러므로,하드 링크는 동일한 파일 시스템 내에서만 작동하지만 소프트 링크(기호 링크)는 파일 시스템에 걸쳐 있을 수 있습니다.왜냐하면 그들은 단지 다른 디렉토리 항목(내부 객체가 아닌 파일 시스템에 대한 인터페이스)을 가리키기 때문입니다.

답변3

하드 링크는 대상을 활성 상태로 유지하는 효과가 있습니다. 하드 링크에 연결할 수 있는 한 시스템은 해당 대상이 해제되지 않도록 합니다. 따라서 시스템이 참조가 있는지 확인하려고 할 때마다 특정 inode에 대한 하드 링크를 포함할 수 있는 모든 미디어를 마운트해야 합니다.

inode 수명은 일반적으로 참조를 검색하는 대신 참조 카운트를 유지함으로써 결정된다는 점을 고려하면 링크를 사용할 필요가 없는 경우 서로 연결된 상태로 유지되는 두 개 이상의 파일 시스템을 독립적으로 사용할 수 있도록 상황을 배열할 수 있습니다. 두 시스템 모두에서 fsck를 사용하지 않고 시스템 브리지 간. 그러나 시스템 중 하나의 inode 수가 방해를 받는 경우 해당 시스템을 다시 사용할 수 있게 만드는 유일한 방법은 참조를 위해 두 파일 시스템을 모두 검색하는 fsck 작업 형식을 사용하는 것입니다. 이러한 제한으로 인해 두 개의 링크된 파일 시스템을 독립적으로 사용하는 것이 가능할 수 있지만 그렇게 하면 이점이 너무 제한되어 가치가 없을 수 있습니다.

답변4

하나의인덱스 노드숫자는 각 파일 시스템의 파일을 나타내는 데 사용됩니다. 모든 하드 링크는 inode 번호를 기반으로 합니다. 파일 시스템 참조 링크여기.

관련 정보