리눅스 서버에서 자동으로 지속적인 파일 백업 수행하기



개인 웹 서버를 운용하는 상황에서는 백업이 굉장히 중요한 요소입니다. 
대형 블로그 서비스들은 다 내부적으로 수행하고 있지만, 저는 수행하고 있지 않았는데 수행하는 방법에 대하여 알아보았습니다. 

Lael's World 님의 블로그 포스팅을 참조하여 수행하였습니다.


저는 일단 파일만 압축하여 디비도 함께 압축하여 저장하는 방식을 사용했습니다.
db 까지 따로 백업하려면, 경우에는 아래의 참조에서 링크를 타고 가시면 좋은 설명이 되어 있습니다.

저는 내장 DB sqlite3를 사용해서 해당 명령어는 필요 없다고 판단했습니다. 
저는 블로그를 호스팅 하여 사용하기 때문에, 백업이 필요하다고 판단하여 백업을 미루다 미루다 오늘 포스팅 하게 됩니다. 


- 백업할 디렉토리 및 저장 기간, 저장 방식 설정 

저 같은 경우에는 블록 스토리지가 있어서 해당 스토리지에 저장하는 방식을 사용합니다.
백업의 경우에 해당 방식을 많이 사용하겠지만, 같은 디스크의 다른 폴더에 그냥 백업을 할 수도 있을 겁니다. 

$df -Th

위의 명령어를 통해서 디스크의 여유 공간을 확인합니다. 


저는 10GB의 스토리지를 보유하고 있고, 현재 한 번 압축하면 해당 파일이 차지하는 용량은 500MB 정도로 보여집니다. 
따라서, 어느 정도 된 파일은 지속적으로 지워줘야 됩니다. 
DB가 지속적으로 증가할 것을 고려하면 대략 하루에 한 번씩 백업하면, 14~15일 정도가 지금으로써는 적당한 것 같습니다. 

블록 스토리지가 상대적으로 저렴하기 때문에, 비용을 2000원(제 호스팅 서비스) 정도 추가하면 보름 정도는 더 저장할 수 있는 것 같습니다. 
스토리지 용량에 기간을 맞추는 것이 아니라, 원하는 기간에 맞춰서 알맞게 스토리지를 맞추는 것도 좋을 것 같습니다. 



백업 방식의 종류로는 아래와 같은 방식이 있습니다.
저는 증분을 사용하고 싶지만, 지식이 부족하여 압축을 사용하기로 했습니다.

압축 백업 : (tar -czpf 백업) 일반적으로 많이 쓰이는 백업입니다. 이 작업에는 CPU 가 많이 사용됩니다.
10GB 미만 압축이면 상관없는데 그 이상의 대용량의 압축 백업은 주의가 필요합니다. 백업 시켜놓고 CPU 사용량을 확인하세요.
복사 백업 : (cp -R 백업) 압축하지 않고 복사만 합니다. 사용 용량을 많이 차지하지만 (압축하지 않는다는 뜻) 백업할 때 CPU 사용량이 크게 증가하지는 않습니다.
증분 백업 : (rsync 백업) 변동사항만 비교하여 백업합니다. 비교를 위해서 파일은 항상 압축되지 않은 상태로 보관됩니다.

어짜피 개인 블로그 목적의 백업이고, 새벽 시간을 이용하면 CPU 자원이 충분하기 때문이라고 생각해서입니다. 



아래와 같이 정리해보았습니다. 

@ 백업 정책 @
보관 기간 : 14일
백업 방식 : 압축 백업
백업 시간 : 새벽 4시
백업 횟수 : 하루 1회





아래의 명령어에서 () 는 빼고 사용하셔야 합니다. 

1) 백업할 폴더 생성 후 퍼미션 설정

$ mkdir (백업하고 싶은 위치)
$ chmod 700 (백업하고 싶은 위치)


2) 백업 스크립트 작성 

$ cd /root
$ vim backup.sh


tar 명령어는 파일 압축 백업을 실시합니다. 

find 관련 명령어는 10일이 지난 파일을 삭제합니다. 
find 명령어 뒤에 파이프라인을 보면 rm 명령어를 확인하실 수 있습니다. 
리눅스 명령어를 배우고, 활용을 안해봐서 직접 작성은 쉽지 않네요. 

역시 명령어에서 괄호는 모두 제거하고 넣어주세요 

  1 #!/bin/bash

  2 tar -czpf (백업할 디렉토리명)/(자신이 사용할 파일명).`date +%Y%m%d%H%M%S`.tgz (백업을 원하는 원하는 파일, 폴더) 1>/dev/null 2>/dev/null
  3 find (백업할 디렉토리명) -type f -mtime +14 | sort | xargs rm -f



3) 백업 스크립트 퍼미션 설정 및 수행 확인 

$ chmod 700 backup.sh
$ ./backup.sh
저는 테스트 결과 아래와 같이 파일이 잘 생성되었습니다. 




4) 주기적인 실행 

crontab -e

위와 같은 명령어를 실행해서, 아래와 같이 명령어를 추가해줍니다. 
4가 시간입니다.  24시간 기준이고 가령 오후 4시에 하고 싶으면 12를 더한 16을 사용하면 됩니다. 

0 4 * * * /root/backup.sh 1>/dev/null 2>/dev/null

#

# For more information see the manual pages of crontab(5) and cron(8)

#

# m h  dom mon dow   command
0 4 * * * /root/backup.sh 1>/dev/null 2>/dev/null



5) 확인해보자!

자고 일어나서 확인해보세요~ 



- 출처 - 

https://blog.lael.be/post/1449