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 ssh
와 tar
-- /를 사용했습니다. GNU는 권한 /속성 저장, 압축 등 실제로 찾을 수 있는 많은 옵션을 지원합니다 .GNU tar
gtar
tar
rsync
--include
--exclude
지금 이것을 달성하는 방법은 ssh
(pubkey 인증을 통해) 원격 서버에 -ing하고 사용하는 것 입니다 gtar -czf - [other options such as --include='*.log' and --exclude='*core*', etc.]
. -- 이것은 모든 정보를 쓴 stdout
다음 [로컬로] 파이프하여 tar -xzf
원격 프로덕션 서버에서 변경 사항이 발생하지 않도록 하고 끌어옵니다. 모든 파일을 있는 그대로 로컬 서버에 저장합니다. 이 경우 이것은 훌륭한 대안입니다 rsync
. 중요하지도 tar
않고 지원되지도 않는 유일한 것은 scp
증분 백업과 해당 기능의 블록 수준 오류 검사 수준입니다 rsync
.
ssh
and를 사용할 때 언급한 전체 명령은 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을 사용하고 싶지 않습니다.-C
ssh
ssh
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
같이 덜 명확할 수도 있습니다 . 의심스러운 경우 서버에 로그인한 질문에 기록을 복사하세요(호스트 이름을 반드시 편집하세요).stty
mesg