System Administrator > Service Management
rsync 사용법 - data backup 포함
하단의 "path 에 slash 가 있을 경우 동작 방식"을 숙지하고 사용하세요. 소개 rsync http://rsync.samba.org/ 는 Remote Sync 의 약자로 samba 의 핵심 개발자인 Andrew Tridgell 이 만든 file & directory 동기화를 위한 프로토콜이자 Unix용 커맨드라인 유틸리티이다. 전송시에 네트웍 대역폭을 최소화하는 delta encoding algorithm 을 구현하여 rcp 나 scp 보다 훨씬 빠르고 효율적으로 site 간의 데이타를 동기화한다. rsync는 client와 server 프로그램이 모두 포함되어 있으며 server 로 구동시 TCP의 873 포트를 사용한다. server 구동시 SSH 나 RSH 같은 Remote Shell protocol 기반에서 동작할 수도 있으므로 ssh 기반으로 rsync 를 사용하면 방화벽 오픈을 할 필요가 없이 편리하게 사용할 수 있다.(SSH 추천) 주요 용도로는 전통적인 rcp http://en.wikipedia.org/wiki/Rcp_(Unix), scp http://en.wikipedia.org/wiki/Secure_copy를 대치하는 용도로 사용할 수 있으며 원격 사이트 미러링(Remote Site mirroring), 데이타 백업(data backup) 등의 용도로도 사용할 수 있다. 용법 rsync 는 다음과 같은 문법으로 사용한다. rsync options source destination 주요 옵션은 다음과 같다. -v: verbose 자세한 정보 출력 -r : 재귀적으로 하위 디렉터리 까지 복사(단 전송시 타임스탬프나 permission을 보존하지 않는다) -a : archive mode. -r, -t(타입스탬프 보존), -l (심볼릭 링크 보존), -p(permission 보존), -g(g그룹 보존), -o(소유자 보존 - root 만 가능), -D(device, special 파일 보존)과 동일하다. 일반적으로 rsync 로 복제시 -a 옵션에 -z 옵션을 추가하면 충분하다. -z : 데이타 압축 -h : human-readable, output numbers in a human-readable format path 에 slash 가 있을 경우 동작 방식 source path 에 trailing slash 가 있을 경우 rsync 는 목적지에 폴더를 생성하지 않으니 주의해야 한다. 백업 대상 소스인 test 폴더에 dir1, dir2 라는 하위 폴더가 있다고 가정ㅇ해 보자. $ tree test test ├── dir1 └── dir2 다음 명령어는 다음과 같이 동작한다. $ rsync -a test test_dest $ tree test_dest/ test_dest/ └── test ├── dir1 └── dir2 목적지인 test_dest 하위에 source 경로인 test 가 생성되고 그 안에 파일과 폴더가 복사된다. 소스에 / 를 추가할 경우 아래와 같이 목적지에 소스의 폴더를 생성하지 않고 복사한다. $ rsync -a test/ test_dest $ tree test_dest/ test_dest/ ├── dir1 └── dir2 위와 같이 / 가 있는지 여부에 따라 동작이 다르므로 rsync 로 백업시 주의해야 하며 다음 rsync 명령어는 둘 다 동일한 동작을 수행한다. $ rsync -azvh /var/lib/mysql /home/backups $ rsync -azvh /var/lib/mysql/ /home/backups/mysql 사용하기 Local ➡ Local mysql 의 DB 를 /home/backups/mysql 에 복제 rsync -azvh /var/lib/mysql /home/backups Local ➡ Remote Local 의 /root/data 디렉터리를 example.com 의 /home/lesstif/backup 에 복제. 호스트 명(example.com) 뒤에 : 가 빠지면 제대로 동작 안 하니 주의해야 한다. $ rsync -avz /home/lesstif/data/ lesstif@example.com:/home/lesstif/backup/ Remote ➡ Local example.com 의 /home/lesstif/data 디렉터리를 local 의 /home/lesstif/backup/ 에 복제 $ rsync -avz lesstif@example.com:/home/lesstif/data /home/lesstif/backup/ Remote 의 일부만 Local 에 복제 백업 대상 폴더에 여러 개의 하위 폴더가 있고 특정 폴더만 백업이 필요할 수 있다. 예로 아래와 같이 src 에 3개의 하위 폴더가 있고 dir1, dir3 만 복제가 필요한 경우 $ tree ../src/ ../src/ ├── dir1 │ └── file1 ├── dir2 │ └── file2 └── dir3 └── file3 trailing slash 에 따라 rsync 의 동작이 다른 점을 활용해서 아래와 같이 for 루프를 돌면서 src 의 맨 뒤에 / 를 붙여주면 dir1과 dir3 의 내용만 복제할 수 있다. $ cd src $ for i in dir1 dir3; do rsync -avz les …