하드 링크 역 참조


22

tar명령 매뉴얼 페이지에는 하드 링크를 따르는 옵션이 나열되어 있습니다.

-h, --dereference
      follow symlinks; archive and dump the files they point to

--hard-dereference
      follow hard links; archive and dump the files they refer to

tar파일이 하드 링크라는 것을 어떻게 알 수 있습니까? 그것을 어떻게 따르 나요?

이 옵션을 선택하지 않으면 어떻게됩니까? 어떻게 수행 하지 하드 역 참조?

답변:


24

기본적 tar으로 하드 링크가있는 파일을 아카이브하도록 지시하고 아카이브 할 파일에 둘 이상의 링크가 포함 된 경우 파일은 한 번만 아카이브되고 두 번째 (및 추가 이름)는 하드 링크로 기록됩니다. 즉, 해당 아카이브를 추출하면 하드 링크가 복원됩니다.

--hard-dereference옵션 을 사용하면 하드 링크가 유지 tar되지 않습니다 . 대신, 내용과 메타 데이터가 동일한 독립 파일로 취급합니다. 아카이브를 추출하면 파일이 독립적입니다.

참고 : 먼저 파일의 링크 수를 확인하여 하드 링크를 인식합니다. 링크가 둘 이상인 각 파일의 장치 번호와 inode를 기록하고이를 사용하여 동일한 파일이 다시 아카이브되는시기를 감지합니다. (을 사용할 때는 --hard-dereference이 작업을 수행하지 않습니다.)


7

하드 링크가있는 파일과 "링크 수"가있는 하드 링크되지 않은 파일을 구별 할 수 있습니다. 커맨드 라인에서 이것을 얻는 두 가지 방법이 있습니다.

% stat original
  File: ‘original’
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 804h/2052d      Inode: 932815      Links: 2
Access: (0644/-rw-r--r--)  Uid: (  500/ bediger)   Gid: ( 1000/ bediger)
Access: 2012-07-13 22:13:52.317101530 -0600
Modify: 2012-07-13 22:13:52.317101530 -0600
Change: 2012-07-13 22:14:08.050894536 -0600
 Birth: -

또는

1010 % ls -li 
total 0
932815 -rw-r--r-- 2 bediger bediger 0 Jul 13 22:13 original
932815 -rw-r--r-- 2 bediger bediger 0 Jul 13 22:13 secondary

"베드로"이전의 외로운 '2'가 링크 카운트입니다. 두 파일 이름의 아이 노드 번호는 932815입니다.

이 두 명령 모두 stat()시스템 호출 에 의해 채워지는 struct stat의 st_nlink 필드에서 링크 수를 얻습니다 .

내가 알 수 있듯이 실행 tar--hard-dereference두 개의 별개의 파일 이름을 가진 단일 파일을 얻는 대신 (위의 예와 같이) 각각 하나의 파일 이름을 가진 두 개의 파일을 얻는다는 것을 의미합니다. tar아마도 각 파일의 링크 수를 확인하고 기본적으로 압축을 풀 때 하드 링크 된 파일 데이터에 대한 두 번째 파일 이름에 하드 링크를 만듭니다. 호출 할 때 --hard-dereference아카이브를 만드는, 두 번째 파일 이름의 추출 호출에 대한 완전히 새로운 파일을 만들 나타납니다 tar실행됩니다.


이제는 '하드 링크 팔로우'가 잘못된 단어라는 것을 이해합니다. 고맙습니다. 그러나 두 개의 동일한 파일 중 하나가 보관되지 않으면 어떻게됩니까? 이러한 경우 링크 수가 잘못되었습니다.
musa

2
"두 개의 동일한 파일"이 아니라 두 개의 이름을 가진 하나의 파일입니다. 어떤 파일 tar가 동일하지 않기 때문에 아카이브하지 않는 것은 중요하지 않습니다. 기본적으로 tar는 아마도 파일 시스템처럼 두 번째 파일 이름에서 첫 번째 이름으로 일종의 "포인터"를 유지합니다.
Bruce Ediger
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.