rsync, ssh 를 사용한 서버 파일 복사.

AWS Lightsail 에, 매일/매주 특정 파일및 DB를 복사하게끔 Cron job 을 설정해놓았다. 문제는, 그게 저장된 위치가 시스템이 저장되는 곳과 같은 디스크라는 데 있다. ‘보관본’의 관점에서 보면, 전혀 쓸모가 없다.
AWS 에 독립된 디스크가 있고, 그곳으로 자동 저장하게끔 할 수 있다면 좋겠지만, 그건 또 그것 나름대로 돈이 드니 굳이 그럴 이유는 없고.

집구석에 SBC 등으로 된 서버가 있고, 그게 24시간 돌아간다면, 이 곳으로 자동 복사하게끔 설정해놓을 수도 있지만..
굳이 그럴 필요까지는 없을 듯 하여, 그냥 생각날 때마다 내 PC 로 저장하게 하려고 한다.

그 때 필요한 명령, scp.

그런데, 조금 검색을 해보니 scp 보다는 rsync 를 쓰라고 한다. (정확한 이유는 모르겠다.)
아무튼, rsync 와 ssh 의 조합은 이런 식이 된다.

rsync -avz -e ssh Host:/Directory /home/xxx/yyy

Host 는 ssh config 에 설정된 호스트 이름이다. 직접 서버 주소를 입력할 수도 있지만, 이렇게 하는 편이 만배는 쉽고 편하다. 자주 쓴다면 Alias 또는 Script 까지 만드는 게 좋다.

rsync 선택사항에 대해선 아래에 간략하게 정리.

-a : -rlptgoD 와 동일
-v : 설명 추가
-z : 압축
...
-r : Recursive (하위 디렉토리 포함)
-l : symlink 는 symlink 로 취급 (원본이 심링크라면 복사본도 심링크)
-p : Preserve Permissions (파일 허가권 동일하게 보존)
-t : Preserve modification Times (파일 수정시간 동일하게 보존)
-g : Preserve Group (그룹명 보존)
-o : Preserve Owner (사용자명 보존)
-D : --devices --specials 와 같은데, 디바이스 파일, 스페셜 파일도 복사하라는 뜻이다.

-z 는, 사실 별 필요는 없을 듯 하다. 어차피 저 파일들은 모두 압축이 돼 있으므로.

** 디렉토리 뒤에 / 를 붙이고 안붙이고의 차이!!!

다음 두 명령의 결과가 같을까?

rsync -av -e ssh Host:/mydir1 /home/xxx/yyy
rsync -av -e ssh Host:/mydir1/ /home/xxx/zzz

첫번째 명령은, /home/xxx/yyy/mydir1 을 생성한다.
두번째 명령은, /home/xxx/zzz 아래에, mydir1 산하의 파일들을 복사한다.

디렉토리 끝에 슬래시를 붙이면, 그 산하 파일(및 디렉토리)들을 복사하라는 뜻이 되고, 슬래시가 없으면, 그 자체를 복사하라는 뜻이 된다.

Add a Comment

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다