rsync 및 심볼릭 링크

rsync 및 심볼릭 링크

cron실행할 작업을 사용하여 야간에 홈 디렉토리를 외부 드라이브에 백업하고 싶습니다 rsync. rsync의 심볼릭 링크 플래그 의 정확한 동작을 잘 모르겠습니다 .

  1. rsync-a플래그에는 -l플래그가 포함됩니다(예: "심볼릭 링크를 심볼릭 링크로 복사"). 이게 그냥 그럴 것이라는 뜻인가요?링크를 복사해아니면 링크를 따라가서 링크 대상 디렉토리의 모든 것을 복사할 것입니까? 백업할 필요가 없는 수백 기가바이트를 복사하는 미디어 파일로 가득 찬 디렉토리에 대한 링크가 있기 때문에 이를 피하고 싶습니다.
  2. rsync -a모든 미디어 파일을 복사할 것이라는 두려움(확실하지는 않음) 대신에 --no-links플래그를 추가했습니다. 이것은 내가 원하는 행동이 아닌 것 같습니다. 복사하려는 링크(예: 다른 프로젝트 디렉토리의 공통 헤더 파일에 대한 링크)가 있기 때문에 문제가 있는 링크 복사를 무시합니다.
  3. 위의 #1(플래그 없음 --no-links)이 내가 정말로 원하는 것이고 링크 대상 파일을 복사하지 않고 링크만 복사한다고 가정하면 링크가 백업될 때 링크가 끊어지나요? 예를 들어 rsync디렉토리 /home/me/projects/misc/media/extdrive/backup/home/me/projects/misc. 이 경우 나는 rsync충분히 똑똑하지 않다고 가정하고 상대 디렉토리 변경에 대한 심볼릭 링크의 내용을 수정하려고 시도하지도 않습니다. 이 올바른지? 이것은 괜찮습니다. 링크가 복원되어야 할 때가 오면 수정되고 작동하는 한 백업 디렉토리에서 링크가 끊어져도 문제가 되지 않습니다.

답변1

  1. "심볼릭 링크를 심볼릭 링크로 복사"는 정확히 말하는 것을 의미합니다. rsync가 소스 디렉토리에서 심볼릭 링크를 발견하면 대상에 동일한 심볼릭 링크를 생성합니다.더 이상은 없습니다.

    (매뉴얼 페이지의 몇 줄 아래에다른옵션인 은 --copy-links귀하가 바람직하지 않다고 설명한 반대 동작(항상 데이터 복사)을 설명합니다.)

    "심볼릭 링크" 섹션도 참조하세요.

    가 지정 되면 --links대상에서 동일한 대상을 사용하여 심볼릭 링크가 다시 생성됩니다.

  2. 원하는 동작이 아닙니다. --links수행하는 작업을 잘못 해석하여 잘못된 동작을 요구하기 때문입니다(답변 #1 참조).

  3. 기본적으로 대상을 복사합니다.정확히.

    즉, 링크가 절대 경로(예: /home/me/projects)를 가리키는 경우 계속해서 동일한 경로를 가리킵니다. 그렇지 않을 것이다부서지다, 백업에 있는 파일이 아닌 홈 디렉터리에 있는 파일을 계속 가리킵니다.

    ../../projects한편, 링크가 상대 경로(예 : ) 를 가리키는 경우또한계속해서 동일한 경로를 가리키지만 이는 심볼릭 링크 위치에 상대적이므로 백업의 심볼릭 링크도 백업의 파일을 가리킵니다.

    불행하게도 새로운 기반에 대한 절대 심볼릭 링크를 변환하는 옵션은 없는 것 같습니다(단지 심볼릭 링크를 완전히 끊는 옵션만 있음). 문제를 방지하려면 기존 심볼릭 링크를 상대 심볼릭 링크로 변경해야 합니다($HOME 내부 링크의 경우 일반적으로 좋은 생각입니다).

답변2

@grawity는 훌륭한 답변을 제공하지만 다음은 관련 정보의 스크린샷입니다.문서. 예를 들어, 문제의 가장 관련성이 높은 것으로 보이는 -l(1이 아닌 소문자 L) 및 옵션 의 정확한 문구는 다음과 같습니다 .-L

여기에 이미지 설명을 입력하세요

원천:https://linux.die.net/man/1/rsync, 또는 man rsyncLinux의 매뉴얼 페이지.

또한 -a( --archive) 옵션에는 그 안에 옵션도 포함되어 있다는 점에 유의하십시오. 이는 소스의 심볼릭 링크를 대상의 심볼릭 링크로 유지하는 옵션을 -l사용하는 것을 정말 좋아하기 때문입니다 . -l매뉴얼 페이지에서 ( man rsync):

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)

-rlptgoD그리고 , 의 의미는 다음과 같습니다 man rsync.

   --recursive, -r          recurse into directories
   --links, -l              copy symlinks as symlinks
   --perms, -p              preserve permissions
   --times, -t              preserve modification times
   --group, -g              preserve group
   --owner, -o              preserve owner (super-user only)
   -D                       same as --devices --specials
   --devices                preserve device files (super-user only)
   --specials               preserve special files ["such as named sockets and fifos"]

중요한!:

rsync에서 사용하는 경우exFAT또는지방그러나 파일 시스템은 그렇습니다~ 아니다심볼릭 링크나 POSIX 소유자, 그룹 및 권한을 지원하므로제거 -lpgo하고 -rtD대신 사용하십시오 -a!-v원하는 경우 "verbose"를 추가하고 사용할 수도 있습니다.-vrtD.

자세한 내용은 여기를 참조하세요:

  1. [내 대답]FAT 및 exFAT 파일 시스템과 함께 rsync를 사용하기 위한 최상의 설정
  2. rsync가 ExFat의 기존 파일을 덮어쓰는 것 같습니다.
  3. https://superuser.com/a/384849/425838
  4. https://learn.microsoft.com/en-us/windows/win32/fileio/filesystem-functionity-comparison

rsync복사, 미러링, 전체 진행률 표시 등 제가 가장 좋아하는 명령과 지침을 참고하세요 .

...모의 실행 수행, stderr 및 stdout을 (별도의) 파일에 기록, 통계 표시,포함 경로 파일그리고파일 제외, 등, 여기 두 번째 섹션에서 "2. rsync 명령줄 도구(Linux, Cygwin이 설치된 Windows)":https://superuser.com/a/1464264/425838

관련 정보