재동기화 시간 초과

재동기화 시간 초과

디렉터리를 원격 서버의 디렉터리로 동기화해야 합니다. 현재는 rsync -ca이 작업을 정기적으로 수행하지만 디렉터리가 매우 크고 시간 초과 오류로 인해 전체 프로세스가 실패합니다.

이제는 "일회성" 방법이 아닌 파일 동기화를 통해 파일을 찾고 있습니다. find발견된 각 서버 와 유사합니다 rsync. 이를 수행하는 가장 쉬운 방법은 무엇입니까?

다음 오류가 발생합니다.

receiving incremental file list
Write failed: Broken pipe
rsync: connection unexpectedly closed (1175057 bytes received so far) [receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(601)[receiver=3.0.7]
rsync: connection unexpectedly closed (287 bytes received so far) [generator]
rsync error: unexplained error (code 255) at io.c(601) [generator=3.0.7]

답변1

서버가 SSH 연결 수준에서 시간 초과된 것 같습니다.

그래서 다음 설정을 추가했습니다.

KeepAlive yes
ServerAliveInterval 20
ServerAliveCountMax 6

/etc/ssh/ssh_config(또는 ) 에게 ~/.ssh/config이제 유망해 보입니다.

답변2

업데이트: 체크섬을 생성할 때 rsync가 시간 초과된 것 같으므로 다음과 같이 작동할 수 있는 몇 가지 다른 접근 방식이 있습니다.

먼저 하나의 rsync만 열어 두려면 (Michael Kjörling이 언급한 것 외에) 이 옵션을 사용할 수 있습니다 --sockopts. 이를 통해 SO_RCVTIMEOUT=0데이터 수신 시간 초과 비활성화 와 같이 코드에서 소켓을 생성할 때 설정한 것과 동일한 유형의 소켓 옵션을 설정할 수 있습니다 .

둘째, 이 --progress-file옵션은 진행 정보를 지속적으로 다시 전송하여 시간 초과를 트리거하지 않는 데 충분할 수 있습니다.

셋째, 파일별 동기화를 수행할 수 있습니다. 예를 들면 다음과 같습니다.

for i in ls /path/to/dir; do rsync -ca $i remoteserver:/path/to/dir; done

넷째, ssh를 전송 메커니즘으로 사용하고 연결을 유지하기 위해 적절한 방식으로 TCPKeepAliveServerAliveInterval/ 옵션을 사용할 수 있습니다.ServerAliveCountMax


원래 답변: 이미 rsync하다파일별 접근 방식 - 동기화할 파일 목록의 각 파일을 확인하여 대상 시스템에 존재하지 않거나 대상 시스템의 파일과 다른 파일만 동기화합니다.

전송 시간을 줄이는 한 가지 방법은 -z옵션과 플래그를 사용하여 전송 중에 압축하여 --partial전송이 중단된 경우 부분적으로 동기화된 파일을 유지하여 rsync가 원래 위치에서 계속될 수 있도록 하는 것입니다. Michael Kjörling이 언급한 --timeout 및 --contimeout 옵션도 유용할 수 있습니다.

답변3

어쩌면 이런 게 있지 않을까요?

find . -type f -exec 'rsync' '{}' ';'

이는 현재 디렉터리의 각 일반 파일에 대해 rsync를 한 번 수행하고 파일 이름(token으로 표시됨 {})을 명령줄 인수로 전달합니다.

관련 디렉터리에 심볼릭 링크, 장치 파일 등이 있는 경우 논리를 반대로 시도할 수 있습니다.

find . -not -type f -exec 'rsync' '{}' ';'

이는 요청한 작업을 수행한다는 의미에서 "작동"해야 합니다(파일당 한 번 rsync 시작). 하지만 나는 당신이 잘못된 방향으로 가고 있다고 생각합니다.

rsync 매뉴얼 페이지에는 grep for 의 --timeout(I/O 시간 초과) 및 (연결 시간 초과)가 나열되어 있습니다 .--contimeouttimeout

답변4

저에게는 느린 연결을 통해 대규모 rsync 전송을 재개할 때 이런 일이 계속 발생합니다. 나는 ssh의 모든 문제를 피하기 위해 rsyncd를 사용하기도 합니다.

-z압축( 또는 --compress)을 활성화하면 문제가 해결되는 것으로 나타났습니다 . 전송은 거의 즉시 재개됩니다.

관련 정보