rsync란?
Rsync는 유닉스 계열 운영 체제에서 널리 사용되는 파일 동기화 및 전송 유틸리티입니다. 이 유틸리티는 동일한 컴퓨터 또는 네트워크로 연결된 컴퓨터에서 서로 다른 위치 간에 파일과 디렉터리를 효율적으로 복사하고 동기화하도록 설계되었습니다.
Rsync는 파일에서 변경된 부분만 전송하는 델타 인코딩 알고리즘을 사용하여 네트워크를 통해 전송되는 데이터의 양을 줄입니다. 이 기능은 대용량 파일이나 많은 파일이 있는 디렉터리를 동기화할 때 특히 효율적입니다.
rsync의 주요 기능
1. 증분 전송: 증분 전송: Rsync는 전체 파일을 전송하지 않고 소스 파일과 대상 파일 간의 차이점만 전송합니다. 따라서 대역폭 사용량을 최소화하고 동기화 프로세스의 속도를 높일 수 있습니다.
2. 압축 및 압축 해제: Rsync는 전송 중에 데이터를 압축하여 네트워크 트래픽의 양을 더욱 줄일 수 있습니다. zlib 압축 라이브러리를 사용하여 데이터를 압축하고 수신 측에서 압축을 해제합니다.
3. 원격 동기화: Rsync는 로컬 시스템과 원격 시스템 간에 파일을 동기화할 수 있습니다. 네트워크를 통해 데이터를 전송하기 위한 보안 전송 메커니즘으로 SSH(Secure Shell)를 사용할 수 있습니다.
4. 파일 속성 보존: 기본적으로 rsync는 권한, 소유권, 타임스탬프 및 심볼릭 링크와 같은 다양한 파일 속성을 보존합니다. 이는 복사된 파일의 무결성을 유지하는 데 도움이 됩니다.
5. 부분적으로 전송된 파일: 전송 중 중단된 경우, 중단된 지점부터 다시 동기화를 시작할 수 있습니다. 파일의 체크섬을 확인하여 다시 전송해야 할 부분을 결정합니다.
6. Rsync는 시스템 백업, 서버 간 데이터 미러링, 여러 머신에 파일 배포 등 다양한 용도로 사용되는 다용도 도구입니다. 이 도구는 종종 cron(시간 기반 작업 스케줄러)과 함께 사용하여 주기적인 백업 또는 동기화를 자동화하는 데 사용됩니다.
cron과 rsync을 이용한 백업 하기
cron을 통해 백업을 정기적으로 실행하고, rsync와 script를 이용해 정기적으로 백업 실행 할 수 있습니다.
방법은 아래와 같습니다.
백업 흐름도
1. NAS에 ssh public key 전송해서 암호 없이 로그인 할 수 있도록 서버의 접속권한을 인가해줍니다.
2. NAS에 폴더 마운트 설정을 해줍니다.
3. 그 후, 스크립트를 통해 NAS의 있는 파일을 원하는 폴더로 가져옵니다.
- rsync는 오픈소스로써 패키지를 따로 다운 받으셔야 합니다.
4. 해당 작업이 반복 될 수 있도록, 스크립트 파일을 crontab을 통해 스케쥴링 합니다.
4. 리텐션 값을 넣어줘서, 데이터 용량을 주기적으로 관리합니다.
아래는 백업 script문 예시입니다.
backup_script.sh
---------------------------------------------------------------------------------
# rsync를 통해 NAS:/shared/work/* 아래 있는 파일들을 > 현재 서버의 /NAS/tmp/로 이동 시킵니다.
rsync -a root@NAS IP:/shared/work/* /NAS/tmp/
# 가져온 파일들을 압축합니다.
tar -zcvf /NAS/$(date +%Y%m%d).tar.gz /NAS/tmp/*
# 가져온지 7일이 지난 파일들을 전부 삭제합니다.
find /NAS/tmp/* -mtime +7 -delete
# 필요시에는 가져온 파일들을 다 삭제합니다. (= 파일이 압축되어 보관되 있기 떄문에 데이터 중복을 없앨시 사용)
rm -rf /backups/NAS/tmp/*
---------------------------------------------------------------------------------
cron으로 스케줄링 하기
-----------------------------------------------------------------------------
30 14 * * * /NAS/daily.sh
# 매일 2시 30분의 백업을 실행
-----------------------------------------------------------------------------
# command line에 "crontab -e" 입력하고 crontab을 edit 창으로 이동합니다.
* * * * *
분(0-59) 시간(0-23) 일(1-31) 월(1-12) 요일(0-7)
# 위처럼 주기를 설정해주고, sh문의 경로를 적어주면 됩니다.
# 예시는 아래와 같습니다.