개요
리눅스 환경에서 파일을 효율적으로 관리하고 전송할 때 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
로 접속해야 해요!