로컬 폴더에서 원격 서버로 동시 병렬 복사

로컬 폴더에서 원격 서버로 동시 병렬 복사

각각 약 1500개의 파일이 들어 있는 여러 폴더가 있습니다. 각 폴더를 통과한 다음 환경에 따라 하나 또는 4개의 원격 호스트로 파일을 보내는 for 루프가 있습니다. 현재 저는 rdist매일 변경되는 거의 모든 파일을 사용하고 있으며 때로는 파일 내의 날짜와 시간만 변경됩니다.

pscp, prsyncGNU 와 같은 몇 가지 명령을 접했습니다 parallel. 여러 호스트에서 실험했는데 pscprdist다 비슷한 결과를 얻었습니다.

  1. rdistprsync성능면에서 어떤 차이가 있나요? 제가 이해한 바는 prsync파일이 여러 호스트에서 마이그레이션될 수 있다는 것 rdist입니다. 테스트를 통해 제가 이해한 바는 단일 호스트에서 여러 파일을 병렬로 복사할 수 없으며 prsync단일 호스트에서 여러 파일을 병렬로 복사할 수 없다는 것입니다. rdist여러 호스트에 걸쳐 병렬로 파일만 복사할 수 있습니다. 그렇다면 성능 측면에서 둘 사이에 차이가 있습니까?

    의 경우 rdist내 스크립트는 다음과 같은 distfile을 생성합니다.

    HOSTS( user@server user@server2 user@server3 )
    RUN:(/var/inputpath/folder)
    -> ${HOSTS}
    install (/var/outputpath/folder)
    

    그런 다음 rdist아래와 같이 실행합니다.

    rdist-f /dist-file-path -P /path/to/ssh
    
  2. GNU를 사용 하여 parallel로컬 복사본을 테스트 했는데 . 이를 통해 로컬 시스템에서도 여러 파일을 병렬로 복사할 수 있습니다.cpzip

pscp그래서 제 질문은, GNU 병렬 처리를 say 또는 와 rdist결합하는 것이 가능합니까 prsync? 입니다.

답변1

rsync이는 변경 사항이 거의 없는 경우 2개의 디렉터리를 동기화하는 데 이상적입니다. 심지어 작동합니다 -z.

불행하게도 rsync이는 지연 시간에 크게 좌우되기 때문에 대규모 연결(예: 1Gbps)을 채울 수 없는 경우가 많습니다.

rsync이는 여러 개를 병렬로 실행하면 완화될 수 있습니다.

에서 man parallel:

예: rsync 병렬화

rsync는 훌륭한 도구이지만 때로는 사용 가능한 대역폭을 채우지 못할 때도 있습니다. 이는 고속 연결을 통해 여러 개의 대용량 파일을 복사할 때 종종 문제가 됩니다. 다음 명령은 src-dir의 각 대용량 파일에 대해 서버 fooserver의 dest-dir에 대한 rsync를 시작합니다.

cd src-dir; find . -type f -size +100000 | \
  parallel -v ssh fooserver mkdir -p /dest-dir/{//}\; \
  rsync -s -Havessh {} fooserver:/dest-dir/{}

생성된 디렉터리는 잘못된 권한으로 종료될 수 있으며 더 작은 파일은 전송되지 않습니다. 이러한 문제를 해결하려면 마지막으로 rsync를 실행하세요.

rsync -Havessh src-dir/ fooserver:/dest-dir/

파일이 작은 경우 다음을 수행할 수 있습니다.

find ... |
  parallel -j10 -X rsync -zR -Ha ./{} fooserver:/dest-dir/

-j10가장 좋은 숫자를 찾을 때까지 조정하십시오 .

모든 파일을 단일 디렉토리에 복사하는 것이 아니라 디렉토리 구조가 복사되도록 이를 효과적으로 ./{}수행 해야 합니다.rsync -R

관련 정보