본문 바로가기
Experience/Monthly Log

rsync + SSH + cron으로 서버 간 특정 폴더 자동 백업 구축

by jaeaemin 2025. 12. 29.

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을 선택한 이유

  1. 설정이 간단하다
    •  서버만 있으면 별도 소프트웨어 설치 없이 바로 구현 가능
    •  SSH 키를 이용한 비밀번호 없는 접속으로 자동화 가능
  2. 변경분만 전송 가능 (증분 전송)
    •  전체 백업을 반복하지 않고, 새로 생기거나 변경된 파일만 전송 → 네트워크 효율적
  3. 한글/특수문자 경로도 안정적으로 처리 가능
    •  UTF-8 환경에서 경로 따옴표만 잘 처리하면 문제 없음
  4. 자동화와 주기적 실행 가능
    •  cron과 결합하면 원하는 시간에 반복적으로 백업
    •  초기 전체 백업 후 변경분만 자동 적용 가능
  5. 유연성
    •  처음에는 특정 폴더만 백업
    •  나중에 다른 폴더도 쉽게 추가 가능
  6. 가벼움
    • 별도의 서버나 DB 없이 Linux 기본 도구만 사용
    • 소규모 서버 환경에 적합

 

결론

  •  규모: 초기 백업 후, 소규모/폴더 단위 주기적 백업
  •  주기: 하루 1~2회 정기적 자동화
  •  변경 파일: 증분 전송
  •  운영 환경: SSH 접속 가능 Linux 서버

→ 따라서 rsync + cron 방식이 가장 적합

 

 

 

 

 


 

 

c

반응형