scp
서버간 파일 전송을 하기 위해 기본적으로 scp를 사용합니다.
scp [출발_파일] [목적지IP]:[포트]/[도착할 상대경로]
Bash
복사
하지만 scp는 폴더가 대용량일 경우, 파일의 개수가 많을 경우 시간이 매우 오래걸립니다.
더 나은 방법이 있을까요?
tar + ssh
방법은 압축 후 ssh로 전송하는 것입니다.
tar -cp [복사 디렉토리] | ssh [목적지 주소] tar xvp -C [목적지 절대경로]
Shell
복사
이 경우, 약 2배의 빠른 전송속도를 보여줍니다.
scp: 246 seconds
rsync+ssh: 130 seconds
tar+ssh: 149 seconds
tar+netcat: 131 seconds
Shell
복사
Linuxaria 에서는 다음과 같이 권장합니다.
Conclusion:
1.
절대 scp를 사용하지 마십시오. 사용할 수 있는 최악의 방법입니다
2.
사용 가능한 네트워크와 컴퓨터에 따라 rsync와 tar의 결과가 달라집니다.
3.
빠른 네트워크에서 tar + ssh가 약간 더 성능이 좋은 것 같습니다. 암호화가 해제된 netcat(ssh에 비해)은 훨씬 더 나은 결과를 제공할 수 있을 것으로 기대합니다.
4.
Rsync는 점진적인 방식으로 작동할 수 있으므로 작업을 시작할 때 여러 번 수행해야 한다는 것을 알고 있으면 다른 방법에 비해 사용성 측면에서 매우 강력한 이점이 있습니다(예: 두 사이트 간에 같은 날에 더 많은 동기화 수행).
Rsync나 netcap과 같은 다른 방법들도 있지만, 보안이나 안정성 측면에서 tar + ssh를 사용하기로 했습니다.
쉽게 사용하기
그렇다면, 자주 사용하기 위에 쉘 스크립트 함수로 만들어보겠습니다.
function sscp()
{
tar -cp $1 | ssh $2 tar xvp -C $3
}
Shell
복사
이름은 임의로 sscp라고 지었습니다. 이를 ~/.zshrc에 저장하고 쉘을 실행합니다.
그렇다면 다음과 같이 사용할 수 있습니다.
sscp [출발_파일] [목적지] [도착할 상대경로]
Shell
복사
예를 들어보겠습니다.
먼저 Host 서버의 ~/.ssh/config 에 목적지를 미리 설정합니다.
HOST my_server
IdentityFile ~/.ssh/id_rsa
Port 22
User work
Shell
복사
그 후, Host의 ~/dataset 으로부터 my_server의 ~/dataset 으로 폴더를 복사하고자 합니다.
sscp ~/dataset my_server ~/dataset
Shell
복사
이렇게 기존의 scp보다 2배 이상 빠른 파일 전송 방법을 알아보았습니다. tar + ssh 조합을 통해 대용량 파일을 더욱 효율적으로 전송할 수 있으며, 쉘 스크립트 함수를 만들어 편리하게 사용할 수 있습니다.
보안과 안정성을 고려하면서도 성능을 최적화하고 싶을 때, 이 방법을 활용해보시기 바랍니다.