개요
리눅스 환경에서 파일을 효율적으로 관리하고 전송할 때 rsync
만큼 강력한 도구가 또 있을까요?
이번 글에서는 rsync
의 기본 개념부터 활용 방법, 자주 사용되는 명령어(옵션), 그리고 미러 서버 설정까지 자세히 기록해보려고 합니다!
데이터 백업, 동기화, 대용량 데이터 이동에 관심이 있다면 이 글이 큰 도움이 될 거예요!
rsync
rsync는 "Remote Sync"의 약자로,
파일과 디렉터리를 로컬 또는 원격 시스템 간에 빠르고 효율적으로 동기화할 수 있는 오픈소스 유틸리티입니다
scp
나 cp
같은 기본 명령어와 달리, rsync
는 Delta Encoding Algorithm 을 사용해 변경된 부분만 전송하므로
네트워크 대역폭을 최소화하며 빠른 속도를 자랑해요!
덤으로 효율적인 증분 백업도 가능하죠!
주요 특징으로는 다음과 같아요!
- 데이터 백업 및 동기화: 로컬과 원격 서버 간 데이터를 손쉽게 동기화
- 대용량 데이터 이동: 효율적인 전송으로 시간과 자원 절약 가능
- 추가 기능: 심볼릭 링크, 소유자, 권한, 디바이스 파일 등을 보존 가능
- 익명 사용자 지원:
root
권한 없이도 사용 가능. - 네트워크 활용: 기본적으로 TCP 873번 포트를 사용하며, SSH나 RSH 같은 원격 쉘과 함께 동작 가능
이제 rsnyc
의 기본 사용법과 옵션을 살펴보도록 할까요?
기본 사용법
rsync
의 기본 명령어 형식은 다음과 같아요!
$ rsync [options] <src> <dest>
<src>
: 복사할 원본 경로.<dest>
: 복사할 대상 경로.
주요 옵션 정리
rsync
는 다양한 옵션을 제공해 사용자가 원하는 대로 동작을 커스터마이징할 수 있어요!
자주 쓰이는 옵션을 정리해봤어요.
옵션 | 설명 |
---|---|
-a , --archive |
아카이브 모드, -rlptgoD 옵션을 포함함 (권한, 소유자, 시간 등 보존) |
-v , --verbose |
상세한 실행 정보 출력. |
-r , --recursive |
하위 디렉터리까지 재귀적으로 복사. |
-z |
전송 시 데이터를 압축해 네트워크 부하 감소. |
-h |
사람이 읽기 쉬운 형식으로 출력 (human-readable). |
옵션 | 설명 |
---|---|
--delete |
대상에 없는 파일을 삭제해 완벽한 동기화 구현. |
--exclude |
지정한 파일/디렉터리를 제외. |
-e , --rsh=COMMAND |
원격 셸 지정 (예: SSH 포트 변경 시 유용). |
--bwlimit |
전송 대역폭 제한 (KB 단위). |
--checksum |
파일 크기/시간 대신 체크섬으로 비교. |
활용 예시: 데이터 백업과 이동
rsync
는 데이터 백업, 동기화, 대용량 파일 이동에 최적화되어 있어요.
아래는 실무에서 자주 사용하는 명령어 예시입니다!
1. 로컬에서 로컬로 백업
$ rsync -av /home/user /backup/user
/home/user
디렉터리를/backup/user
에 상세 출력(-v
)과 함께 아카이브 모드(-a
)로 백업.
2. 로컬에서 원격 서버로 복사
$ rsync -avz /home/user/data user@192.168.1.100:/home/user/backup
- 로컬의 data 디렉터리를 원격 서버로 압축(
-z
) 전송.
3. 원격 서버에서 로컬로 백업
$ rsync -avz --delete user@192.168.1.100:/home/user/data /home/user/backup
- 원격 서버의 데이터를 로컬로 동기화하며, 로컬에 불필요한 파일은 삭제(
--delete
).
4. 대용량 데이터 이동 (불필요한 파일 제외)
$ rsync -avz --exclude="*.log" /data user@remote:/backup
*.log
파일을 제외하고 대용량 데이터를 원격지로 전송.
5. SSH 포트가 기본(22번)이 아닌 경우
$ rsync -avz -e 'ssh -p 66022' user@192.168.1.100:/data /backup
- SSH 포트가
66022
일 때 원격 서버와 연결.
6. 현재 디렉토리 모든 파일을 원격지로 압축 전송
$ rsync -avz -e ssh ./* user@192.168.1.100:/home/user/destination
- 현재 경로의 모든 파일을 원격지에 전송.
미러 서버 설정: Rsync로 데이터 배포하기
rsync
는 미러 서버에서 데이터를 배포하는 데도 자주 사용됩니다!
이를 위해서는 rsync
데몬을 서버에 설정하고,
클라이언트가 지정된 폴더에서 데이터를 가져갈 수 있도록 해야해요!
1. Rsync 데몬 설정
1-1. 설치 확인
$ sudo apt install rsync # Debian/Ubuntu
$ sudo yum install rsync # CentOS/RHEL
1-2. 설정 파일 수정 (/etc/rsyncd.conf
)
다음 내용을 붙여넣고, 필요에 따라 수정해보세요!
# 전역 설정
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
timeout = 300
# 미러 모듈
[proxmox-mirror]
path = /var/www/proxmox-mirror # 실제 Proxmox 미러 데이터 경로
comment = My Proxmox Mirror Repository
read only = yes # 클라이언트가 수정 못 하게 읽기 전용
list = yes # 모듈 목록 표시 허용
uid = nobody # 보안을 위해 nobody 사용자
gid = nogroup # 보안을 위해 nogroup 그룹
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
로 접속해야 해요!