rsync --link-dest는 예상대로 심볼릭 링크를 사용하지 않습니다.

rsync --link-dest는 예상대로 심볼릭 링크를 사용하지 않습니다.

rsync내 파일 중 일부를 백업하는 데 사용하는 것 :

rsync -aEN --delete --link-dest="$CURR/" "$SOURCE/" "$NEW/"

--link-dest옵션은 대부분의 파일에 작동하지만 심볼릭 링크에는 작동하지 않습니다.
이전 백업에 대한 정리 스크립트를 작성할 때 변경되지 않은 심볼릭 링크가 하드 링크가 아니라 복사된 것임을 확인했습니다.

이제 궁금합니다. 하드 링크를 불변 심볼릭 링크로
만드는 방법이 있나요 ? 그렇지 않은 경우: 이것은 의도적인 것입니까, 아니면 rsync의 버그입니까?rsync

저는 Mac OS 10.11에서 rsync 버전 3.1.1을 사용하고 있습니다.

편집하다:

이는 Mac OS X에서 발생하는 문제인 것 같습니다. 어떤 이유로 HFS+는 심볼릭 링크에 대한 하드 링크를 지원하지 않는 것 같습니다.

답변1

macOS(HFS+)의 파일 시스템은 심볼릭 링크에 대한 하드 링크를 지원하지 않습니다.

$ touch file
$ ls -l file
-rw-r--r-- 1 kk staff 0 Jun 17 18:35 file

$ ln -s file slink
$ ls -l file slink
-rw-r--r-- 1 kk staff 0 Jun 17 18:35 file
lrwxr-xr-x 1 kk staff 4 Jun 17 18:36 slink -> file

다음 코드는 일반적으로 심볼릭 링크에 대한 하드 링크를 생성하며 lnmacOS 매뉴얼에도 문서화되어 있습니다(편집: 아니요, 그렇지 않습니다. GNU coreutils를 설치하고 잘못된 매뉴얼을 읽지 않는 한, 아!).

$ ln -P slink hlink
$ ls -l file slink hlink
-rw-r--r-- 1 kk staff 0 Jun 17 18:35 file
lrwxr-xr-x 1 kk staff 4 Jun 17 18:38 hlink -> file
lrwxr-xr-x 1 kk staff 4 Jun 17 18:36 slink -> file

참조 횟수(1)에 따라 새 이름이 생성되지 않았음을 알 수 있습니다( 유효한 경우 둘 다 slink2가 됨 ). 또한 이것은 1개의 inode 링크(2개가 아님)가 있는 심볼릭 링크임을 알려줍니다.slinkhlinkstathlink

$ stat hlink
  File: 'hlink' -> 'file'
  Size: 4               Blocks: 8          IO Block: 4096   symbolic link
Device: 1000004h/16777220d      Inode: 83828644    Links: 1
Access: (0755/lrwxr-xr-x)  Uid: (  501/      kk)   Gid: (   20/   staff)
Access: 2016-06-17 18:38:18.000000000 +0200
Modify: 2016-06-17 18:38:18.000000000 +0200
Change: 2016-06-17 18:38:18.000000000 +0200
 Birth: 2016-06-17 18:38:18.000000000 +0200

/bin/ln편집: GNU coreutils를 사용하다가 적발되었기 때문에 macOS에서 다시 테스트해 보겠습니다.

$ touch file
$ /bin/ln -s file slink
$ /bin/ln slink hlink   # there is no option corresponding to GNU's -P
$ ls -l file slink hlink
-rw-r--r--  2 kk  staff  0 Jun 17 18:59 file
-rw-r--r--  2 kk  staff  0 Jun 17 18:59 hlink
lrwxr-xr-x  1 kk  staff  4 Jun 17 18:59 slink -> file

하드 링크는 을 가리키는 file대신 을 가리킵니다 slink.

예를 들어 Linux 및 OpenBSD(제가 사용하는 다른 운영 체제)에서는 이렇게 할 수 있습니다.

$ ls -l file slink hlink
-rw-rw-r-- 1 kk kk 0 Jun 17 18:35 file
lrwxrwxrwx 2 kk kk 4 Jun 17 18:43 hlink -> file
lrwxrwxrwx 2 kk kk 4 Jun 17 18:43 slink -> file

(노트 2")

답변2

심볼릭 링크에 대한 하드 링크를 만들 수 없습니다(이것은 OS X "제한 사항"이 아닙니다). 하드 링크는 inode에 대한 참조이고, 심볼릭 링크는 inode가 아니라 일부 추가 정보가 있는 디렉토리의 항목일 뿐입니다.

비슷한 기능을 가지고 있지만 다르게 동작하는 Windows를 생각할 수도 있습니다.

rsync 하다--copy-links대상 파일을 가리키는 심볼릭 링크를 복사하라는 옵션이 있습니다 . 이는 소스 디렉터리의 전체 복사본을 만들려고 할 때 유용합니다(그러나 디스크 사용량을 줄이는 것이 목표라면 별로 유용하지 않습니다).

관련 정보