2026. 08. 12. 오후 02:55

[Ubuntu] rsync 사용법 – 설치부터 전송, 백업, rsyncd.conf 설정까지

보람줄 프로필
보람줄
조회 7
0

리눅스 서버를 관리하다 보면 파일을 다른 디스크에 백업하거나 다른 서버로 동일하게 복사해야 할 일이 자주 생깁니다.

단순한 파일 복사는 cp scp 로도 가능하지만, 같은 데이터를 반복해서 전송해야 한다면 rsync 가 훨씬 편리합니다.

rsync 는 로컬 또는 원격 시스템 간에 파일과 디렉터리를 복사할 수 있으며, 기존 대상과 비교해 달라진 데이터를 효율적으로 전송하는 기능을 제공합니다.

백업이나 서버 간 데이터 동기화에 많이 사용되는 이유입니다.

이번 글에서는 Ubuntu에서 rsync를 설치하고 실제로 자주 사용하는 명령어부터 rsyncd.conf를 이용한 서버 설정까지 정리해 보겠습니다.

rsync 설치

Ubuntu에서는 apt 를 이용해 설치할 수 있습니다.

sudo apt update
sudo apt install -y rsync

설치가 완료되었다면 버전을 확인합니다.

rsync --version

Ubuntu 패키지 저장소에서도 rsync 를 로컬과 원격 파일 복사를 지원하는 패키지로 제공하고 있습니다.
원격 서버와 SSH 방식으로 사용할 경우에는 접속하는 서버와 대상 서버 양쪽에 rsync가 설치되어 있는지 확인하는 것이 좋습니다.

rsync 기본 사용법

기본 형식은 간단합니다.

rsync [옵션] [원본] [대상]

예를 들어 /data 의 내용을 /backup/data 로 복사하려면 다음과 같이 사용할 수 있습니다.

rsync -avh /data/ /backup/data/

여기서 주의할 부분은 원본 경로 마지막의 / 입니다. 아래 명령어는 data 디렉터리 자체를 복사합니다.

rsync -avh /data /backup/

마지막에 /를 붙이면 data 디렉터리 안의 내용을 복사합니다.

rsync -avh /data/ /backup/

rsync 공식 매뉴얼에서도 원본 디렉터리 마지막의 / 유무에 따라 복사 결과가 달라지므로 주의해야 합니다.

자주 사용하는 rsync 옵션

실제로는 모든 옵션을 외울 필요 없이 다음 정도를 자주 사용합니다.

옵션

설명

-a

권한, 수정 시간, 심볼릭 링크 등을 유지하는 Archive 모드

-v

전송되는 내용을 자세하게 출력

-h

용량을 사람이 읽기 쉬운 형태로 표시

-P

전송 진행률 표시 및 중단된 파일 보존

-z

네트워크 전송 시 압축

-n

실제 작업 없이 결과만 확인하는 Dry Run

--delete

원본에 없는 파일을 대상에서도 삭제

--exclude

특정 파일이나 디렉터리를 제외

-e

SSH 포트 등 원격 접속 방식 지정

보통 다음 조합을 많이 사용합니다. 파일이 많거나 전송 시간이 긴 경우 -P를 넣어두면 진행 상태를 확인하기 편합니다.

rsync -avhP

다른 서버로 파일 전송하기

로컬 서버의 /data/ 내용을 192.168.0.20 서버의 /backup/data/로 전송해 보겠습니다.

rsync -avhP /data/ user@192.168.0.20:/backup/data/

형식으로 보면 다음과 같습니다.

rsync -avhP [보낼 경로] [계정]@[서버 IP]:[저장 경로]

SSH 접속이 정상적으로 가능한 서버라면 별도의 rsync 서버 설정 없이 사용할 수 있습니다. 원격 서버의 데이터를 현재 서버로 가져오는 것도 가능합니다.

rsync -avhP user@192.168.0.20:/data/ /backup/data/

즉, 원본과 대상의 위치만 바꾸면 됩니다. rsync는 원격 셸을 이용한 전송과 별도의 rsync daemon을 이용한 전송 방식을 모두 지원합니다.

SSH 포트가 22번이 아닌 경우

SSH 포트를 2222번처럼 변경해서 사용하는 서버라면 -e 옵션을 사용합니다.

rsync -avhP -e "ssh -p 2222" /data/ user@192.168.0.20:/backup/data/

SSH 방식으로 사용하는 경우에는 아래에서 설명할 /etc/rsyncd.conf를 만들 필요가 없습니다.

특정 파일 제외하기

로그 파일을 제외하고 전송하려면 --exclude를 사용합니다.

rsync -avhP \
  --exclude='*.log' \
  /data/ \
  user@192.168.0.20:/backup/data/

특정 디렉터리를 제외할 수도 있습니다.

rsync -avhP \
  --exclude='cache/' \
  --exclude='tmp/' \
  /data/ \
  user@192.168.0.20:/backup/data/

--exclude는 백업할 필요가 없는 로그, 캐시, 임시 파일 등을 제외할 때 유용합니다.

원본과 백업 폴더를 동일하게 만들기

