28. 백업과 복구
목표
1. 백업 개요
2. 백업 종류
3. 백업 / 복구 명령어
4. rsync 서비스를 이용한 백업
1. 백업 개요(Backup Overview)
□ 백업의 개념 : 데이터나 정보가 지닌 가치를 보존하는 것으로 외부의 침입자로부터 보호, 예기치 못한 사고로부터의 복원, 시스템 백업은 매일 해야 한다.
- 백업이 필요한 이유
예기치 못한 천재지변
관리자의 실수
기계적 오류
소프트웨어 버그
- 주요 백업 대상
전체 파일 시스템
마지막 백업 후의 변경된 파일 시스템
어플리케이션
각종 환경 설정 파일
사용자 파일 등
- 데이터 손실의 주요 원인
하드웨어적인 사유
소프트웨어적인 사유
사용자의 부주의
해커의 침입
기타 도난, 자연재해
2. 백업 종류
일반적으로 백업 종류는
완전 백업(Full Backup)
증분 백업(Incremental Backup)
차등 백업(Differential Backup)
등이 있다.
- 완전 백업(Full Backup)
모든 데이터를통째로 한 번에 백업하는 방법을 말한다. 말 그대로 모든 것을 백업하기 때문에 백업하는데 오래
시간이 걸리며, 백업 매체의용량 또한 커야 하므로,비용 소모가 많은 것이 단점이다. 그러나 시스템에 문제가 발 생되었을 때 발생되기 이전의 상태로 시스템을 확실히 복구할 수 있는 장점이 있다. 리눅스를 설치한 후에는 완전
백업을 하는 것이 향후에 리눅스를 재설치 해야 할 경우를 리눅스를 다시 설치하지 않고서도 백업을 복원시켜 부트 로더만 수정해 주면 설치 원상태로 되돌려 놓을 수 있는 이점이 있다.
- 증분 백업(Incremental Backup)
일반적으로 백업은 완전 백업과 증분 백업을 병행하는데, 증분 백업은 완전 백업한 이후에 변경된 데이터만을 백업 하는 방법이다. 최근 백업이후에 변경된 파일에 대해서만 백업이 이뤄지기 때문에 빠른 시간 내에 백업이 이뤄지는
장점이 있다. 리눅스 설치 이후에 생성되는 데이터이후에 파일에 대해서 증분 백업으로 백업을 도모하는 것이 리눅
스 시스템에 문제가 발생되더라도 리눅스를 다시 설치하지 않고서도 완전 백업을 복원하여 그 이후의 생성된 데이 터이후에 파일을 문제 방생 이전의 상태로 되돌려 놓을 수 있게 된다.
증분 백업은 일반 백업이나 증분 백업을 마지막으로 수행한 후 만들어지거나 변경된 파일을 백업합니다. 해당 파일은 백업된 것으로 표시됩니다. 즉, 보관 특성의 선택이 취소됩니다. 일반 백업과 증분 백업을 함께 수행하는 경우 데이터를 복원하려면 모든 증분 백업 세트와 최신 일반 백업 세트가 있어야 합니다.
- 차등백업(Differential Backup)
보통 증분백업과 비슷하기 때문에 혼동하는 경우가 없지 않는데, 차등 백업은 완전 백업이 이뤄진 이후의 모든 데
이터에 대해서 백업이 이뤄지도록 하는 방법이다. 증분 백업으로 백업된 데이터가 있더라도 차등 백업은 이러한 것 을 가리지 않고, 전체 백업 이후의 모든 데이터를 백업하는 것을 말한다. 차등 백업은 완전 백업 이후의 모든 파일
에 대해서 백업이 이뤄지기 때문에 데이터를 복원하는데 있어서는 시간이 오래 걸리는 불편함이 있을 수 있다.
차등 백업은 일반 백업이나 증분 백업을 마지막으로 수행한 후 만들어지거나 변경된 파일을 복사합니다. 하지만 해당 파일이 백업된 것으로 표시되지는 않습니다. 즉, 보관 특성의 선택이 취소되지 않습니다. 일반 백업과 차등 백업을 함께 수행하는 경우 파일과 폴더를 복원하려면 최신 차등 백업과 최신 일반 백업이 있어야 합니다.
[참고] 백업 종류(용어)
https://msdn.microsoft.com/ko-kr/library/Cc784306(v=WS.10).aspx
3. 백업/복구 명령어
- 디렉토리 단위의 백업
tar CMD : 마운트 된 파일시스템내에서 백업하는 명령어
cpio CMD : 마운트 된 파일시스템내에서 백업하는 명령어
- 파일시스템 단위의 백업
dump/restore CMD : 파일시스템 단위(파티션 단위)로 백업하는 명령어
- 디스크 단위의 백업
dd CMD : 디스크 마이그레이션(Migration) 하는 명령어
□ tar CMD
# tar cvf file.tar file1 file2 file3 (# tar cvf /dev/rmt0 /home)
# tar tvf file.tar
# tar xvf file.tar
(주의) 백업 받을 당시에 절대 경로 형태로 백업 받지 않는다.
명령어 옵션
-c, --create :create a new archive
-f, --file=ARCHIVE : use archive file or device ARCHIVE
-z, --gzip, --gunzip, --ungzip : filter the archive through gzip
-t, --list : list the contents of an archive
-x, --extract, --get : extract files from an archive
-g, --listed-incremental=FILE : handle new GNU-format incremental backup
-G, --incremental : handle old GNU-format incremental backup
-j, --bzip2 : filter the archive through bzip2
-p, --preserve-permissions, -- same-permissions : extract permissions information
[EX1] tar 명령어를 이용한 풀백업(Full Backup) & 증분 백업(Incremental Backup)
- 매일 매일 증가하는 데이터가 큰 서버에서 풀백업을 매일 같이 받는 방법은 좋은 방법이 아니다. 중간에 적당하게 증분 백업을 섞어 쓰는 방법이 좋다. tar 명령어를 통해서 풀백업과 증분 백업을 적당하게 섞어 쓰는 방법을 익혀두면 좋다.
Target Diretory : /home
# tar cvzf /backup/home_`date+%m%d`.tar.gz /home
(백업 방법)
□ 풀백업(Full Backup) 방법
# cd /home
# tar -g /backup/2017-06-22.list -cvzf /backup/2017-06-22-full.tar.gz .
□ 증분백업(Incremental Backup) 방법
# cd /home
# tar -g /backup/2017-06-22.list -czcf
□ 복구 방법
- 풀백업 복구방법
# cd /home
# tar -g /backup/2017-06-22.list -xzvf /backup/2017-06-22-full.tar.gz
- 증분백업 복구방법
# cd /home
# tar -g /backup/2017-06-22.list -xzvf /backup/2017-06-22.tar.gz
□ tar 명령어를 사용한 풀백업
- 테스트할 때, 백업 받을 타켓 디렉토리는 /home/user01 로 정함.
# cd /home/user01
# cp -p /etc/passwd file1
# cp -p /etc/hosts file2
# cp -p /etc/group file3
# mkdir -p /backup
# tar -g /backup/backup.list -cvzpf /backup/full_back.tar.gz /home/user01
# ls -l /backup
# tar tvzf /backup/full_backup.tar.gz
# cat /backup/backup.list
□ tar 명령어를 사용한 증분백업 1
# cp /etc/passwd file4
# tar -g /backup/backup.list -cvzpf /backup/incremental1.tar.gz /home/user01
# ls -l /backup
# tar tvzf /backup/incremental1.tar.gz
# cat /backup/backup.list
-> 이 파일은 기준이 되는 파일이므로 변화가 없다.
□ tar 명령어를 사용한 증분 백업 2
# cp /etc/services file5
# tar -g /backup/backup.list -cvzpf /backup/incremental2.tar.gz /home.user01
□ tar 명령어를 사용한 증분 백업 3
- 파일을 삭제하고 백업을 받아 본다.
# ls
# rm -f file5
# ls
# tar -g /backup/backup.list -cvzpt /backup/incremental3.tar.gz /home/user01
# ls -l /backup
□ tar 명령어를 사용한 복구 방법
- 불의의 사고로 /home/user01 폴더의 내용이 지워졌다고 가정
# cd /home/user01
# rm -rf *
- 복구 파일 순서
full_backup.tar.gz -> incremental1.tar.gz -> incremental2.tar.gz -> incremental3.tar.gz
# cd /
# tar -g /backup/backup.list -xvzf /backup/full_backup.tar.gz
<![endif] -->
home/user01/
home/user01/.mozilla/
home/user01/.mozilla/extensions/
home/user01/.mozilla/plugins/
home/user01/.bash_logout
home/user01/.bash_profile
home/user01/.bashrc
home/user01/file1
home/user01/file2
home/user01/file3
# tar -g /backup/backup.list -xvzf /backup/incremental1.tar.gz
<![endif] -->
home/user01/
home/user01/.mozilla/
home/user01/.mozilla/extensions/
home/user01/.mozilla/plugins/
home/user01/file4
# tar -g /backup/backup.list -xvzf /backup/incremental2.tar.gz
<![endif] -->
home/user01/
home/user01/.mozilla/
home/user01/.mozilla/extensions/
home/user01/.mozilla/plugins/
home/user01/file5
# tar -g /backup/backup.list -xvzf /backup/incremental3.tar.gz
<![endif] -->
home/user01/
home/user01/.mozilla/
home/user01/.mozilla/extensions/
home/user01/.mozilla/plugins/ls
tar: Deleting `home/user01/file5'
4. rsync 서비스를 이용한 백업
만약 rsync 프로그램이 설치되어 있지 않다면 프로그램을 설치해 준다.
# rpm -q rsync
# yum -y install rsync
□ rsync 서비스를 이용한 로컬 데이터 백업 및 서버 동기화
- 여러 대의 서버를 분산하여 서버 데이터를 동기화하는데 rsync 유틸리티가 많이 사용된다. rsync는 루트 권한없이 서버로부터 데이터로 빠르게 전송받을 수 있으며, 원격 서버와 미러 서버와 전송 데이터를 비교하여 변화된 데이터를 저장할 수 있다. 또한 SSH를 이용하면 rsync 서버가 구축되어 있지 않아도 미러링을 할 수 있는 이점이 있다.
- rsync 서버는 xinetd 방식으로 동작한다.
----- Server A ----- ----- Server B -----
rsync --daemon(873)
/etc/rsyncd.conf
/Mirror_Backup <------------------------> /Backup
# rsync -avz --delete -e ssh ServerA:/Mirror_Backup /Backup
(a) rsync 서버 설정 과정
(ㄱ) /etc/rsync.conf 생성
(ㄴ) /etc/xinetd.d/rsync 수정
(ㄷ) xinetd 서비스 재시작
(b) rsync 클라이언트
(ㄱ) rsync 명령어를 이용한다.
- 명령어 형식
# rsync -avz --delete -e ssh <원격서버:데이터경로> <백업경로>
# rsync -avz --delete -e ssh 192.168.0.250:/backup /backup
[EX1] 로컬서버의 로컬 디렉토리와 로컬 디렉토리 동기화
① 백업 디렉토리 확인
# ls /backup
② /backup(원본) 디렉토리와 /test100/backup(미러) 디렉토리를 동기화
# rsync -avz --delete -e ssh 192.168.10.200:/backup /test100 (192.168.10.200 : 자신의 서버 IP )
# ls /test100
backup |
# ls /backup /test100/backup
③ /backup 디렉토리에서 backup.list 파일 삭제
# rm -f /backup/backup.list
# ls /backup
④ /backup 디렉토리와 /test100/backup 디렉토리를 동기화
# rsync -avz --delete -e ssh 192.168.10.200:/backup /test100
⑤ 로컬에 존재하는 디렉토리 미러링
# rsync -avz --delete -e ssh 192.168.0.XXX:/backup/ /test101/
(주의) 두개의 차이점을 이해 해야 한다.
# rsync -avz --delete -e ssh 192.168.10.200:/backup /test100
/test100 디렉토리가 없으면 생성된다.
/test100 디렉토리안에 backup 디렉토리가 생성된다. ( /backup/* <- sync -> /test100/backup/* )
# rsync -avz --delete -e ssh 192.168.0.XXX:/backup/ /test101/
/test101 디렉토리가 없으면 생성된다.
/backup 디렉토리의 내용과 /test101 디렉토리의 내용은 동일하다. ( /backup/* <- sync -> /test101/* )
[EX2]rsync 서버 구축 및 rsync 명령어 사용
- ssh를 이용한 rsync데이터 동기화를 위해서는 서버에 ssh서버가 작동 하고 있어야 한다.
- rsync 서버를 구축하기 위해서는 rsync 설정파일인 /etc/rsyncd.conf 파일을 설정해야 한다.
(a) rsync 서버 설정 과정
(ㄱ) /etc/rsyncd.conf 생성
(ㄴ) /etc/xinetd.d/rsync 수정
(ㄷ) xinetd 서비스 재시작
(b) rsync 클라이언트
(ㄱ) rsync 명령어를 이용한다.
① /etc/rsyncd.conf 파일 작성
# vi /etc/rsyncd.conf
uid=nobody /* 사용자 아이디 */ gid=nobody /* 그룹 아이디 */ use chroot=no /* yes : 지정된 경로 이외에 다른 경로로 접속 못하게 함 */ max connections=5 /* 최대 접속자 수 : 0은 무제한을 나타냄 */ timeout=60 /* Client의 접속이 idle상태일 때 접속을 끊어버릴 초 단위 시간 */
[Backup] /* rsync 서비스명 */ comment=Rsync Backup Server /* rsync 서비스에 대한 설명 */ path=/backup1 /* 미러링될 데이터의 경로 (대상파일경로) */ read only=no /* yes : 다운로드 가능 / no : 업로드 가능 */ |
# mkdir /backup1 /backup2
② /etc/xinetd.d/rsync 파일 설정
# vi /etc/xinetd.d/rsync (# chkconfig rsync on)
# default: off # description: The rsync server is a good addition to an ftp server, as it \ # allows crc checksumming etc. service rsync { disable = no <----- yes을 no로 변경 socket_type = stream wait = no user = root erver = /usr/bin/rsync server_args = --daemon log_on_failure += USERID } |
# service xinetd restart
③ 서버에서 rsync 서버 동작에 대한 간단한 테스트
# cat /etc/services | grep rsync
rsync 873/tcp # rsync rsync 873/udp # rsync airsync 2175/tcp # Microsoft Desktop AirSync Protocol airsync 2175/udp # Microsoft Desktop AirSync Protocol |
# telnet localhost 873
Trying 127.0.0.1... |
-> rsync 서비스가 873번 포트에서 정상적으로 동작 중이다.
④ 클라이언트에서 rsync 명령어 수행
------ 172.16.6.AAA(서버 IP) ----- ----- 172.16.6.BBB(클라이언트 IP) -----
/backup1/(내용) ----------------------> # rsync -avz --delete -e ssh 172.16.6.AAA::Backup /backup1
(linuxAAA.example.com) 172.16.6.AAA
# cp -r /etc/init.d/* /backup1
# ls /backup1 /* /etc/init.d 디렉토리의 하위 디렉토리와 파일을 모두 복사되어 있다. */
(linuxBBB.example.com) 172.16.6.BBB
# rsync -avz --delete -e ssh 172.16.6.AAA:/backup1/ /backup1
# rsync -avz --delete -e ssh 172.16.6.AAA::Backup /backup1
# rsync -avz --delete -e ssh 172.16.6.AAA::Backup /backup1
/* 172.16.6.AAA:/backup1 디렉토리의 파일을 172.16.6.BBB:/backup1에 백업시킨다 */
# ls /backup1 /* 백업이 되었는지 확인 */
( linuxAAA.example.com) 172.16.6.AAA
# cd /backup1
# rm -f [a-v]* /* 제일 앞글자가 a-v 사이 인 파일명을 찾아 삭제 */
# ls
(linuxBBB.example.com) 172.16.6.BBB
# rsync -avz --delete -e ssh 172.16.6.AAA::Backup /backup1
# ls /backup1 /* 172.16.6.AAAA:/backup1에서 파일이 삭제된 후로 백업된 것을 확인 */
# cp -r /backup1 /linuxBBB /* backup1디렉토리 내부의 파일을 linuxBBBB 디렉토리로 복사 */
# rsync -avz --delete -e ssh /linuxBBB 172.16.6.AAA:/backup2
/* 172.16.6.BBB:/linuxBBB 디렉토리내의 파일을 172.16.6.AAA:/backup2 디렉토리로 백업 */
# ssh 172.16.6.252 ls /backup2 /* 백업된 것 확인 */