큰 파일에 대한 rsync로 손상된 패킷 오류를 수정하는 방법은 무엇입니까?


10

다음 rsync명령 을 사용하여 서버에서 파일을 업데이트하려고합니다 .

rsync -ravq -e "ssh -o ConnectTimeout=2 -o ServerAliveInterval=2 -ServerAliveCountMax=2" --delete ./local_dir user@$SERVER:/dest_dir

corrupt packet 특히 오류가 계속 발생합니다.

rsync: writefd_unbuffered failed to write 4092 bytes to socket [sender]: Broken pipe (32)
rsync: connection unexpectedly closed (11337 bytes received so far) [sender]
rsync error: unexplained error (code 255) at /home/lapo/package/rsync-3.0.9-1/src/rsync-3.0.9/io.c(605) [sender=3.0.9]

ssh큰 (r) 파일에서 발생하는 것으로 보이므로 시간 초과 와 관련이있을 수 있습니다. 또한 WinSCP를 사용하여 시간 초과가 계속 발생합니다. 이것은 나에게만 일어나고 있습니다. 이 서버를 사용하는 사람들 중 일부는 같은 문제가 없습니다.

rsyncCentos 6.3 서버에 대해 Windows 7의 Cygwin 터미널에서 사용 .

다른 정보가 유용하거나 정보를 얻는 방법을 잘 모르겠습니다. 제안 사항에 따라 질문을 업데이트하거나 의견을 추가합니다.

이 문제를 어떻게 해결해야합니까?

매우 감사합니다!

답변:


12

corrupt packet연결을 끊는 문제의 원인이 무엇인지 잘 모르겠지만 큰 파일을 전송할 때 rsync --partial또는 --partial-dir옵션이 도움이 될 수 있으므로 전송을 다시 시작할 때 전송을 다시 시작하지 않고 전송이 중단 된 곳에서 계속됩니다 전체 파일을 다시 :

--partial-dir = .rsync-partial

따라서 다음과 같이 원래 명령을 수정할 수 있습니다.

rsync -rav --progress --partial -e "ssh -o ConnectTimeout=2 -o ServerAliveInterval=2 -ServerAliveCountMax=2" --delete ./local_dir user@$SERVER:/dest_dir

또는

rsync -rav --progress --partial-dir=.rsync-partial -e "ssh -o ConnectTimeout=2 -o ServerAliveInterval=2 -ServerAliveCountMax=2" --delete ./local_dir user@$SERVER:/dest_dir

이 예제에서는 -q( --quiet) 옵션을 제거 --progress하고 첫 번째 예제와 --partial-dir=.rsync-partial두 번째 예제에서 옵션을 추가했습니다 .

의 차이 --partial와는 --partial-dir=.rsync-partial(가) 나중에는 수신 (서버)에 당신에게 중요한 경우 일부 파일이 완전히 전송 된 파일에서 분리 유지하는 디렉토리를 생성한다는 것이다.

rsync를 맨 페이지는 나는 또한 중요한 지적거야하지만, 더 자세하게 설명 할 것 보안 노트를 맨 페이지에서 :

중요 : --partial-dir은 다른 사용자가 쓸 수 없어야합니다. 그렇지 않으면 보안 위험이 있습니다. 예를 들어 "/ tmp"는 피하십시오.


두 옵션을 모두 시도했지만 문제가 해결되지 않았습니다. 그래도 힌트 주셔서 감사합니다.
Juan Carlos Coto 2019

1

손상은 컴퓨터의 NIC 또는 NIC 드라이버가 잘못되었음을 나타냅니다. 내 아내의 Windows 상자 에이 기능이 한 번 있습니다. 성공한 후에는 rsync를 반복적으로 호출하여 필요한 다른 소프트웨어 (전송 된 NIC 드라이버 및 체크섬 도구 포함)를 전송하고 수정했습니다.


0

ulimit 값이 0이거나 작은 숫자이면 해당 오류가 발생합니다. ulimit 값을 늘리고 (such as 9999999999)다시 시도하십시오. 작은 쉘 스크립트를 작성 (a.sh)하고 다음과 같이 사용할 수 있습니다 .

#!/bin/sh
ulimit 99999999999

rsync -avrz --perms --delete --chmod=u+rwx,g+rx,o+x /dir1/ /dir2/

2
그 흥미 롭군요. 나는이 작업을 한동안하지 않았다. 그러나 왜 그것이 효과가 있는지 설명하고 싶다면이 질문을 읽는 사람에게 정말 유용 할 것이라고 생각합니다. 감사!
Juan Carlos Coto

-1

마지막으로 전송 될 때까지 반복하십시오.

while ! sshpass -p 'xxxx' rsync --partial --append-verify --progress -a -e 'ssh -p 22' /source/ remoteuser@1.1.1.1:/dest/; do sleep 5;done
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.