rsync를 사용하여 이름이 변경되는 디렉터리의 복사본 유지

rsync를 사용하여 이름이 변경되는 디렉터리의 복사본 유지

저는 Linux 시스템에서 rsync를 사용하여 로컬 디스크와 연결된 USB 드라이브 간의 디렉터리를 동기화하고 있습니다. 제가 겪고 있는 문제는 서버에서 매일 백업을 생성하는 타사 시스템이 실제로 백업 깊숙이 중첩된 디렉터리의 이름을 변경한다는 것입니다. 이 디렉터리에는 백업에 필요한 대부분의 데이터가 포함되어 있습니다. rsync는 디렉터리를 보면 이름이 변경된 것을 확인하고 완전히 새로운 디렉터리로 간주합니다. 따라서 USB 드라이브에 있는 rsync 복사본에는 매일 실행되는 새 디렉터리가 있습니다.

실제로 디렉토리 이름을 다시 변경하는 스크립트를 작성했지만 그렇게 하는 방법은 번거롭습니다!

나는 이 문제를 해결할 "우아한" 방법을 찾고 있습니다. 일정하게 유지되는 디렉토리에 대한 링크를 생성할 수 있습니까? 이름이 변경되더라도 디렉토리가 동일한 것을 감지하도록 rsync를 구성할 수 있습니까? 나는 누군가가 이전에 이 문제를 처리해야 했다고 확신합니다!

답변1

한 가지 접근 방식은 두 단계로 수행하는 것입니다. 첫째, 무시 패턴을 사용하여 문제의 디렉터리를 제외한 모든 항목을 rsync합니다. 둘째, bash에서 globbing을 사용하여 디렉터리를 rsync하여 다음과 같이 디렉터리로 이동합니다.

rsync -av /usr/lib/mydata/bigdatadir*/ /mnt/usbvolume/bigdatadir/

소스 디렉터리에서 후행 슬래시를 사용하면 rsync가 디렉터리 이름을 무시하게 됩니다.내용물디렉토리 자체가 아닌 디렉토리의. 물론, 위의 예에서와 같이 디렉토리 이름이 상수 접두사 또는 접미사로 지정되면 이 글로빙이 가장 쉬울 것입니다. 그렇지 않은 경우 디렉터리의 실제 이름을 파악하는 스크립트를 작성하고 다음과 같이 보다 직접적인 작업을 수행할 수 있습니다.

rsync -av /usr/lib/mydata/$BIGDATADIRNAME/ /mnt/usbvolume/bigdatadir/

결국 의사 코드는 다음과 같습니다.

  1. $BIGDATADIRNAME 찾기
  2. 이전과 마찬가지로 모든 것을 재동기화하되 $BIGDATADIRNAME은 무시하세요.
  3. 재동기화내용물$BIGDATADIRNAME 중

답변2

rsync 옵션을 사용할 수 있습니다--비교 대상=DIR,--복사 대상=디렉터리, 또는--링크 대상=디렉터리. 누락된 파일을 찾기 위해 수신 측에 추가 디렉터리를 지정할 수 있습니다.

예를 들어 --link-dest를 사용하면 rsync는 변경된 파일의 새 복사본을 포함하는 새 버전의 디렉터리를 생성하거나 변경되지 않은 파일의 하드 링크된 복사본을 생성합니다.

이러한 옵션을 사용하려면 이전 rsync 실행에서 USB 드라이브의 디렉터리 이름을 알아야 하므로 먼저 올바른 디렉터리 이름을 파악하는 스크립트에 rsync를 래핑하는 것이 좋습니다.

새 버전을 생성한 후 디렉토리의 이전 버전을 삭제하려면 --delete-after를 사용할 수도 있습니다.

답변3

rsync만으로는 원하는 작업을 수행할 수 없습니다. rsync가 사용할 수 있는 유일한 메타데이터는 디렉터리 이름과 MACtimes이기 때문입니다.

rsync 내부에서 이를 자동으로 처리하는 유일한 방법은 rsync가 어떻게든 더 많은 메타데이터를 갖도록 하는 것입니다. 예를 들어 Windows에서 Microsoft의 DFS 복제는 NTFS 볼륨의 파일에 할당된 고유 ID를 사용하여 파일(또는 디렉터리) 이름이 변경될 때 이를 포착함으로써 이를 처리합니다.

귀하의 우아하지 않은 스크립트는 아마도 rsync를 덤프하고 다른 도구를 찾지 않고도 원하는 작업을 수행하는 가장 쉬운 방법일 것입니다.

연결 지점이 대상 디렉터리의 이름에 연결되어 있기 때문에 기호 링크를 사용하면 작동하지 않습니다(이 경우 대상 디렉터리 이름이 변경됨). 하드링크(inode에 연결됨)를 사용할 수 있지만 디렉터리 이름이 삭제되고 다시 생성되는 것(다른 inode에 할당됨)이 아닌 변경되고 있는지 확인해야 합니다.

관련 정보