tar 와 ssh 를 이용한 파일 원격 전송 속도 향상 하기

수많은 수의 파일과 디렉토리를 원격지 서버로 빠르게 전송하는 방법으로 tar 와 ssh 를 이용한 방법을 소개함.

적은 수의 대용량 파일을 복사할 경우 흔히 사용하는 ftp나 scp를 이용하는 것이 성능 측면에서 더 효율적이다. 하지만 작은 크기의 수많은 파일을 원격지에 전송할때는 실제 전송되는 파일의 전체 크기에 비해 많은 시간이 소요된다.

이는 파일 전송 시 전체 용량의 문제가 아니라 전송해야하는 파일의 수가 문제가 된다.
즉 파일을 원격지로 전송하기 위해서는 ftp 나 ssh 프로토콜을 통해 해당 프로그램에서 전송에 관련된 instance 를 열어 전송을 하는데, 파일이 하나 전송될때 마다 이런 절차가 내부적으로 반복되어진다. 많이 파일 수가 수천만개라면, 실제 파일 용량을 전송하는데, 소요되는 시간보다, 해당 instance를 open/close하는 데 소요되는 시간이 더 많이 걸리게 된다. 이런 비효율적인 시간을
최대한 축소하고자 할때 아래 방법을 사용하면 된다.

# tar cz – <전송하는 최상위 디렉토리>/ | ssh <원격지서버주소> tar xz -C <전송받을디렉토리 위치>

위와 같이 처리하면 전송하고자 대상의 최상위 디렉토리를 tar로 하나의 파일로 묶으면서, 동시에
원격지서버로 전송을한 후, 바로 묶인 파일을 해제하게 된다.

전송 대상 파일 수가 많으면 많을수록 기존의 ftp 나 scp에 비해 높은 성능을 나타낼것이다.

서진우

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

2 Responses

  1. Avatar 김무성 댓글:

    테스트 결과 좋은 결과를 얻을 수 있었습니다.

    테스트는 다음과 같이 하였습니다.

    i=0
    while [ $i -le 100000 ]; do touch $i; i=$((i+1)); done

    위와 같이 100000개 파일을 생성하여 원격지로 파일을 전송해 보았습니다.
    결과는 많은 차이가 있었습니다.

    일반적으로 ssh로 전송 결과 4분정도의 시간이 소요 되었지만

    tar cz – /ttttt | ssh root@192.168.123.245 tar xz -C /root

    위와 같이 실행결과 4초정도의 시간에 모든 파일을 전송할 수 있었습니다.

    좋은 정보 감사합니다.

  2. Avatar 임상호 댓글:

    scp 사용이 금지된 상태에서 ssh를 이용해서 파일 전송을 하는 방법을 찾다가 관련된 내용이 있어 테스트를 해보니 전송이 잘 됩니다.
    속도 부분은 테스트 하지 못했지만 윗 분 결과를 보건데 성능 부분도 좋은 것 같습니다.
    좋은 정보 감사합니다.

페이스북/트위트/구글 계정으로 댓글 가능합니다.