재동기화 매개변수

재동기화 매개변수

이동하고 싶은 공간이 약 50GB 정도 있습니다. LAN에 최적화된 TCP/IP(따라서 제목에 네트워크가 있음)를 통해 이 작업을 수행하고 싶습니다. 내 문제는 가끔 연결이 끊어지고 모든 데이터를 대상에 안정적으로 가져오지 못하는 것 같습니다. 나는 이것을 원한다

  1. 포기하기가 참 쉽지 않네요
  2. 자동 재시도를 계속합니다(두 시스템에 전원이 있다고 가정).

내 방법은 rsync.

SOURCE=/path/to/music/ # slash excludes "music" dir
DESTINATION=/path/to/destination 
rsync \
  --archive \ # archive mode; equals -rlptgoD (no -H,-A,-X)
  --compress \ # compress file data during the transfer
  --progress \ # show progress during transfer
  --partial \ # delete any partially transferred files after interrupt, on by default but I added it for kicks
  --human-readable \ #output numbers in a human-readable format
  "$SOURCE" \
  "$DESTINATION" \

고려해야 할 다른 매개변수가 있나요?

답변1

재동기화 매개변수

rsync내 매개 변수가 괜찮은 것 같습니다 .

연결이 실패한 후 존재하는 파일을 처리하기 위해 매개변수를 추가해야 했습니다. yes를 선택 --ignore-existing하거나 --update이미 작성된 내용을 다시 작성하지 마십시오. 아직 어느 쪽이 더 좋은지는 잘 모르겠지만(아마 아시는 분도 있겠지만) 이 경우는 --update이 글을 읽고 선택했습니다.https://askubuntu.com/questions/399904/rsync-has-been-interrupted-copy-from-beginning

비교하다:

  • --update는 수신기에서 최신 파일을 건너뜁니다.
  • --ignore-existing 싱크에 이미 존재하는 파일 업데이트 건너뛰기

연결이 중단되었습니다.

종료 코드가 0이 아닐 때 지속적으로 rsync를 호출하여 전송이 성공할 때까지 프로세스를 계속하도록 하여 연결 문제 퍼즐(불안정한 Wi-Fi 등)을 해결했습니다. (전원을 차단하지 않는 한 번개가 전력선에 닿거나 신호로 죽입니다)

while네트워크 연결 끊김을 처리하기 위해 루프를 사용하고 있습니다 .

while [ 1 ]
do
# STUFF
done

while [ 1 ]한 가지 주의 사항: ctrl c와 같은 신호를 인터럽트(SIGINT)로 사용하는 것은 를 호출하지 않으면 작동하지 않습니다 break.

if [ "$?" -gt 128 ] ; then break

그런 다음 rsync의 종료 코드를 확인할 수 있습니다. 0은 모든 파일이 이동되었음을 의미합니다.

elif [ "$?" -eq 0 ] ; then exit

그렇지 않으면 전송이 완료되지 않습니다.

else sleep 5

스크립트 예 sync-music.sh

rsync 스크립트는 SSH 비밀번호 없는 키 인증을 사용합니다.

#!/bin/bash

SOURCE="/path/to/Music/"
DESTINATION="[email protected]:/media/Music"

while [ 1 ]
do
  rsync -e 'ssh -p22'\
  --archive \
  --compress \
  --progress \
  --partial \
  --update \
  --human-readable \
  "$SOURCE" \
  "$DESTINATION"

  if [ "$?" -gt 128 ] ; then
    echo "SIGINT detected. Breaking while loop and exiting."
    break
  elif [ "$?" -eq 0 ] ; then
    echo "rsync completed normally"
    exit
  else
    echo "rsync failure. reestablishing connection after 5 seconds"
    sleep 5
  fi
done

관련 정보