Profile picture

[Linux] rsync 개념, 사용법, 실무 예제로 실습해보기

JaehyoJJAng2024년 07월 14일

개요

리눅스 환경에서 파일을 효율적으로 관리하고 전송할 때 rsync만큼 강력한 도구가 또 있을까요?


rsync는 "remote sync"의 약자로, 이름에서 알 수 있듯이 원격지의 파일과 디렉토리를 동기화하는 데 있어 아주 유용한 명령어입니다.


이번 글에서는 rsync의 기본 개념부터 활용 방법, 자주 사용되는 명령어(옵션), 그리고 미러 서버 설정까지 자세히 기록해보려고 합니다!

데이터 백업, 동기화, 대용량 데이터 이동에 관심이 있다면 이 글이 큰 도움이 될 거예요!


rsync는 무엇이고 왜 사용할까요?

개요에서 언급했듯이 rsync는 원격지 간에 파일과 디렉토리를 효율적으로 복사하고 동기화하는 도구입니다.

단순한 복사 명령어(cp)와 가장 큰 차이점은 증분 백업(Incremental Backup) 이 가능하다는 것이죠!

즉, 전체 파일을 매번 복사하는 것이 아니라, 변경된 부분만 감지하여 그 차이점만 전송할 수 있다는거에요.


주요 특징으로는 다음과 같아요!

  • 데이터 백업 및 동기화: 로컬과 원격 서버 간 데이터를 손쉽게 동기화
  • 대용량 데이터 이동: 효율적인 전송으로 시간과 자원 절약 가능
  • 추가 기능: 심볼릭 링크, 소유자, 권한, 디바이스 파일 등을 보존 가능
  • 익명 사용자 지원: root 권한 없이도 사용 가능.
  • 네트워크 활용: 기본적으로 TCP 873번 포트를 사용하며, SSH나 RSH 같은 원격 쉘과 함께 동작 가능

rsync 사용법

rsync의 기본 명령어 형식은 다음과 같아요!

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

[원본 경로] 의 파일을 [대상 경로] 로 동기화합니다.

경로는 로컬 경로일 수도 있고, [사용자명]@[호스트]:[경로] 형식의 원격 경로일 수도 있겠죠?


rsync 주요 옵션 정리

rsync는 다양한 옵션을 제공해 사용자가 원하는 대로 동작을 커스터마이징할 수 있어요!

자주 쓰이는 옵션을 정리해봤어요.

옵션 설명
-a archive mode. -rlptgoD 옵션을 모두 포함한 것과 같습니다. 권한, 소유권, 타임스탬프 등을 그대로 유지하며 재귀적으로 복사합니다. 가장 많이 사용되는 필수 옵션입니다.
-v verbose. 동기화 과정에 대한 자세한 정보를 출력합니다.
-h human-readable. 파일 크기 등 수치 정보를 사람이 읽기 쉬운 단위(K, M, G)로 보여줍니다.
-z compress. 전송 중 데이터를 압축하여 전송 속도를 높입니다. CPU 자원을 조금 더 사용하지만 네트워크 대역폭을 절약할 수 있습니다.
--delete 원본에는 없지만 대상에 있는 파일을 삭제하여 두 경로를 완전히 동일하게 만듭니다. 주의해서 사용해야 하는 옵션입니다.
--exclude=[패턴] 지정된 패턴과 일치하는 파일을 동기화에서 제외합니다. (예: --exclude=*.log)
--include=[패턴] 제외 패턴 중에서 특정 패턴은 다시 포함시킵니다.
-n, --dry-run 실제 복사를 실행하지 않고 어떤 파일이 어떻게 변경될지 미리 시뮬레이션하여 보여줍니다. 실수로 인한 데이터 유실을 막기 위해 실행 전 확인용으로 매우 유용합니다.
-e [프로토콜] 원격 쉘 프로그램을 지정합니다. (예: -e ssh)
-P --progress--partial 옵션을 합친 것입니다. 전송 진행 상황을 보여주고, 중단된 경우 이어받을 수 있도록 합니다.

실무에서 사용하는 rsync 예제

이론만으로는 감이 잘 안오시죠? 실무에서 rsync가 어떻게 활용되는지 몇 가지 예제를 들어보겠습니다.


예제 1. 로컬 디렉토리 백업

로컬의 /home/user/data 디렉터리를 /mnt/backup 디렉터리로 백업하는 가장 기본적인 상황입니다.

rsync -avh /home/user/data/ /mnt/backup/
  • a: 권한, 소유자 정보 등을 그대로 유지하며 하위 디렉터리까지 모두 복사합니다.
  • v: 어떤 파일이 복사되는지 과정을 보여줍니다.
  • h: 파일 크기를 보기 쉽게 표시합니다.

중요! 원본 경로 뒤에 /를 붙이면 해당 디렉터리 안의 내용물을 대상 경로로 복사합니다. /를 빼면 data 디렉터리 자체가 /mnt/backup/ 아래에 생성됩니다.


예제 2. 로컬 파일을 원격 서버로 전송

로컬의 /var/www/html 디렉토리를 192.168.1.100 서버의 /var/www/ 디렉토리로 전송하여 웹 소스를 배포하는 경우라고 가정해볼게요.

rsync -avzh -e ssh /var/www/html/ user@192.168.1.100:/var/www/html/
  • z: 데이터를 압축하여 네트워크를 통해 전송합니다.
  • -e ssh: ssh를 통해 안전하게 암호화된 터널로 데이터를 전송합니다.

