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


22

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

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

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

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

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

답변:


29

바라건대 당신에게 적합한 방식으로 이것에 대답 할 수 있기를 바랍니다. 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 스틱과 같이 파일 시스템이 연결 및 마운트되었다고 가정). 그러나 하드 링크는 할 수 없습니다. 다른 파일 시스템에 있거나 데이터가 저장된 위치에 대해서는 아무것도 모릅니다.

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


감사. 다른 파일 파티션이 "파일 시스템"이라는 것을 깨닫지 못했습니다.
Anton Paras

1
파티션으로 할 수있는 작업 중 하나는 파일 시스템을 배치하는 것입니다. 파일 시스템을 넣을 수있는 다른 장소와 파티션으로 수행 할 수있는 다른 작업이 있지만 가장 일반적인 옵션은 그 중 하나입니다.
Jasen

10
"/"에서 시작하는 하나의 파일 계층 이 있습니다. 하나 이상의 파일 시스템이 마운트됩니다.
mpez0

@ mpez0 : 예를 들어 chroot(2)실제 컨테이너화를 사용하더라도 여러 계층을 가질 수 있으며 서로 관련이 없습니다.
Kevin

@Kevin chroot은 프로세스와 그 하위 항목에 대한 계층 구조의 일부를 분리하지만 부모는 여전히 완전한 계층 구조를 갖습니다. VM에 얼마나 가까운 지에 따라 컨테이너화가이를 수행 할 수 있습니다. 그러나 어떤 세부 사항을 주석에 넣을 수 있습니까? 감사합니다,
mpez0

23

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

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

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

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

결론:

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

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


1
간결한 답변.
dubkat

다른 파일 시스템 (USB라고합시다)에 파일 이름이 심볼릭 링크 인 파일과 동일한 이름을 가진 파일이 있으면 어떻게됩니까?
Josef Klimuk

소프트 링크 인 @JosefKlimuk는 경로를 가리킬 것 /mnt/myfile입니다. 당신은에 다른 파일 시스템을 마운트하는 경우 /mnt/. 소프트 링크는 아래의 마운트 된 파일 시스템 항목으로 분석됩니다 /mnt/. 따라서 USB 장치에서 파일 시스템을에 마운트하면 /mnt소프트 링크가 해당 파일 시스템의 항목으로 해석됩니다.
Facundo Victor

2

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

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


2

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

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


좋은 지적이지만 좋은 대답이 되기에는 너무 접하지 않습니다.
Joe

@Joe는 : 기술적 인 문제의 숫자를 부과 간 파일 시스템에 하드 링크를 허용하지만, 그들 중 대부분은 따라서 그들이 왜 어떤 설득력있는 이유가 있는지 여부의 문제 제기를 극복 할 수있는 될 수 있습니다. 연결 유지 문제는 모호한 것처럼 보일 수 있지만 다른 문제와 달리 이러한 링크의 사용에 심각한 의미 제한을 적용하여 해결할 수만 있습니다.
supercat 2016 년

좋은 지적. 파일 시스템을 다른 장치에 마운트하고 수정할 수 있으므로 inode와 링크가 "동기화"될 수 있습니다. 모든 파일 시스템은 GUID를 가질 수 있으며 링크는 해당 GUID를 통합하여 파일 시스템에서 inode를 추적 할 수 있습니다. FS에는 일종의 로그가있을 수 있으며, 마운트 될 때 호스트 시스템은이를 스캔 할 필요는 없지만 inode 연결 변경 사항에서 로그를 읽고 "캐치"할 수 있습니다. 그래도?). 결론은 기본 FS가 사소한 방식으로 수정되어야하며 호환되는 파일 시스템에서만 작동한다는 것입니다.
Rolf

1

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.