USB를 사용하여 연결이 끊긴 두 서버 간의 큰 디렉터리 동기화

USB를 사용하여 연결이 끊긴 두 서버 간의 큰 디렉터리 동기화

전체 디렉터리를 담기에는 너무 작은 USB 장치를 사용하여 연결이 끊긴 두 서버 간에 큰 디렉터리를 동기화하고 싶습니다. 각 서버는 대부분의 데이터를 보유하고 있으며 변경된 파일은 USB 장치에 들어갈 만큼 작습니다.

다음 단계를 수행하는 데 사용할 수 있는 도구가 있습니까?

  1. 장치 B: 디렉터리 D의 해시를 계산하여 USB 장치에 저장합니다.
  2. 장치 A: 해시를 계산하고 비교합니다. 동기화되지 않은 파일을 USB 장치에 추가하고 삭제된 파일을 기록해 둡니다.
  3. 장치 B: 동기화가 USB 장치에서 D로 변경되었으며 이제 장치 A와 동일한 버전을 갖습니다.

내가 아는 한, rsync, rdiff-backup 및 unison과 같은 도구는 이를 지원하지 않으므로 이에 대한 최선의 해결책은 이를 수행하는 몇 가지 간단한 스크립트를 작성하는 것입니다.

답변1

가장 쉬운 방법은 크로스오버 케이블을 사용하여 두 시스템을 연결하는 것입니다. :) 하지만 반드시 플래시와 테이프를 사용해야 한다면 다음과 같이 할 수 있습니다.

존재하다목적지기계:

  • find /some/dir -type f -print0 | xargs -0 sha1sum -b | sort >dst.txt
  • dst.txt파일을 다음 위치에 복사하세요 .원천기계

존재하다원천기계:

  • find /some/dir -type f -print0 | xargs -0 sha1sum -b | sort >src.txt
  • comm -23 src.txt dst.txt | cut -b 43- | (cd /some/dir; tar cJvf - --files-from -) | split -b 3500MB -d
  • x*파일을 하나씩 복사하세요.목적지기계
  • rm -f x* src.txt dst.txt

존재하다목적지기계를 다시:

  • cat $( ls -1 x* | sort ) | (cd /some/dir; tar xJvpf -)
  • rm -f x*

작동 방식:

  • dst.txt파일에는 src.txt두 컴퓨터에 있는 파일의 SHA-1 합계가 포함되어 있습니다.
  • comm -23 src.txt dst.txt선택 항목은 다음에만 존재합니다.원천기계 또는 둘 다 존재하지만 다릅니다.
  • cut -b 43-파일 이름만 유지하십시오. 이는 복사해야 하는 파일 목록입니다.
  • cd /some/dirCWD소스 디렉터리 변경
  • tar cJvpf - --files-from -여러 개의 아카이브를 만들고, --files-from -아카이브할 파일 목록을 읽고 stdin, 아카이브를 에 쓰라고 f -지시하고 , 압축하여 아카이브하고 , 아카이브할 파일 목록을 인쇄합니다 .tarstdoutJxzvtarstderr
  • split -b 3500MB -d아카이브를 3500MB 청크로 나눕니다. (4GB 플래시가 있고 한 번에 모든 데이터를 저장할 수 없다고 가정합니다. 아마도 전혀 이 작업을 수행할 필요가 없을 것입니다.)
  • cat $( ls -1 x* | sort )x*파일을 연결하는 sort것이 올바른 순서로 수행되는지 확인할 수 있습니까?
  • cd /some/dirCWD대상 디렉터리 변경
  • tar xJvpf -파일을 저장합니다. J압축 해제를 표시하고 xz, p권한 복원을 표시하고, v작업을 상세하게 만들고, 아카이브에서 읽을 것을 f -지시합니다 .tarstdin

tar마지막으로 @Stéphane Chazelas 면책 조항: 이는 (1) 두 컴퓨터의 파일 이름에 개행 문자가 포함되어 있지 않고 (2) 미러링되는 디렉터리가 너무 깊지 않다고 가정합니다(파일의 최대 경로 길이에 제한이 있음). 아카이브이며 매우 높지는 않습니다 - 200자 IIRC).

답변2

tar매개변수를 결합하면 -N | --newer | --after도움이 될까요? 지정된 날짜 이후 수정된 모든 파일을 백업할 수 있습니다.

각 실행 전에 파일 목록을 생성하는 경우( find예: 이 출력을 사용하면 대상 서버에서 추가 파일을 삭제할 수 있습니다.

관련 정보