이 때 만약에 ssh가 기본 포트인 22번이 아닌 다른 포트를 사용한다면 다음과 같이 지정해주세요.

rsync -avzh -e "ssh -p 2222" /var/www/html/ user@192.168.1.100:/var/www/html/

예제 3. 원격 서버의 파일을 로컬로 가져오기

원격 서버(192.168.1.100)의 /var/log/nginx/ 로그 파일을 로컬의 /backup/logs 디렉토리로 가져오는 상황이라고 가정해볼게요.

rsync -avh -e ssh user@192.168.1.100:/var/log/nginx/ /backup/logs/

예제 4. 특정 파일 제외하고 동기화하기

백업 시 불필요한 로그 파일이나 임시 파일을 제외하고 싶을 때 --exclude 옵션을 사용하는겁니다!

rsync -avz --exclude='*.log' --exclude='tmp/' /home/user/source/ /backup/destination/

예제 5. 원본과 대상을 미러링하기

--delete 옵션을 사용해서 원본에서 삭제된 파일은 대상에서도 삭제하여 두 디렉토리를 완벽하게 동일한 상태로 만듭니다.

# 실행 전 --dry-run 으로 어떤 파일이 삭제될지 꼭 확인하세요!
rsync -avh --delete --dry-run /source/dir/ /destination/dir/

# 확인 후 실제 실행
rsync -avh --delete /source/dir/ /destination/dir/

예제 6. 미러 서버에서 rsync 허용하는 방법

rsync는 미러 서버에서 데이터를 배포하는 데도 자주 사용됩니다!

이를 위해서는 rsync 데몬을 서버에 설정하고,

클라이언트가 지정된 폴더에서 데이터를 가져갈 수 있도록 해야해요!


1. Rsync 데몬 설정

1-1. 설치 확인

$ sudo apt install rsync  # Debian/Ubuntu
$ sudo yum install rsync  # CentOS/RHEL

1-2. 설정 파일 수정 (/etc/rsyncd.conf)

다음 내용을 붙여넣고, 필요에 따라 수정해보세요!

# 전역 설정
uid = nobody
gid = nobody
use chroot = no
read only = yes
max connections = 10
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid

# 미러링할 모듈(디렉터리) 설정
[proxmox-mirror]
    path = /var/www/proxmox-mirror  # 실제 Proxmox 미러 데이터 경로
    comment = My Proxmox Mirror Repository
    list = yes                      # 모듈 목록 표시 허용
    hosts allow = *                 # 모든 IP 허용 (보안 위해 제한 추천)
  • path: Proxmox 미러 데이터가 있는 실제 디렉터리 경로예요. 예를 들어 /var/www/proxmox-mirror에 데이터가 있다면 이렇게 설정하면 됩니다.
  • [proxmox-mirror]: 모듈 이름이에요. 클라이언트가 나중에 rsync://서버IP/proxmox-mirror로 접속할 때 쓰이는 이름이죠.
  • hosts allow: *는 모든 IP에서 접속 가능하다는 뜻이에요. 보안을 위해 192.168.1.0/24처럼 특정 네트워크만 허용할 수도 있어요.

1-3. 데몬 실행

$ sudo rsync --daemon
  • TCP 873번 포트에서 실행됩니다.

1-4. systemd 서비스 설정 (추천)

서비스 파일 생성

sudo nano /etc/systemd/system/rsyncd.service

다음 내용 입력

[Unit]
Description=Rsync Daemon Service
After=network.target

[Service]
ExecStart=/usr/bin/rsync --daemon --no-detach
Restart=on-failure

[Install]
WantedBy=multi-user.target

서비스 활성화 및 시작

sudo systemctl daemon-reload
sudo systemctl enable rsyncd.service
sudo systemctl start rsyncd.service

잘 되는지 테스트

sudo systemctl status rsyncd.service

"active (running)"이 보이면 성공이에요!


1-4. 부팅 시 자동 실행 (선택): /etc/default/rsync에서 RSYNC_ENABLE=true로 설정 후 서비스 활성화

$ sudo systemctl enable rsync
$ sudo systemctl start rsync

2. 디렉토리 권한 설정

미러 데이터가 있는 디렉토리의 권한을 맞춰줘야 해요! 이전에 nobody:nogroup으로 설정했으니:

$ sudo chown -R nobody:nogroup /var/www/proxmox-mirror
$ sudo chmod -R 755 /var/www/proxmox-mirror

이렇게 하면 rsync 데몬이 문제없이 데이터에 접근할 수 있어요!


2. 클라이언트에서 데이터 가져오기

모듈 목록 확인

$ rsync rsync://서버IP/proxmox-mirror

데이터 동기화

$ rsync -avz rsync://서버IP/proxmox-mirror /로컬/저장/경로
  • -avz는 아카이브 모드(파일 속성 유지), verbose(상세 출력), 압축 전송을 뜻해요. 잘 내려받아지면 성공!

질문!

🔥 자주 묻는 질문

"proxmox-mirror"는 어디서 온 거예요?



rsync://서버IP/proxmox-mirror에서 /proxmox-mirror/etc/rsyncd.conf에 설정한 모듈 이름이에요.

물리적 경로가 아니라 rsync가 인식하는 논리적 이름이죠.

[my-custom-mirror]로 바꾸면 rsync://서버IP/my-custom-mirror로 접속해야 해요!


Loading script...