티스토리 뷰

Rsync Snapshot and Backup

Rsync 를 이용해 날짜, 또는 시간 별로 스냅샷을 작성하고, 가장 마지막 (최근)의 파일을 그대로 백업을 뜨는 방법과 사용법에 대해 알아보겠습니다.

Command

바로 rsync 명령어를 알아보겠습니다.

rsync \
    --rsh="sshpass -p [password] ssh -l [id] -p [port] \
    -ab \
    --recursive \
    --files-from="[backup-list.txt path]" \
    --exclude-from="[exclude-list.txt path] " \
    --backup-dir=[target path] \
    --delete \
    [IP]:[storage path]

--rsh: 는 ssh 를 통해서 파일을 전송할 때 사용합니다. rsync 서버와 ssl 연결을 사용하지 않을 거라면 이 방법도 보안에 좋아요.

-ab: ab 옵션이예요.
a: 심볼릭 링크, 속성, 퍼미션, 소유권 등의 정보를 그대로 복사합니다.
b: 백업(스냅샷)을 만듭니다.

--recursive: 백업하려는 대상의 디렉토리 내부의 모든 파일들도 함께 백업

--files-from: 백업 대상에서 넣어야할 아이템들

--exclude-from: 백업 대상에서 제외할 아이템들

--backup-dir: 스냅샷을 뜰 경로, b 옵션과는 다릅니다. 삭제된 파일들만 백업을 뜨죠.

--delete: sync 된 대상에도 원본에서 삭제된 파일을 삭제합니다.

Files Structure

    - backup.sh
    - backup-list.txt
    - exclude-list.txt

Files Contents

backup.sh:

#!/bin/sh

#SUFFIX=$(date +"%Y-%m-%d %H:%M:%S %j")
SUFFIX=$(date +"%Y-%m-%d")
AGO_7_SUFFIX=$(date +"%Y-%m-%d" --date '7 days ago')

SERVERNUM=101
NASIP='192.168.0.1'

BACKUP_INCREASE_DIR_7_AGO=/share/backup/$SERVERNUM/increasement/backup_$AGO_7_SUFFIX
BACKUP_INCREASE_DIR=/share/backup/$SERVERNUM/increasement/backup_$SUFFIX
BACKUP_SYNC_DIR=/share/backup/$SERVERNUM/sync

echo "[$SUFFIX]------------------------------------------------------------\n"

rsync \
  --rsh="sshpass -p ****** ssh -l admin -p 60022" \
  -ab \
  --no-links \
  --recursive \
  --files-from="/root/script/backup-list.txt" \
  --exclude-from="/root/script/exclude-list.txt" \
  --backup-dir=$BACKUP_INCREASE_DIR \
  --delete \
  / \
  $NASIP:$BACKUP_SYNC_DIR

backup-list.txt:

home
usr/local/etc/php-fpm.conf
usr/local/lib/php.ini
etc/sysconfig/iptables
etc/sysconfig/network-scripts/ifcfg-em1
etc/sysconfig/network-scripts/ifcfg-em2
etc/ssh/sshd_config
etc/ssh/ssh_config
etc/vsftpd/vsftpd.conf
etc/fail2ban
etc/fstab
etc/passwd
etc/group

exclude-list.txt:

home/test