rsync란?
rsync는 리눅스/유닉스에서 가장 많이 쓰이는 파일 동기화 도구입니다.
특징
- 증분 전송: 변경된 파일만 전송 → 네트워크 절약
- 권한/시간 유지: -a 옵션으로 원본 그대로 복사
- 압축 전송: -z 옵션 → 속도 향상
- 삭제 동기화: --delete 옵션으로 원본과 동일하게 유지
- SSH 연동 가능: 원격 서버에도 안전하게 전송
- 백업 자동화: cron과 결합하면 주기적 백업 가능
1. 작업 배경
두 대의 Linux 서버가 있고,
한 서버에 있는 특정 폴더만 다른 서버로 주기적으로 백업해야 하는 상황
요구사항 정리
- 전체 복사 X → 변경된 파일만 전송
- 자동화 필요
- 한글 폴더명 포함
- 안정적이고 표준적인 방식
2. SSH 키 생성 (기존 키와 별개로 백업용 키 발급)
기존 SSH 키를 덮어쓰지 않기 위해 백업 전용 키를 생성했다.
ssh-keygen -t rsa -b 4096 -f ~/.ssh/backup_rsync_key
> ~/.ssh/backup_rsync_key
> ~/.ssh/backup_rsync_key.pub
3. 공개키를 백업 서버에 등록
ssh-copy-id -i /home/계정명/.ssh/backup_rsync_key.pub 계정명@백업서버IP
> Number of key(s) added: 1
4. 최초 SSH 접속 시 메시지 확인 (정상 여부 판단)
> The authenticity of host 'xxx' can't be established.
yes 입력 후 진행하면 known_hosts에 등록됨
ssh -i /home/계정명/.ssh/backup_rsync_key manager@백업서버IP
> 키 인증 SSH 접속 확인 ( 패스워드 묻지 않고 접속되면 성공 )
5. rsync 최초 전체 백업 실행
rsync -avz --delete \ -e "ssh -i /home/계정명/.ssh/backup_rsync_key"
\ "/data/RawData/폴더명/" \ 계정명@백업서버IP:"/data/RawData/폴더명/"
옵션 설명
- -a : 권한/시간 유지
- -v : 진행 로그
- -z : 전송 압축
- --delete : 원본에서 삭제된 파일은 대상에서도 삭제
- 경로 뒤 / 필수
발생했던 에러
- rsync는 부모 디렉터리를 자동 생성하지 않으므로 원격 서버에 RawData 폴더 생성
- 한글 경로 사용시 따옴표로 깜싸기 ( 양쪽 서버 locale 권장 설정 : LANG:ok_KR.UTF-8 )
6. cron 자동 백업 스크립트 구성
nano /home/manager/rsync_cron.sh
#!/bin/bash
SRC="/data/RawData/폴더/"
DEST="계정명@백업서버IP:/data/RawData/폴더/"
KEY="/home/계정명/.ssh/backup_rsync_key"
LOG="/var/log/rsync_cron.log"
rsync -avz --delete -e "ssh -i $KEY" "$SRC" "$DEST" >> "$LOG" 2>&1
# 하루 전날 데이터만 정규식 활용해서 필터링 후 증분 백업 (메모리 고려)
YESTERDAY=$(date -d '1 day ago' +%Y%m%d)
echo "=== $(date) - Syncing files from $YESTERDAY ===" >> "$LOG"
rsync -avz --delete \
--include='*/' \
--include="${YESTERDAY}_*" \
--exclude='*' \
-e "ssh -i $KEY" "$SRC" "$DEST" >> "$LOG" 2>&1
7. cron 등록
crontab -e
0 3 * * * /home/계정명/rsync_cron.sh
# 타임스탬프 로그 형식 추가
0 3 * * * echo "=== $(date) ===" >> /logs/cron.log 2>&1; /opts/cron/cron.sh >> /logs/acene_feature.log 2>&1
최종 결과
✅ 특정 폴더만 백업
✅ 변경된 파일만 전송
✅ 삭제 파일도 동기화
✅ SSH 키 기반 자동화
✅ cron 기반의 스크립트 형식 운영 환경 구성
참고
다른 방식의 주기적/자동 백업 구성 방식
[1] rsync + cron (현재 방식)
- 장점
- 설정 간단, 서버만 있으면 가능
- 변경된 파일만 전송 → 효율적
- 한글 포함 경로 처리 가능
- 단점
- 실시간 백업 불가 (정해진 시간에만)
- 대규모/대용량 파일 관리 어려움
- 에러 발생 시 알림 미지원(별도 설정 필요)
[2] lsyncd (Live Sync Daemon)
- 설명: 파일 시스템 이벤트를 감지해서 실시간으로 rsync처럼 동기화
- 장점
- 실시간 백업 가능 → cron보다 빠름
- rsync처럼 효율적 (증분 전송)
- 한글/특수문자 지원
- 단점
- 설치 필요 (apt install lsyncd 등)
- 설정 파일 YAML/루아 스타일 → 초반 설정 약간 복잡
- 추천 상황
- 중요한 폴더를 거의 실시간으로 백업
- 변경 사항을 바로 반영하고 싶은 경우
[3] tar + scp/sftp (압축 전송)
- 설명: 특정 폴더를 압축(tar)해서 원격 서버로 전송
- 장점
- 전체 폴더를 묶어서 전송 → 네트워크 단순화
- 간단한 스크립트로 구현 가능
- 단점
- 변경된 파일만 전송이 어려움 → 매번 전체 전송
- 대용량 시 전송 속도 느림
- 추천 상황
- 매일/주 단위 전체 백업
- 폴더 구조가 단순하고 변경이 많지 않은 경우
[4] Git / 버전 관리 시스템
- 설명: 소스 코드나 텍스트 파일 위주라면 Git으로 버전 관리 후 원격 서버에 push
- 장점
- 파일 변경 이력 관리
- 충돌/백업 상태 추적 가능
- 단점
- 바이너리/대용량 파일에는 적합하지 않음
- 초기 설정 복잡
- 추천 상황
- 코드, 설정 파일, 문서 위주 백업
- 작은 용량 폴더, 자주 변경되는 내용
[5] Network File System (NFS) / CIFS
- 설명: 원격 서버를 마치 로컬 디렉토리처럼 마운트 → 실시간 저장
- 장점
- 별도 백업 명령 없이 저장 시 바로 원격 반영
- 모든 프로그램이 바로 사용 가능
- 단점
- 네트워크 불안정 시 위험
- 보안 설정 필요 (VPN/SSH 터널 권장)
- 추천 상황
- 로컬-원격 서버 간 폴더 공유, 실시간 동기화 필요
- 내부 네트워크 환경
[6] 상용/오픈소스 백업 솔루션
- 예: Bacula, Duplicity, Restic, BorgBackup
- 장점
- 증분 백업, 암호화, 스케줄링, 복원 기능 제공
- GUI/CLI 선택 가능
- 단점
- 학습 필요, 설정 복잡
- 소규모 간단 백업에는 오버킬
- 추천 상황
- 기업/팀 규모 백업
- 장기 보관, 암호화, 증분 관리 필요
백업 방식 후보
| 방식 | 실시간 | 증분 | 장점 | 단점 | 추천 상황 |
| rsync + cron |
❌ | ✅ | 간단, 효율적, 변경된 파일만 전송 |
시간 간격만, 알림 필요 | 소규모/폴더 단위 백업, 정기적 자동화 |
| lsyncd | ✅ | ✅ | 실시간, 효율적 | 설치/설정 필요 | 실시간 동기화 필요할 때 |
| tar + scp | ❌ | ❌ | 전체 묶어서 전송, 간단 | 전체 전송 → 느림 | 변경 빈도가 낮은 폴더 |
| Git | ❌ | ✅ | 버전 관리, 추적 가능 | 대용량/바이너리 부적합 | 코드/문서 위주 |
| NFS/CIFS | ✅ | ✅ | 실시간, 로컬처럼 사용 | 보안/네트워크 의존 | 로컬-원격 폴더 공유 |
| Bacula/ Duplicity/ Restic ... |
❌ | ✅ | 증분, 암호화, GUI | 초기 학습 필요 | 장기 보관, 암호화, 기업용 |
rsync + cron을 선택한 이유
- 설정이 간단하다
- 서버만 있으면 별도 소프트웨어 설치 없이 바로 구현 가능
- SSH 키를 이용한 비밀번호 없는 접속으로 자동화 가능
- 변경분만 전송 가능 (증분 전송)
- 전체 백업을 반복하지 않고, 새로 생기거나 변경된 파일만 전송 → 네트워크 효율적
- 한글/특수문자 경로도 안정적으로 처리 가능
- UTF-8 환경에서 경로 따옴표만 잘 처리하면 문제 없음
- 자동화와 주기적 실행 가능
- cron과 결합하면 원하는 시간에 반복적으로 백업
- 초기 전체 백업 후 변경분만 자동 적용 가능
- 유연성
- 처음에는 특정 폴더만 백업
- 나중에 다른 폴더도 쉽게 추가 가능
- 가벼움
- 별도의 서버나 DB 없이 Linux 기본 도구만 사용
- 소규모 서버 환경에 적합
결론
- 규모: 초기 백업 후, 소규모/폴더 단위 주기적 백업
- 주기: 하루 1~2회 정기적 자동화
- 변경 파일: 증분 전송
- 운영 환경: SSH 접속 가능 Linux 서버
→ 따라서 rsync + cron 방식이 가장 적합
c
반응형
'Experience > Monthly Log' 카테고리의 다른 글
| [23/1월] 모니터링 시스템 시계열 DB 전환 (0) | 2023.02.19 |
|---|---|
| [22년] InfluxDB를 활용한 웹 모니터링 시스템 구축 (3) | 2022.09.11 |
| [22년] SQL vs InfluxDB 쿼리 성능 비교 (1) (0) | 2022.08.09 |