rsync 연결이 계속 끊어집니다. 파이프가 끊어졌습니다.

rsync 연결이 계속 끊어집니다. 파이프가 끊어졌습니다.

rsync내 홈 디렉토리를 백업하는 데 사용합니다 . 이것은 오랫동안 실행되어 왔습니다. 이것은 내가 사용하는 명령입니다:

rsync \
    -pavz \
    --delete \
    --exclude 'mnt/' \
    --exclude '.cache/' \
    --exclude 'Videos/' \
    --exclude 'Music/' \
    --exclude 'Documents/virtualbox' \
    /home/"${USER}" "${server}":"${dir}" 2>> "${errorFile}"

그런데 백업하려고 서버를 전환했더니 이제 rsync시작해서 몇 초(최대 몇 분) 동안 실행되다가 오류 메시지와 함께 중지됩니다.

packet_write_wait: Connection to x.x.x.x: Broken pipe
rsync: [sender] write error: Broken pipe (32)
rsync error: unexplained error (code 255) at io.c(820) [sender=3.1.1]

다른 서버에서 실행 중이기 때문에 연결이나 서버 자체에 문제가 있는 것으로 의심됩니다. 연결이 안정적인 것 같습니다. 케이블로 연결했는데 끊김 현상이 없네요. 또한 백업하는 동안 서버에 ping을 시도했습니다. 백업이 중단되더라도 Ping 응답률은 100%입니다.

kerberos원격 서버에서 인증하는 데 사용합니다 .

ServerAliveInterval나는 , ServerAliveCountMax또는 내 조합 으로 여러 가지 조합을 시도했지만 성공하지 못했습니다.ClientAliveInterval~/.ssh/config

서버에서 실행 중인 무언가가 어떤 이유로 명령을 종료하는 것일 수 있지만 rsync이를 조사하는 방법을 모르겠습니다. 어떤 아이디어가 있나요?

답변1

문제는 메모리 부족일 수 있습니다. 서버에 1GB가 많은 경우 대용량 데이터 세트에서는 rsync가 실패합니다. 어쩌면 알고리즘이 개선되어 메모리 용량이 늘어났는지 모르지만 약 8년 동안 이런 문제를 본 적이 없습니다. 물론, 이것은 외부 사진이지만 살펴볼 가치가 있는 사진입니다. 먼저 더 작은 데이터 세트를 사용해 보세요. 또한 온전성 검사의 한 형태로 tar-tar를 실행해 볼 수도 있습니다.

tar cf - $HOME | ssh ${server} tar xf -

만약에반품몇 분 후에 실패합니다. 메모리가 아닙니다.

답변2

rsync나는 과거에 이런 상황에 처해 있었습니다. 이 문제를 해결한 솔루션은 screen원격 서버에 대한 연결을 유지하는 데 도움이 될 수 있는 세션에서 실행하는 것이었습니다.

screen -LS rsync
[execute your rsync command]
Ctrl-A+D to detach from the session

screen -x rsync실행하여 상태를 확인할 수 있습니다(또는 세션 이름을 무엇이든 지정하기로 결정했지만 이름을 지정한 경우에는 필요하지 않습니다). 그러면 현재 쉘이 세션에 다시 연결됩니다. 백그라운드에서 계속 실행되도록 상태를 확인한 후 다시 분리하는 것을 잊지 마세요.

screen[내가 틀렸다면 수정해 주세요]를 실행하여 한 번의 실패로 백그라운드에서 실행 중인 명령을 실행할 수도 있습니다 screen -dm 'command'. man screen마지막 작업을 시도하기 전에 이 작업을 수행하는 것이 좋습니다.

편집하다:

screen이 경우에는 아무런 도움도 제공하지 않았 음을 확인하셨기 때문에 답변을 편집하고 있습니다 . 하지만 scp어떤 결과를 얻을지 확인해 보도록 제안하는 내 댓글에 답변하셨습니다. 답변이 이상하고 매우 잘 작동합니다. .

그래서 내 새로운 대답은 다음과 같습니다. scp대신 -- 또는 ssh(와 함께 tar) --를 사용하세요 .rsync

물론, scp지원되지 않는 기능이 엄청나게 많지만 rsync실제로 지원하는 기능의 수에 놀랄 것입니다.하다거의 지원정확히 똑같다도착했다 rsync.

실제 시나리오 scp및 기타 대안 rsync:

얼마 전 저는 프로덕션 서버에서 로그를 가져와 로컬 웹 서버에 저장하는 셸 스크립트를 작성하는 임무를 맡았습니다. 이를 통해 개발자는 문제 해결을 위해 해당 로그에 액세스할 수 있습니다. Unix 팀이 이를 우리 서버에 설치하도록 하는 데 실패한 후 , 나는 마찬가지로 작동하는 해결 방법을 rsync생각해 냈습니다 .scp

