매우 불안정한 인터넷 연결을 통해 파일을 어떻게 복사합니까?
때로는 연결이 끊어지고 때로는 한 컴퓨터 또는 다른 컴퓨터의 IP가 변경되고 때로는 둘 다 변경되지만 동적 DNS가 이를 포착합니다.
어떤 도구나 명령을 추천하시나요?
차이점을 복사하는 것만 으로도 꽤 좋다고 들었습니다 rsync
. 하지만 이는 다시 시작하거나 잠시 시간을 두거나 cronjob을 수행하는 등 많은 작업을 의미합니다.
좀 더 간단하고 확실한 것이 있었으면 좋겠습니다.
부록:
여기에는 때때로 한 사이트에서 다른 사이트로 5GB보다 큰 일부 매우 큰 파일이 포함된 여러 디렉터리를 복사하는 작업이 포함됩니다. 복사한 후에는 둘 다 로컬로 다른 위치로 이동됩니다.
나는 네트워크 수준에서는 아무 것도 할 수 없고 그렇게 할 지식도 없습니다.
wget을 사용하기 위해 웹 서버를 설정하고 싶지 않습니다. 이것은 안전하지 않으며 우회 경로처럼 보입니다.
SSH 연결을 설정했고 이제 rsync가 두 시스템 모두에 이미 설치되어 있으므로 rsync를 수행할 수 있습니다(rsync 데몬을 작동 및 실행할 수 없습니다).
내가 어떻게 만들 수 있는지에 대한 조언SSH를 통한 스마트 rsync그러면 일시적으로 회선이 끊어지면 계속하려고 합니까? 그러나 SSH 연결이 끊어지면 rsync는 문제가 되지 않습니다. 그래서 이런 것(https://serverfault.com/questions/98745/) 작동하지 않을 수 있습니다:
while ! rsync -a .... ; do sleep 5 ; done
어떤 아이디어가 있나요?
감사합니다!
게리
답변1
좋아요, 제 경우에는 해결책을 찾았습니다. 나는 실제로 제안을 사용하고 있습니다while 루프. 이제 다음과 같이 보입니다.
while ! \
rsync -aiizP --append --stats . -e ssh [email protected]:./path/rfiles ; \
do now=$(date +"%T") ; echo · Error at $now · ; sleep 5 ; done
while 루프가 없으면 rsync를 수동으로 다시 시작해야 합니다. 이제 그것은 매력처럼 작동합니다.
재미있는 사실: 연결이 끊어진 지 10분 후에 오류가 발생하고 연결이 다시 시작되고 약 9분 후에 오류가 발생합니다! 그 동안 터미널 창에서는 아무 일도 일어나지 않습니다. 10분이라는 시간제한이 어디서 나오는지 궁금합니다.
도움을 주셔서 감사합니다.
게리
참고: 다음은 제가 받은 시간 초과 오류입니다(10분 후).
...
thedirectory/afile.ext
Read from remote host myhost.com: Operation timed out
rsync: writefd_unbuffered failed to write 16385 bytes [sender]: Broken pipe (32)
rsync: connection unexpectedly closed (394 bytes received so far) [sender]
rsync error: unexplained error (code 255) at /SourceCache/rsync/rsync-40/rsync/io.c(452) [sender=2.6.9]
답변2
나는 확실히 추천하고 싶습니다 rsync
. rsync
연결이 중단될 가능성이 있다고 생각될 때마다 파일을 복사합니다. 복제가 실패하면 간단히 다시 시작할 수 있다는 것을 알고 있습니다.
while
성공할 때까지 자동으로 다시 시작해야 하는 경우 루프에 넣기가 쉽습니다.
답변3
rsync의 주요 문제점은 단일 파일로 계속할 수 없다는 것입니다. 복잡한 디렉토리 구조를 복사하려는 경우에는 괜찮지만, 예를 들어 단일 DVD 이미지를 복사하려는 경우에는 그다지 안정적이지 않습니다.
이 경우에는 wget을 사용합니다. 더 구체적으로,
wget -c -t 0 -T 10 http://....
특히 흥미로운 점은 단일 패킷 손실로 인해 도구가 효과적으로 정지/정지되는 일반적인 문제를 해결하는 20초 시간 제한입니다.
물론 원본에는 http 서버가 필요합니다. 이것이 비실용적이라면 다음과 같은 도구가 있습니다.
split
큰 파일을 작은 파일로 분할한 다음 rsync를 사용할 수 있습니다. 분할된 파일은 나중에 간단한 고양이로 다시 결합할 수 있습니다.
물론 성공할 때까지 rsync를 루프에서 실행할 수도 있습니다.
while ! rsync ...; do echo next try; done
댓글 뒤 확장
rsync
할 수 있는-partial
플래그를 사용하여 파일을 계속 진행합니다 . @GregHewgill에게 감사드립니다! :-)
답변4
파일 복사 도구 수준에서 이 문제를 해결하려는 경우 rsync로 충분합니다. -au
rsync가 동일한 파일을 여러 번 동기화하려고 시도하지 않도록 옵션을 사용하십시오 . Rsync는 최소한 파일 목록을 교환하고 중단하기 전에 하나의 파일을 완전히 전송할 수 있는 한 진행됩니다. 이를 보장할 수 없는 경우 네트워크 수준 도구가 없으면 문제가 발생하게 됩니다.
나는 이 문제를 네트워크 수준에서 해결하는 것이 더 쉽고 더 자연스럽다고 생각합니다. 즉, 신뢰할 수 없는 네트워크 연결 위에 안정적인 네트워크 터널을 구축하는 것입니다. 몇년전에 사용했었는데바위정확히 이 목적을 위해 유지되지 않으며 최근에 컴파일하거나 사용해 본 적이 없지만 작동하지 않는 근본적인 이유는 없습니다. 보다이 공간교체.