--delete 옵션을 사용하면 원본에서 삭제된 파일을 대상에서도 삭제할 수 있습니다.

rsync -avh --delete /data/ /backup/data/

백업 폴더를 원본과 동일한 상태로 유지해야 할 때 유용하지만 주의가 필요합니다.

경로를 잘못 지정하면 대상 서버의 파일이 삭제될 수도 있기 때문입니다.

처음에는 반드시 -n 옵션을 함께 사용해 결과를 확인하는 것이 좋습니다.

rsync -avhn --delete /data/ /backup/data/

문제가 없다면 -n을 제거합니다.

rsync -avh --delete /data/ /backup/data/

rsync 공식 매뉴얼에서도 --delete 사용 전에 --dry-run으로 삭제 대상을 먼저 확인하는 방법을 권장하고 있습니다.

rsyncd.conf는 언제 필요한가?

위에 진행했던 방식은 SSH를 이용하는 방법으로 rsyncd.conf가 필요하지 않습니다.

반대로 다음처럼 ::를 사용하는 방식은 rsync daemon에 접속하는 방법입니다.

192.168.0.20::backup

rsync daemon은 기본적으로 TCP 873번을 사용하며 /etc/rsyncd.conf에서 공유할 경로와 접근 권한 등을 설정합니다.

Ubuntu rsyncd.conf 설정

먼저 백업용 계정과 디렉터리를 만들어 보겠습니다.

sudo adduser --system --group --no-create-home rsync
sudo mkdir -p /srv/rsync/backup
sudo chown -R rsync:rsync /srv/rsync/backup

설정 파일을 생성합니다.

sudo vim /etc/rsyncd.conf

다음은 내부 네트워크에서 백업 서버로 사용할 수 있는 간단한 예제입니다.

[backup]은 클라이언트에서 사용할 서비스 이름입니다.

uid = rsync
gid = rsync

use chroot = yes
max connections = 4

log file = /var/log/rsyncd.log

[backup]
    path = /srv/rsync/backup
    comment = Backup Storage

    read only = no

    auth users = backup
    secrets file = /etc/rsyncd.secrets

    hosts allow = 192.168.0.0/24
    hosts deny = *

read only = no로 설정하면 해당 모듈로 파일을 전송할 수 있으며 hosts allow를 이용해 접속 가능한 네트워크를 제한할 수 있습니다.

path는 실제 서버의 저장 위치입니다.

path = /srv/rsync/backup

인증 파일을 만듭니다.

sudo vim /etc/rsyncd.secrets

다음처럼 입력합니다.

backup:사용할비밀번호

다른 사용자가 읽을 수 없도록 권한을 제한합니다.

sudo chmod 600 /etc/rsyncd.secrets

rsync의 secrets file은 사용자:비밀번호 형태로 인증 정보를 저장할 수 있으며 파일 접근 권한 역시 중요합니다.

rsync daemon 실행

Ubuntu의 rsync 패키지에는 systemd용 rsync.service와 /etc/default/rsync 파일이 포함되어 있습니다.

먼저 다음 파일을 확인합니다.

sudo vim /etc/default/rsync

daemon을 사용할 경우 다음 값을 활성화합니다.

RSYNC_ENABLE=true

서비스를 실행하고 부팅 시 자동으로 시작하도록 설정합니다.

sudo systemctl enable --now rsync.service

상태를 확인합니다.

sudo systemctl status rsync.service

873번 포트가 열렸는지도 확인할 수 있습니다.

sudo ss -lntp | grep 873

이제 다른 서버에서 다음과 같이 전송할 수 있습니다.

rsync -avhP /data/ backup@192.168.0.20::backup

SSH 방식의 :와 rsync daemon 방식의 ::는 서로 다른 연결 방식이므로 구분해서 사용해야 합니다.

정리

Ubuntu에서 rsync를 단순히 서버 간 파일 복사나 백업 용도로 사용한다면 대부분은 SSH 방식만으로 충분합니다.

가장 기본적으로 기억해 둘 명령어는 다음과 같습니다.

rsync -avhP /원본/ user@서버IP:/대상/

백업 폴더를 원본과 동일하게 유지해야 한다면 --delete를 사용할 수 있지만 실제 적용 전에 -n 또는 --dry-run으로 결과를 먼저 확인하는 것이 안전합니다.

rsync -avhn --delete /원본/ /백업/

여러 서버에서 특정 백업 경로를 지속적으로 제공해야 한다면 그때 /etc/rsyncd.conf를 구성하고 rsync daemon 방식으로 운영하면 됩니다.

더 읽어보면 좋은 글

rsync 공식 매뉴얼 rsync의 기본 사용법과 전체 옵션, SSH 및 daemon 연결 방식을 확인할 수 있습니다.

rsyncd.conf 공식 매뉴얼 rsync daemon의 모듈, 인증, 접근 제어와 로그 관련 설정을 확인할 수 있습니다.

Ubuntu OpenSSH 서버 설정 공식 문서 Ubuntu에서 SSH 서버를 설치하고 공개 키 인증과 서버 설정을 구성하는 방법을 확인할 수 있습니다.