즉, 최근에 스크립트를 수정했는데 정확하게는 just sshtar-- /를 사용했습니다. GNU는 권한 /속성 저장, 압축 등 실제로 찾을 수 있는 많은 옵션을 지원합니다 .GNU targtartarrsync--include--exclude

지금 이것을 달성하는 방법은 ssh(pubkey 인증을 통해) 원격 서버에 -ing하고 사용하는 것 입니다 gtar -czf - [other options such as --include='*.log' and --exclude='*core*', etc.]. -- 이것은 모든 정보를 쓴 stdout다음 [로컬로] 파이프하여 tar -xzf원격 프로덕션 서버에서 변경 사항이 발생하지 않도록 하고 끌어옵니다. 모든 파일을 있는 그대로 로컬 서버에 저장합니다. 이 경우 이것은 훌륭한 대안입니다 rsync. 중요하지도 tar않고 지원되지도 않는 유일한 것은 scp증분 백업과 해당 기능의 블록 수준 오류 검사 수준입니다 rsync.

sshand를 사용할 때 언급한 전체 명령은 tar다음과 같습니다(원격은 Solaris 10이고 로컬은 Debian이므로 가치가 있습니다).

cd /var/www/remotelogs
ssh -C user@remotehost "cd /path/to/remote/app.directories; gtar -czf - --include='*.log' --exclude='*.pid' --exlude='*core*' *" | tar -xz

귀하의 시나리오에서는 정반대입니다. tar -cf -로컬에서 원격 서버로 파이프됩니다 ssh user@remotehost "tar -xf -". 이러한 유형의 동작을 인용하는 또 다른 답변이 있지만 자세히 설명하지는 않습니다.

작업 속도를 높이기 위한 몇 가지 다른 옵션도 포함했습니다. 실행 시간을 가능한 한 짧게 유지하기 위해 끊임없이 모든 시간을 측정했습니다. with 압축을 사용하는 것이 무의미하다고 생각할 수도 있지만 with 플래그를 사용하여 압축을 활성화하는 tar것처럼 실제로 속도가 빨라집니다 . 내가 사용한 정확한 명령을 포함하기 위해 나중에 이 게시물을 업데이트할 수도 있지만(게시한 명령과 매우 유사함), 이번 주에 휴가 중이기 때문에 지금은 VPN을 사용하고 싶지 않습니다.-Csshssh

Solaris 10에서는 인증을 위한 가장 빠른 암호이고 작업 속도를 높이는 데도 도움이 되기 때문에 이 암호를 사용합니다. -c blowfish하지만 Solaris 11에서는 이를 지원하지 않거나 이 암호 제품군이 비활성화되어 있습니다.

또한 / 옵션을 사용하기로 선택한 경우 ssh시간이 오래 걸리는 백업을 수행하는 경우 tar실제로 원래 솔루션을 구현하는 것이 좋습니다 . screen그렇지 않은 경우 연결 유지/시간 초과 설정이 올바르게 조정되었는지 확인하십시오 ssh_config. 그렇지 않으면 이 접근 방식으로 인해 파이프가 파손될 수도 있습니다.

를 사용하기로 선택하더라도 scp저는 항상 이런 유형의 작업을 수행할 때 screen또는 를 사용하는 것이 모범 사례라고 생각합니다.tmux혹시라도. 많은 경우 나는 내 자신의 조언을 따르지 않고 이렇게 하지 않습니다. 그러나 활성 셸 세션이 연결 해제되었기 때문에 원격 작업이 실행되지 않도록 이러한 도구 중 하나를 사용하는 것은 정말 좋은 습관입니다. 어떤 식으로든 질문.

rsync나는 당신이 문제의 근본 원인을 찾고 싶어한다는 것을 알고 있습니다 . 그러나 이것이 정말로 중요한 경우 동시에 시도할 수 있는 두 가지 훌륭한 해결 방법이 있습니다.

답변3

OSX El Capitan에서 동일한 문제가 있었고 rsync v3.11로 업그레이드하여 해결했습니다. v2.6.9에서 이 문제가 발생했습니다.

답변4

원격 서버에 쓸 수 있는 내용이 있습니다.표준 출력. 이는 .profile또는 에 있을 수 있습니다 . 또는 와 .bash_profile같이 덜 명확할 수도 있습니다 . 의심스러운 경우 서버에 로그인한 질문에 기록을 복사하세요(호스트 이름을 반드시 편집하세요).sttymesg

관련 정보