Profile picture

[Linux] rsync - 데이터 백업

JaehyoJJAng2023년 04월 16일

rsync

rsync는 'Remote Sync'의 약자로, 빠른 증분 파일 전송을 제공하는 오픈소스 유틸리티이다.

rsync로 데이터 전송 시 네트워크 대역폭을 최소화하는 Delta Encoding Algorithm을 구현하여 scp보다 훨씬 빠르고 효율적으로 데이터를 동기화할 수 있다.

또한 rsync를 통해 서버 간의 동기화나 백업을 진행할 수도 있다.
root 권한이 따로 필요 없고, 익명 사용자(anonymous)를 지원한다. 복사 시 심볼릭 링크, 디바이스, 소유자 그룹, 허가권 등을 복사할 수 있고, exclude, exclude-from 옵션도 지원한다.

rsync는 client와 server 프로그램이 모두 포함되어 있으며, server로 구동 시 TCP 873번 포트를 사용한다.

server 구동 시 SSH나 RSH 같은 Remote Shell Protocol 기반에서 동작할 수도 있으므로 ssh 기반으로 rsync 사용 시 방화벽을 오픈 할 필요없이 편리하게 사용 가능하다.


사용 방법

$ rsync [options] <src> <dest>

rsync 옵션

주요 options

옵션 설명
-a, --archive 압축 모드. -rlptgoD와 동일
-r, -t(타입스탬프 보존), -l (심볼릭 링크 보존), -p(permission 보존), -g(g그룹 보존), -o(소유자 보존 - root 만 가능), -D(device, special 파일 보존)
일반적으로 -a 옵션에 -z 옵션을 추가하면 충분
-v, --verbose 상세한 정보 출력
-r, --recursive 하위 디렉터리까지 재귀적으로 실행
-z 데이터 압축
-h human-readable, output numbers in a human-readable format

기타 options

옵션 설명
# 기타 옵션
-A, --acls ACLs를 보존(-p 옵션과 함께 사용)
-b, --backup 백업 생성(--suffix 나 -backup-dir 참조)
-c, --checksum 시간이나 크기가 아니라 checksum으로 파일을 비교
-d, --dirs 하위 디렉터리를 포함하지 않고 전달
-e, --rsh=COMMAND 원격 셸을 지정
-E, --executability 실행 권한을 보존
-g, --group 그룹을 보존
-H, --hard-links 하드 링크를 보존
-k, --copy-dirlinks 디렉터리의 심볼릭 링크는 원본 디렉터리로 변경
-K, --keep-dirlinks 디렉터리의 심볼릭 링크는 심볼릭 그대로 취급
-l, --links 심볼릭 링크는 심볼릭 링크 형태 그대로 복사
-L, --copy-links 심볼릭 링크의 원본 파일이나 디렉터리로 변경
-o, --owner 소유자를 보존(슈퍼유저만 해당)
-p, --perms 퍼미션을 보존
-q, --quiet 에러가 아닌 메시지는 출력하지 않음
-t, --times 변경 시간을 보존
-u, --update 새로운 파일은 덮어쓰지 않음
--backup-dir=DIR 지정한 디렉터리(DIR)에 백업을 만듦.
--bwlimit 전송 대역폭을 제한(KByte 기준)
--chmod=CHMOD 파일이나 디렉터리 퍼미션(CHMOD)을 지정
--delete 서버 쪽에는 없고 클라이언트에만 있는 파일은 지움
--devices 디바이스 파일을 보존(슈퍼유저만 해당)
--existing 추가된 파일은 전송하지 않고 업데이트된 파일만 전송
--exclude 불필요한 파일을 제외

사용 예시

Local 파일 Local에 복제

# /home/${USER} 디렉토리를 압축하여 /backup/${USER} 디렉토리에 상세한 정보와 함께 백업
$ rsync -av /home/${USER} /backup/${USER}

Local 파일을 Remote에 복제

# /home/${USER}/monitoring/config/ 디렉토리를 압축하여 monitor-server 서버의 /home/monitor/loki/config 디렉토리에 복제
$ rsync -av /home/${USER}/monitoring/config/ monitor-server@192.168.121.149:/home/monitor/loki/config/

Remote 파일을 Local에 복제
옵션 미지정 시 rsync에서 데이터 삭제는 진행되지 않음. 삭제를 원할 시 --delete 옵션을 사용

# monitor-server 서버의 /home/monitor/loki/config 디렉토리를 로컬 서버의 /home/${USER}/backup/ 디렉토리에 백업
# --delete : monitor-server 서버의 /home/monitor/loki/config 디렉토리 목록에 존재하지 않는 항목들은 로컬에서 삭제됨.
$ rsync -avzr --delete monitor-server@192.168.121.149:/home/monitor/loki/config /home/${USER}/backup/

디렉터리 구조만 복사

# -d, --dirs : 원본의 디렉토리 구조만 복제하고 안의 파일들은 복제하지 않음.
$ rsync -vd monitor-server:/home/monitor/data .

ssh 접근 포트가 22번이 아닐 경우에 rsync 연결방법
보안 때문에 SSH를 다른 포트(Ex: 66022)에 사용하는 서버를 연결 시 아래와 같이 -e 옵션 뒤에 ssh와 연결할 포트를 추가하고 실행 가능

$ rsync -avz -e 'ssh -p 66022' monitor-server@192.168.121.149:/home/monitor/data /home/${USER}/backup

불필요한 파일 제외시키기
USB를 마운트해서 복사하는 경우 휴지통이나 미리보기 데이터등의 불 필요한 파일은 --exclude 옵션으로 명시적으로 지정해서 제외가 가능하다

$ rsync -avpz --delete --exclude="lost+found" 192.168.121.100::TEST/ /home/${USER}/test/

💡 '192.168.121.100::TEST/' - '::'는 무엇?

rsync는 네트워크 상에서 파일을 전송하기 위해 주로 사용되며, 원격 시스템에 있는 특정 모듈에 접근하여 파일을 동기화할 때 사용됩니다. 이때 ::는 rsync에게 원격 시스템의 모듈을 사용하겠다는 것을 나타내며, 일반적으로 IP 주소나 호스트명 뒤에 ::를 붙여 해당 모듈을 지정합니다.

따라서 예를 들어 192.168.10.100::TEST는 192.168.10.100이라는 원격 호스트의 TEST라는 rsync 모듈을 가리킵니다. 이 모듈은 원격 서버에서 rsync 데몬이 제공하는 특정 디렉토리나 파일을 가리킬 수 있습니다.

만약 단순한 SSH 프로토콜을 통한 파일 전송이었다면 192.168.10.100:TEST와 같은 형식이 사용될 수 있지만, rsync에서는 일반적으로 ::를 사용하여 모듈을 지정하는 방식입니다.


현재 경로에 있는 모든 파일 압축해서 원격지에 보내기

$ rsync -avz -e ssh ./* jaehyo@192.168.219.100:/home/jaehyo/jupyter-notebook/datas

Loading script...