본문 바로가기
개발/리눅스 서버

100G 넘는 파일을 어떻게 복사할까? - rsync

by ny0011 2020. 1. 21.
반응형

A서버 -> B서버로 root 권한이 없는 유저 X의 대용량 파일을 전송해야 했다.

 

< 삽질 정리 >

1. 처음에 권한 생각도 못했던 시기

sudoer인 내가 유저 X의 A서버 홈 디렉토리를 X의 B서버로 홈 디렉토리로 바로 옮겨주면 되겠지 했는데 /home은 root꺼여서 B서버의 root 권한이 필요했다. 

생각해보니 나는 A서버의 sudoer니까 B서버에는 없는게 당연했다.ㅜㅜ

sudoer              sudoer           권한 둘다 필요
A:/home/X --> B:/home/X

구글링을 해보니 나 같은 분이 몇 년전에도 계셨다.

찾아보니 /home을 직접 copy하지 말고 /home/X 밑에 내가 원하는 폴더를 집어 넣으란다.

그럼 ls 찍어서 for문 돌려서 하나씩 보내야 하나 압축해서 파일 보내는게 좋은가 고민이 되었다.

https://askubuntu.com/questions/66492/scp-copy-over-ssh-doesnt-work-permission-denied-error-please

scp copy over ssh doesn't work - permission denied error, please?

It's driving me nuts! I just want to transfer one simple file from laptop to server. I'm using ubuntu on both machines. So I have: -rwxr-xr-x 1 sandro 414622 2011-10-14 23:42 sandrophoto-html...

askubuntu.com

일단 100기가를 압축시켜놓고 더 찾아보자!

 

2. 폴더 하나씩 압축해서 전송하고 바로 압축 해제하는 방법

https://unix.stackexchange.com/questions/10026/how-can-i-best-copy-large-numbers-of-small-files-over-scp

How can I best copy large numbers of small files over scp?

I have a directory that's got several gigabytes and several thousand small files. I want to copy it over the network with scp more than once. CPU time on the source and destination machines is chea...

unix.stackexchange.com

지금보니 아래쪽에 rsync 내용이 있었네... 멍췅....

그래도 나름 이 방법도 신선했다...

$ tar cz <files> | ssh user@host "cd /wherever; tar xvz"

3. 생각해보니 난 A서버 sudoer니까 X의 계정으로 들어가서 B서버 X계정으로 보내면 이름이 똑같으니까 될 것 같은 기분이 왔다.

-> 된다아아아

-> 100기가를 압축시키는 것 보다 폴더마다 하나 씩 바로 보내는 게 더 빠를 것 같아 압축 시키던 프로세스는 빠염

-> A서버와 B서버 모두 로그인 안하게 ssh 키 등록해두고 scp를 보내보자!

X@A $ cat ~/.ssh/id_rsa.pub
~~~~
X@B $ vi ~/.ssh/authorized_keys 에 추가

$ scp <files> X@A:/home/X

https://zetawiki.com/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4_sshpass_%EC%82%AC%EC%9A%A9%EB%B2%95

리눅스 sshpass 사용법 - 제타위키

다음 문자열 포함...

zetawiki.com

 

 

< 결론 >

 

4. rsync 로 선택했다

 

1기가는 scp로 보내겠는데 100기가 되는 큰 용량도 가능할까 하는 의문이 갑자기 들어서 검색해보니

역시나 구글은 답을 알고 있다.

 

 

https://unix.stackexchange.com/questions/190537/transferring-large-8-gb-files-over-ssh

Transferring large (8 GB) files over ssh

I tried it with SCP, but it says "Negative file size". >scp matlab.iso xxx@xxx:/matlab.iso matlab.iso: Negative file size Also tried using SFTP, worked fine until 2 GB of the file had transfer...

unix.stackexchange.com

Rsync is very well suited for transferring large files over ssh because it is able to continue transfers that were interrupted due to some reason. Since it uses hash functions to detect equal file blocks the continue feature is quite robust.

대충 암튼 좋은 프로그램이다.

 

A서버에 있는 폴더를 B서버로 보내보자

X@A $ rsync -arz <files> X@B:/home/X

잘 되니 자동 스크립트를 만들쟈

#!/bin/bash

while read list
do
rsync -arz $list X@B:/home/X
done < list.txt

 

 

참고한 한글 자료

 

https://www.joinc.co.kr/w/Site/Tip/Rsync

 

Rsync 10가지 사용 예제들

 

www.joinc.co.kr

 

 

https://serverfault.com/questions/346356/how-to-add-timestamp-and-file-list-to-rsync-log

https://twpower.github.io/155-use-file-or-command-ouput-in-while-loop

후후.... 오늘 회사가서 얘기해보니 첨 하던대로 B서버 X 홈 디렉터리 밑으로 전부 scp 때리고 mv하면 됐다.. mv는 파일 링크만 바꾸는 개념이라 속도 차이 안난다고ㅠ 멍청하면 잠을 못자요...

'개발 > 리눅스 서버' 카테고리의 다른 글

CVE-2021-3156 sudo 보안 취약점  (0) 2021.02.26
gerrit + Apache2 설치 및 설정  (0) 2020.02.03
parse json with default bash only  (0) 2020.01.29
linux 명령어 모음집  (0) 2020.01.22
[ubuntu] 파티셔닝  (0) 2020.01.06

댓글