출처 : http://htst.tistory.com/37


백업(Backup)의 개념 데이타나 정보가 지닌 가치를 보존하는 것으로 외부의 침입자로부터 보호예기치 못한 사 고로부터의 복원시스템 백업은 매일 해야 한다.

 

▶ 백업이 필요한 이유  

예기치 못한 천재지변  

관리자의 실수  

기계적 오류  

소프트웨어 버그

 

▶ 주요 백업 대상  

전체 파일 시스템  

마지막 백업 후의 변경된 파일 시스템  

어플리케이션  

각종 환경 설정 파일  

사용자 파일 등

 

▶ 데이터 손실의 주요 원인  

하드웨어적인 사유  

소프트웨어적인 사유  

사용자의 부주의  

해커의 침입

기타 도난자연재해

 

(주의) 백업시간 && 복구시간

 

백업은 복구를 위해서 존재한다하지만 백업은 거의 매일 같이 하고복구는 일년에 한번 있을까 말까하는 작 업이다백업시간이 긴 형태로 작업을 하면 보통은 복구시간은 줄어 들고백업시간을 짧게 하는 방식을 택하 면 보통은 복구시간이 길어 진다따라서 백업시간과 복구시간은 적당하게 조절할 필요가 있다.

 










백업 종류






일반적으로 백업 종류는

(완전 백업(Full Backup),

(증분 백업(Incremental Backup)

(차등백업(Differential Backup)

등이 있다.

 

(1) 완전 백업(Full Backup)

모든 데이터를통째로 한 번에 백업하는 방법을 말한다말 그대로 모든 것을 백업하기 때문에 백업하는데 오래

ltrks이 걸리며백업 매체의용량 또한 커야 하므로,비용 소모가 많은 것이 단점이다그러나 시스템에 문제가 발 생되었을 때 발생되기 이전의 상태로 시스템을 확실히 복구할 수 있는 장점이 있다리눅스를 설치한 후에는 완전

백업을 하는 것이 향후에 리눅스를 재설치 해야 할 경우를 리눅스를 다시 설치하지 않고서도 백업을 복원시켜 부트 로더만 수정해 주면 설치 원상태로 되돌려 놓을 수 있는 이점이 있다.

 

(2) 증분 백업(Incremental Backup)

일반적으로 백업은 완전 백업과 증분 백업을 병행하는데증분 백업은 완전 백업한 이후에 변경된 데이터만을 백업 하는 방법이다최근 백업이후에 변경된 파일에 대해서만 백업이 이뤄지기 때문에 빠른 시간 내에 백업이 이뤄지는

장점이 있다리눅스 설치 이후에 생성되는 데이터이후에 파일에 대해서 증분 백업으로 백업을 도모하는 것이 리눅

스 시스템에 문제가 발생되더라도 리눅스를 다시 설치하지 않고서도 완전 백업을 복원하여 그 이후의 생성된 데이 터이후에 파일을 문제 방생 이전의 상태로 되돌려 놓을 수 있게 된다.

 

증분 백업은 일반 백업이나 증분 백업을 마지막으로 수행한 후 만들어지거나 변경된 파일을 백업합니다해당 파일은 백업된 것으로 표시됩니다보관 특성의 선택이 취소됩니다일반 백업과 증분 백업을 함께 수행하는 경우 데이터를 복원하려면 모든 증분 백업 세트와 최신 일반 백업 세트가 있어야 합니다.

 

(3) 차등백업(Differential Backup)

보통 증분백업과 비슷하기 때문에 혼동하는 경우가 없지 않는데차등 백업은 완전 백업이 이뤄진 이후의 모든 데

이터에 대해서 백업이 이뤄지도록 하는 방법이다증분 백업으로 백업된 데이터가 있더라도 차등 백업은 이러한 것 을 가리지 않고전체 백업 이후의 모든 데이터를 백업하는 것을 말한다차등 백업은 완전 백업 이후의 모든 파일

에 대해서 백업이 이뤄지기 때문에 데이터를 복원하는데 있어서는 시간이 오래 걸리는 불편함이 있을 수 있다.

 

차등 백업은 일반 백업이나 증분 백업을 마지막으로 수행한 후 만들어지거나 변경된 파일을 복사합니다하지만 해당 파일이 백업된 것으로 표시되지는 않습니다보관 특성의 선택이 취소되지 않습니다일반 백업과 차등 백업을 함께 수행하는 경우 파일과 폴더를 복원하려면 최신 차등 백업과 최신 일반 백업이 있어야 합니다.

 

[참고백업 종류(용어)

https://msdn.microsoft.com/ko-kr/library/Cc784306(v=WS.10).aspx







백업/복구 명령어(Backup/Restore Command)



(1) 백업/복구 명령어 종류

 

(백업 명령어의 특징)

디렉토리 단위의 백업

■ tar 명령어           마운트된 파일시스템내에서 백업하는 명령어

■ cpio 명령어          마운트된 파일시스템내에서 백업하는 명령어


파일시스템 단위의 백업

■ dump/restore       명령어 파일시스템 단위(파티션 단위)로 백업하는 명령어


디스크 단위의 백업

■ dd 명령어             디스크 마이그레이션(Migration)하는 명령어

 

이 문서에서는 가장 많이 사용되고 있는 tar 명령어를 통한 백업 부분만을 다룬다.

 

(2) tar 명령어


 

(백업 방법(주의) 백업 받을 당시에 절대 경로 형태로 백업받지 않는다.

(상대 경로)

# cd /home

# tar cf /mnt/backup/home-backup.tar . (# tar cfz /mnt/backup/home-backup.tar.gz . )


# cd /home

# tar xf /mnt/backup/home-backup/tar

(절대 경로)

# tar cf /mnt/backup/home-backup.tar /home#


# cd /

# tar xf /mnt/backup/home-backup.tar


 

OPTIONS

-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,      extract permissions information

--same-permissions

[EX1] tar 명령어를 이용한 풀백업(Full Backup) & 증분 백업(Incremental Backup)

 

매일 매일 증가하는 데이터가 큰 서버에서 풀백업을 매일 같이 받는 방법은 좋은 방법이 아니다중간에 적당하게

증분 백업을 섞어 쓰는 방법이 좋다. tar 명령어를 통해서 풀백업과 증분 백업을 적당하게 섞어 쓰는 방법을 배워

보자.

 

Target Directory : /home

# tar cvzf /backup/home_`date +%m%d`.tar.gz /home

 

(백업 방법)

■ 풀백업(Full Backup) 방법

# cd /home

# tar -g /backup/2002-05-11.list cvzf /backup/2002-05-11-full.tar.gz .

 

■ 증분백업(Incremental Backup) 방법

# cd /home

# tar -g /backup/2002-05-11.list czvf /backup/2002-05-12.tar.gz .

 

 

(복구 방법)

■ 풀백업(Full Backup) 복구방법

# cd /home

# tar -g /backup/2002-05-11.list xzvf /backup/2002-05-11-full.tar.gz

 

■ 증분백업(Incremental Backup) 복구방법

# cd /home

# tar -g /backup/2002-05-11.list xzvf /backup/2002-05-12.tar.gz

 

 

 

① tar 명령어를 사용한 풀 백업(Full Backup)

테스트할 때백업 받을 타켓 디렉토리는 /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 -cvzf /backup/full_backup.tar.gz /home/user01

tar: /home/user01/.mozilla: Directory is new

tar: /home/user01/.mozilla/extensions: Directory is new

tar: /home/user01/.mozilla/plugins: Directory is new

tar: Removing leading `/' from member names

/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

 

# ls -l /backup

-rw-r--r-- 1 root root 132  Mar 3 02:59 backup.list

-rw-r--r-- 1 root root 1839 Mar 3 02:59 full_backup.tar.gz

 

# tar tvzf /backup/full_backup.tar.gz

drwx------ user01/user01     70 2010-03-03 02:59:31 home/user01/

drwxr-xr-x user01/user01     22 2010-03-03 00:34:57 home/user01/.mozilla/

drwxr-xr-x user01/user01      1 2010-03-03 00:34:57 home/user01/.mozilla/extensions/

drwxr-xr-x user01/user01      1 2010-03-03 00:34:57 home/user01/.mozilla/plugins/

-rw-r--r-- user01/user01     33 2010-03-03 00:34:57 home/user01/.bash_logout

-rw-r--r-- user01/user01    176 2010-03-03 00:34:57 home/user01/.bash_profile

-rw-r--r-- user01/user01    124 2010-03-03 00:34:57 home/user01/.bashrc

-rw-r--r-- root/root       2027 2010-03-03 00:35:12 home/user01/file1

-rw-r--r-- root/root        265 2010-03-03 02:12:24 home/user01/file2

-rw-r--r-- root/root        776 2010-03-03 00:35:12 home/user01/file3

 

# cat /backup/backup.list

1267552779

2051 120364 /home/user01/.mozilla/plugins

2051 120365 /home/user01/.mozilla/extensions

2051 120363 /home/user01/.mozilla

 

② tar 명령어를 사용한 증분 백업(Incremental Backup)

# cp /etc/passwd file4

# tar -g /backup/backup.list -cvzpf /backup/incremental1.tar.gz /home/user01

tar: Removing leading `/' from member names

/home/user01/

/home/user01/.mozilla/

/home/user01/.mozilla/extensions/

/home/user01/.mozilla/plugins/

/home/user01/file4

 

# ls -l /backup

-rw-r--r-- 1 root root 132  Mar 3 03:02 backup.list

-rw-r--r-- 1 root root 1839 Mar 3 02:59 full_backup.tar.gz

-rw-r--r-- 1 root root 1075 Mar 3 03:02 incremental1.tar.gz

 

# tar tvzf /backup/incremental1.tar.gz

drwx------ user01/user01     77 2010-03-03 03:01:32 home/user01/

drwxr-xr-x user01/user01     22 2010-03-03 00:34:57 home/user01/.mozilla/

drwxr-xr-x user01/user01      1 2010-03-03 00:34:57 home/user01/.mozilla/extensions/

drwxr-xr-x user01/user01      1 2010-03-03 00:34:57 home/user01/.mozilla/plugins/

-rw-r--r-- root/root       2027 2010-03-03 03:01:32 home/user01/file4

 

# cat /backup/backup.list

1267552935

2051 120364 /home/user01/.mozilla/plugins

2051 120365 /home/user01/.mozilla/extensions

2051 120363 /home/user01/.mozilla

-> 이 파일은 기준이 되는 파일이므로 변화가 없다.(스냅샷 파일 사진 파일)

 

 

③ tar 명령어를 사용한 증분 백업(Incremental Backup)

# cp /etc/services file5

# tar -g /backup/backup.list -cvzpf /backup/incremental2.tar.gz /home/user01

tar: Removing leading `/' from member names

/home/user01/

/home/user01/.mozilla/

/home/user01/.mozilla/extensions/

/home/user01/.mozilla/plugins/

/home/user01/file5

 

# ls -l /backup

-rw-r--r-- 1 root root    132 Mar 3 03:03 backup.list

-rw-r--r-- 1 root root   1839 Mar 3 02:59 full_backup.tar.gz

-rw-r--r-- 1 root root   1075 Mar 3 03:02 incremental1.tar.gz

-rw-r--r-- 1 root root  99185 Mar 3 03:03 incremental2.tar.gz

 

# tar tvzf /backup/incremental2.tar.gz

drwx------ user01/user01     84 2010-03-03 03:03:35 home/user01/

drwxr-xr-x user01/user01     22 2010-03-03 00:34:57 home/user01/.mozilla/

drwxr-xr-x user01/user01      1 2010-03-03 00:34:57 home/user01/.mozilla/extensions/

drwxr-xr-x user01/user01      1 2010-03-03 00:34:57 home/user01/.mozilla/plugins/

-rw-r--r-- root/root     362031 2010-03-03 03:03:35 home/user01/file5

④ tar 명령어를 사용한 증분 백업(Incremental Backup)

파일을 삭제하고 백업을 받아 본다.

 

# ls

file1 file2 file3 file4 file5

 

# rm -f file5

# ls

file1 file2 file3 file4

 

# tar -g /backup/backup.list -cvzpf /backup/incremental3.tar.gz /home/user01

-> 출력내용 확인

 

# ls -l /backup

-rw-r--r-- 1 root root    132 Mar 3 03:08 backup.list

-rw-r--r-- 1 root root   1839 Mar 3 02:59 full_backup.tar.gz

-rw-r--r-- 1 root root   1075 Mar 3 03:02 incremental1.tar.gz

-rw-r--r-- 1 root root  99185 Mar 3 03:03 incremental2.tar.gz

-rw-r--r-- 1 root root    272 Mar 3 03:08 incremental3.tar.gz

 

⑤ tar 명령어를 사용한 복구 방법

 

(가정) 불의의 사고로 /home/user01 폴더의 내용이 지워졌다고 가정한다.

# cd /home/user01

# rm -rf *

 

# cd /

# tar -g /backup/backup.list -xvzf /backup/full_backup.tar.gz

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

 

# ls /home/user01

file1 file2 file3

 

# tar -g /backup/backup.list -xvzf /backup/incremental1.tar.gz

home/user01/

home/user01/.mozilla/

home/user01/.mozilla/extensions/

home/user01/.mozilla/plugins/

home/user01/file4

 

# ls /home/user01

file1 file2 file3 file4

 

# tar -g /backup/backup.list -xvzf /backup/incremental2.tar.gz

home/user01/

home/user01/.mozilla/

home/user01/.mozilla/extensions/

home/user01/.mozilla/plugins/

home/user01/file5

 

# ls /home/user01

file1 file2 file3 file4 file5

 

# tar -g /backup/backup.list -xvzf /backup/incremental3.tar.gz

home/user01/

home/user01/.mozilla/

home/user01/.mozilla/extensions/

home/user01/.mozilla/plugins/

tar: Deleting `home/user01/file5'

-> 출력화면 확인

 

# ls /home/user01

file1 file2 file3 file4

 

 

[참고원격 서버에 백업하는 경우

------ ServerA ------ ----- ServerB ------

# vi /etc/exports

/backup ServerB(rw,no_root_squash)

# service nfs restart

# exportfs # mount ServerA:/backup /backup

# tar -g backup.list -cvzf /backup/backup.tar.gz /home

 

[참고] tar 명령어를 이용한 풀백업 및 증분 백업에 대해서

■ 출처: http://smiletw.myscan.org/myarticle/TarBackup.txt

=====================================================================================

제 5회 데비안유저스 세미나

날 짜 : 2002년 5월 11

작성자 엄태욱(smiletw)

=====================================================================================

(1) tar 명령어를 이용한 풀백업 및 증분 백업

 

일반적으로 tar를 이용해서 아카이브를 만들면 풀백업이 된다그러나 사용자 홈디렉토리또는 한 파티션 전체 를 백업할때는 풀 백업을 자주 사용하기 힘들다이럴경우 풀 백업과함께 증분 백업을 해 주는 것이 좋다. GNU

tar는 옵션 처리만으로 손쉽게 풀백업과증분 백업이 가능하게 해준다.

 

먼저 GNU tar의 풀 백업 및 증분 백업에 쓰이는 옵션이 2가지 있다.

-G (--incremental)옵션과 -g snapshot-file (--listed-incremental) 이 그것이다.

 

-G 옵션은 예전 증분 백업 포맷으로 아카이브를 생성해 준다이 옵션으로 생성된아카이브에는 아카이브 내에 포함되어 있는 파일이나 디렉토리의 정보가 들어가므로 비표준 아카이브로 생성된다따라서 GNU버젼이 아닌 tar로도 내용을 볼 수가 없게 된다. -g snapshot-file 옵 션은 표준 아카이브로 생성되면서파일이나 디렉토리 등의 정보를 snapshot-file에 따로 저장함으로써표준 아카이브를 생성하게 만들어 준다따라서 GNU tar를 이용한 풀 백업 및 증분 백업에서는 -G 옵션이 아닌 -g snapshot-file 옵션을사용하는 것이 좋다.

 

■ 풀 백업(Full Backup)

$ tar -g list -czvf backup.tar.gz home/

list 라는 snap-shot 파일이 생성된다그리고 backup.tar.gz이라는 백업된아카이브가 생성된다.

 

■ 증분 백업(Incremental Backup)

$ tar -g list -czvf backup-1.tar.gz home/

기존의 list 파일에서 이미 풀 백업된 내용을 확인하고그 이후에 변경되거나 추가되거나삭제된 파일들을

backup-1.tar.gz에 백업한다.

 

(2) GNU tar를 이용한 복구

 

먼저 풀 백업된 아카이브를 복구한다.

$ tar -g list xzvf backup.tar.gz

 

다음으로 증분 백업된 아카이브들 중 가장 최근에 백업한 것만 복구하면 된다.

$ tar -g list xzvf backup-10.tar.gz

 

(3) 백업 및 복구의 유용한 옵션

 

-W (--verify) 검증 백업을 하는 도중 변경되는 파일이 있을 경우가 있다특히 풀 백업과 같이 시간이 오래

걸리는 백업의 경우 아카이브가 생성되는 동안 변경될 가능성이 높다따라서 풀 백업의 경우 검증해주는 것이

좋다.

$ tar -g list -cvf backup.tar home/

이 경우 아카이브 생성 후아카이브의 내용과 실제 디렉토리의 내용과 같은지 확인한다.그러나 gzip으로 압축 하는 -z 옵션과 같이 사용할 수 없다따라서 검증 옵션을 사용해서아카이브를 생성할 경우 gzip압축은 따로

해주어야 한다.

 

(4) 백업 정책

 

GNU tar의 경우 앞서 말한 level 1 백업까지만을 지원해 준다. snapshot-file이 없을경우 풀 백업(level 0)

하고, snapshot-file이 이미 존재할 경우 증분 백업(level 1)을하게 된다따라서 어느 시점에 풀 백업을 해야

하는지가 백업 정책에서 중요하다.백업할 파일들이 자주 변경될 경우풀 백업의 주기도 짧아진다또한 변화 될 데이터가매우 중요할 경우백업도 자주 해야한다.

 

일반적으로 level 1 백업만을 지원해 주는 GNU tar를 이용한다면, 1주일에 한번 풀 백업을 실행하고 매일 증분

백업을 한다백업하는 시간은 파일의 변화가 적은 새벽이 좋다.따라서 일요일 새벽12시를 전 후해서 풀 백업 을 하고매일 새벽에 증분 백업을 하는 것이좋다.

 

또한 풀 백업의 경우검증 옵션 (-W)을 사용하여아카이브를 검증해주는 것이 좋다.그리고 아카이브의 크기 를 줄이기 위해서 -z 옵션을 사용하여 압축해 주는 것이 좋다아카이브를 만들 때는 아카이브의 이름에 신경 을 써주어야 백업을 할 때혼란이 적다.풀 백업을 할 경우 다음과 같이 snapshot-file의 이름도 백업 날짜를

써주는 것이 좋다.

$ tar -g 2002-05-11.list -W -cvf 2002-05-11-full.tar home/

 

증분백업 때도 마찬가지로 날짜를 써 주는 것이 좋다.

$ tar -g 2002-05-11.list -czvf 2002-05-12.tar.gz home/

 

그리고 -g 옵션에 쓰이는 snapshot-file의 보관 또한 중요하다. snapshot-file이 없으면 증분 백업된 아카이브 는 수정된 부분만 저장되어 있는 일반 아카이브와 같아진다풀 백업 이후 삭제된 파일이 있음에도 불구하 고증분 백업된 아카이브를 복구할 때,풀 백업된 아카이브의 복구때 생성된 파일이 삭제되지 않는다따라서

용량이 작은snapshot-file은 꼭 따로 안전한 곳에 보관해 주어야 한다.

위의 내용은 “http://metalbear.egloos.com/tag/tar/page/1” 참고하였습니다원작자의 글을 손상하지 않았습니다.


[EX2] tar 명령어를 이용한 특정 디렉토리 데이터 자동 백업

 

자동화 작업은 백업할 때 많은 도움을 주는데아래에서는 자동으로 백업하기 위해서 backup.cron이라는 스크립트 를 예를들어 설명하고 있다이 백업 스크립트는 몇 가지 변수(COMPUTER, DIRECTORIES, BACKUPDIR 그리고 TIMEDIR)만 변경해 주면 어떠한 환경에서도 사용할 수 있다이 스크립트를 이용해 첫 달 초에 실행하고 주된 변경 이 있기 전에 한 달 동안 실행한다이 예제에서는 로컬 서버의(BACKUPDIR) 디렉토리로 백업을 하는데 물론 이 스 크립트를 수정하여 로컬 서버에 있는 테이프나 nfs를 통한 백업도 할 수 있다.

 

① touch /etc/cron.daily/backup.cron 생성

# mkdir /backups /* 백업을 저장할 위치 */

# mkdir /backups/last-full /* 풀 백업한 시각을 저장할 파일 */

# touch /etc/cron.daily/backup.cron

# vi /etc/cron.daily/backup.cron

#!/bin/bash

#

각자의 환경에 맞도록 아래 5개의 변수를 수정한다.

COMPUTER=wuddl              이 컴퓨터의 이름

DIRECTORIES=/home              백업할 디렉토리

BACKUPDIR=/backups          백업을 저장할 위치

TIMEDIR=/backups/last-full  풀 백업한 시각을 저장할 파일

TAR=/bin/tar                # tar 명령의 위치

 

#아래는 전혀 변경할 필요가 없다.

PATH=/usr/local/bin:/usr/bin:/bin

DOW=`date +%a`              일주일 중의 요일예를 들면 Mon

DOM=`date +%d`              한 달(31중의 날짜예를 들면 27

DM=`date +%d%b`             날짜와 달예를 들면 27Sep

 

한 달의 첫날(1)에 영원한 풀 백업이 진행된다.

매 일요일에는 지난 일요일의 백업을 덮어쓰는 풀 백업이 진행된다.

나머지 시간에는 증가분 백업이 진행되는데,

각각의 증가분 백업은 같은 이름으로 일주일 전의 증가분 백업을 덮어쓴다.

#

만약 NEWER = ""일 경우 tar는 디렉토리에 있는 모든 파일을 백업하고

# NEWER의 날짜는 매주 일요일에 쓰여지는 파일에서 읽어온다.

#

 

매달 풀 백업 if( $DOM = "01" ]; then # 한달중 01이면

NEWER=""

$TAR $NEWER -cf $BACKUPDIR/$COMPUTER-$DM.tar $DIRECTORIES

# tar “” -cf /backups/wuddl-`date +%d%b`.tar /home의 명령어가 실행되는 것과 동일

fi

 

매주별 풀 백업

if [ $DOW = "Sun" ]; then

NEWER="“

NOW=`date +%d-%b`

 

풀 백업 날짜를 갱신한다.

echo $NOW > $TIMEDIR/$COMPUTER-full-date

# echo `date +%d-%b`> /backups/last-full/wuddl-full-date의 명령어가 실행되는 것과 동일

$TAR $NEWER -cf $BACKUPDIR/$COMPUTER-$DOW.tar $DIRECTORIES

# tar “” -cf /backups/wuddl-`date +%d%b`.tar /home의 명령어가 실행되는 것과 동일

증가분 백업을 한다지난 주의 데이터를 덮어쓴다.

else

 

지난 풀백업의 날짜를 가져온다.

NEWER="--newer `cat $TIMEDIR/$COMPUTER-full-date`"

$TAR$NEWER -cf $BACKUPDIR/$COMPUTER-$DOW.tar $DIRECTORIES

fi

 

② TIMEDIR 디렉토리에 시간을 나타내는 파일을 생성

# date +%d%b > /backups/last-full/myserver-full-date

/* '/backups/last-full'은 TIMEDIR 변수로서 풀 백업을 한 시간을 저장 */

/* 'myserver-full-date'은 서버의 이름 */

 

③ root 권한만이 스크립트를 실행 가능하도록 권한 변경

# chmod 700 /etc/cron.daily/backup.cron

/* /etc/cron.daily 디렉토리에 있으므로 cron에 의해 매일 오전 1시에 자동으로 실행 */



[EX3] tar 명령어를 통한 데이터 마이그레이션

많은 데이터가 들어 있는 디렉토리를 다른 디렉토리로 마이그레이션 작업을 하기 위해서는 cp 명령어를 사용하 지 않고백업하는 명령어를 통해서 옮긴다.

 

(cp 명령어를 통한 디렉토리 복사)

# mkdir /test1 /test2

# cd /test1

# cp -p /etc/passwd file1

# ln -s file1 file2

# cp /bin/ls file3

# cp ~/.bashrc .file4

# mkdir dir1

# chmod 777 file1

 

cp -r /test1/* /test2

# ls -al /test1 /test2

/test1:

total 124

drwxr-xr-x   3  root root   4096   Mar 3 04:01 .

drwxr-xr-x  32  root root   4096   Mar 3 04:01 ..

-rw-r--r--   1  root root    289   Mar 3 04:01 .file4

drwxr-xr-x   2  root root   4096   Mar 3 04:01 dir1

-rw-r--r--   1  root root   2027   Mar 3 04:01 file1

lrwxrwxrwx   1  root root      5   Mar 3 04:01 file2 -> file1

-rwxr-xr-x   1  root root  95116   Mar 3 04:01 file3

/test2:

total 120

drwxr-xr-x   3  root root   4096   Mar 3 04:02 .

drwxr-xr-x  32  root root   4096   Mar 3 04:01 ..

drwxr-xr-x   2  root root   4096   Mar 3 04:02 dir1

-rw-r--r--   1  root root   2027   Mar 3 04:02 file1

lrwxrwxrwx   1  root root      5   Mar 3 04:02 file2 -> file1

-rwxr-xr-x   1  root root  95116   Mar 3 04:02 file3

 

(tar 명령어를 통한 디렉토리 복사)

# rm -rf /test1 /test2

 

# mkdir /test1 /test2

# cd /test1

# cp -p /etc/passwd file1

# ln -s file1 file2

# cp /bin/ls file3

# cp ~/.bashrc .file4

# mkdir dir1

# chmod 777 file1

 

# cd /test1

tar cvpf - . | (cd /test2 ; tar xvpf -)

# ls -al /test1 /test2

/test1:

total 124

drwxr-xr-x   3  root  root   4096  Mar 3 04:01 .

drwxr-xr-x  32  root  root   4096  Mar 3 04:01 ..

-rw-r--r--   1  root  root    289  Mar 3 04:01 .file4

drwxr-xr-x   2  root  root   4096  Mar 3 04:01 dir1

-rw-r--r--   1  root  root   2027  Mar 3 04:01 file1

lrwxrwxrwx   1  root  root      5  Mar 3 04:01 file2 -> file1

-rwxr-xr-x   1  root  root  95116  Mar 3 04:01 file3

/test2:

total 124

drwxr-xr-x   3  root  root   4096  Mar 3 04:01 .

drwxr-xr-x  32  root  root   4096  Mar 3 04:01 ..

-rw-r--r--   1  root  root    289  Mar 3 04:01 .file4

drwxr-xr-x   2  root  root   4096  Mar 3 04:01 dir1

-rw-r--r--   1  root  root   2027  Mar 3 04:01 file1

lrwxrwxrwx   1  root  root      5  Mar 3 04:06 file2 -> file1

-rwxr-xr-x   1  root  root  95116  Mar 3 04:01 file3

 

(단순비교)  # find /test1 | wc -l

            # find /test2 | wc -l

(정밀비교)  # diff --recursive /test1 /test2

 



[EX4] tar 명령어를 이용한 운영체제 전체 백업

 

운영체제를 백업하기 위해서 /proc, /mnt, /media, /tmp 디렉토리는 포함하지 않아도 된다제외할 디렉토리의

경우 ‘--exclude=’로 영역을 지정해준다지정된 영역을 제외한 나머지 부분이 '<백업파일명>.tar.gz'으로

백업되는 것이다.

 

(명령어 형식)

# tar cvzpf /backup<백업파일명>.tar.gz --exclude=<제외할 디렉토리> --absolute-name /

 

# du -sh /

3.6G /

 

# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/sda1 6.4G 3.4G 2.7G 56% /

/dev/sda8 487M 11M 451M 3% /data1

/dev/sda7 487M 11M 451M 3% /data2

/dev/sda6 487M 11M 451M 3% /data3

/dev/sda5 487M 11M 451M 3% /data4

/dev/sda3 487M 11M 451M 3% /home

tmpfs 506M 0 506M 0% /dev/shm

/dev/sdc1 7.9G 147M 7.4G 2% /RootBackup

 

time tar cvzfp /RootBackup/full_backup.tar.gz \

> --exclude=/proc --exclude=/tmp \

> --exclude=/media --exclude=/RootBackup \

> --absolute-name /

 

..... (중략) .....

/dev/pts/

/dev/pts/1

/boot/

/boot/grub/

/boot/grub/device.map

/boot/grub/vstafs_stage1_5

..... (중략) ......

real     5m12.019s   (약 512초 정도)

user     2m26.956s

sys      1m55.439s

 

# ls -l /RootBackup

-rw-r--r--  1  root  root  1167537829    3월   3  04:32  full_backup.tar.gz

drwx------  2  root  root        16384   3월   3  04:23  lost+foukupK

 

# df -h

Filesystem             Size   Used  Avail  Use%  Mounted on

/dev/sda1              6.4G   3.4G   2.7G   56%  /

/dev/sda8              487M    11M   451M    3%  /data1

/dev/sda7              487M    11M   451M    3%  /data2

/dev/sda6              487M    11M   451M    3%  /data3

/dev/sda5              487M    11M   451M    3%  /data4

/dev/sda3              487M    11M   451M    3%  /home

tmpfs                  506M      0   506M    0%  /dev/shm

/dev/sdc1              7.9G   1.3G   6.3G   17%  /RootBackup

 






rsync 서비스를 이용한 백업


(주의) 이전 실습에서 사용한 환경 설정 내용을 삭제한다. ( echo 줄 지우기)

/etc/profile, /etc/profile.d/test.sh, /etc/bashrc, ~/.bash_profile. ~/.bashrc

# vi /etc/profile

# rm -f /etc/profiled/test.sh

# vi /etc/bashrc

# vi ~/.bash_profile

# vi ~/.bashrc


(1) rsync 서비스를 이용한 로컬 데이터 백업 및 서버 동기화

 

여러 대의 서버를 분산하여 서버 데이터를 동기화하는데 rsync 유틸리티가 많이 사용된다. rsync는 루트 권한없 이 서버로부터 데이터로 빠르게 전송받을 수 있으며원격 서버와 미러 서버와 전송 데이터를 비교하여 변화된데이터를 저장할 수 있다또한 SSH를 이용하면 rsync 서버가 구축되어 있지 않아도 미러링을 할 수 있는 이점 이 있다.

rsync 서버는 xinetd 방식으로 동작한다.

 

----- ServerA -----            ----- ServerB -----

rsync --daemon(873)

/etc/rsyncd.conf

/Mirror_Backup <------------------> /Backup

                              # rsync -avz --delete -e ssh ServerA:/Mirror_Backup /Backup

 

(a) rsync 서버 설정 과정

() /etc/rsyncd.conf 생성

() /etc/xinetd.d/rsync 수정

() xinetd 서비스 재시작

 

(b) rsync 클라이언트

() rsync 명령어를 이용한다.

 

(2) rsync 명령어

 

(명령어 형식)

# rsync -avz --delete -e ssh <원격서버:데이터경로> <백업경로>

# rsync -avz --delete -e ssh 192.168.0.250:/backup /backup

 

Options

-a, --archive                archive mode; same as -rlptgoD (no -H)

-v, --verbose                increase verbosity

-z, --compress               compress file data during the transfer

    --delete                 delete files that don't exist on the sending side

-r, --recursive              recurse into directories

-I, --ignore-times           don't skip files that match in size and mod-time

-p, --perms                  preserve permissions

-o, --owner                  preserve owner (super-user only)

-g, --group                  preserve group

-t, --times                  preserve times

-D                           same as --devices --specials


[EX1] 로컬서버의 로컬 디렉토리와 로컬 디렉토리 동기화

 

(명령어 형식)

# rsync -avz --delete -e ssh /backup/ /test101/

# rsync -avz --delete -e ssh /backup/ /test101

 

# rsync -avz --delete -e ssh /backup /test101

 

# rsync -avz --delete -e ssh IP:/backup/ /test100/

# rsync -avz --delete -e ssh IP:/backup/ /test100

 

# rsync -avz --delete -e ssh IP:/backup /test100


 

만약 rsync 프로그램이 설치되어 있지 않다면 프로그램을 설치해 준다.

 

# rpm -q rsync

rsync-3.0.6-6.el5_11

# yum install rsync

 

① 백업 디렉토리 확인

만약 /backup 디렉토리안에 내용이 없다면 만들어 준다.


일단 실습할 파일들을 생성한다 


# cp /etc/hosts /backup

# cp /etc/passwd /backup

# cp /etc/group /backup


# ls /backup


② 
/backup(원본디렉토리와 /test100/backup(미러디렉토리를 동기화 

# rsync -avz --delete -e ssh 192.168.0.XXX:/backup /test100 (192.168.0.XXX 자신의 서버의 IP)

= # rsync -avz --delete -e ssh /backup /test100 

The authenticity of host '192.168.0.240 (192.168.0.240)' can't be established.

RSA key fingerprint is 40:36:17:cf:c8:4c:43:3d:0c:d5:aa:bf:08:0d:5b:fd.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '192.168.0.240' (RSA) to the list of known hosts.

root@192.168.0.240's password: (root 사용자 암호 입력)

receiving file list ... done

created directory /test100

backup/

backup/backup.list

backup/full_backup.tar.gz

backup/incremental1.tar.gz

backup/incremental2.tar.gz

backup/incremental3.tar.gz

sent 136 bytes received 104501 bytes 16098.00 bytes/sec

total size is 104114 speedup is 1.00

 

# ls /test100

backup

 

# ls /backup /test100/backup

/backup:

group  hosts  passwd


/test100/backup:

group  hosts  passwd

 

③ /backup 디렉토리에서 backup.list 파일 삭제

# rm -rf /backup/backup.list

# ls /backup

group  hosts  passwd

 

④ /backup(원본디렉토리와 /test100/backup(미러디렉토리를 동기화

# rsync -avz --delete -e ssh 192.168.0.XXX:/backup /test100

= # rsync -avz --delete -e ssh /backup /test100

root@192.168.0.240's password: (root 사용자 암호 입력)

receiving file list ... done

deleting backup/backup.list

backup/

sent 26 bytes received 161 bytes 53.43 bytes/sec

total size is 103982 speedup is 556.05

 

# ls /backup /test100/backup

/backup:

full_backup.tar.gz incremental1.tar.gz incremental2.tar.gz incremental3.tar.gz

/test100/backup:

full_backup.tar.gz incremental1.tar.gz incremental2.tar.gz incremental3.tar.gz

-> 2개의 디렉토리가 동기화 되어 있는 것을 확인 할 수 있다.


⑤ 로컬에 존재하는 디렉토리 미러링

# rsync -avz --delete -e ssh 192.168.0.240:/backup/ /test101/

The authenticity of host '192.168.0.240 (192.168.0.240)' can't be established.

RSA key fingerprint is 40:36:17:cf:c8:4c:43:3d:0c:d5:aa:bf:08:0d:5b:fd.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '192.168.0.240' (RSA) to the list of known hosts.

root@192.168.0.240's password: (root 사용자의 암호 입력)

receiving file list ... done

created directory /test101

./

full_backup.tar.gz

incremental1.tar.gz

incremental2.tar.gz

incremental3.tar.gz

sent 114 bytes received 104356 bytes 18994.55 bytes/sec

total size is 103982 speedup is 1.00

-> /test101 디렉토리가 없으면 생성한다.


# ls /backup /test101

/backup:

full_backup.tar.gz incremental2.tar.gz

incremental1.tar.gz incremental3.tar.gz

/test101:

full_backup.tar.gz incremental2.tar.gz

incremental1.tar.gz incremental3.tar.gz

 

(주의) 아래 사항의 차이점을 이해 해야 한다.

# rsync -avz --delete -e ssh /backup/ /test101/ (# rsync -avz --delete -e ssh /backup/ /test101)

-> () /test101 디렉토리가 없으면 생성된다.

-> (/backup 디렉토리의 내용과 /test101 디렉토리의 내용은 동일하다.

 

# rsync -avz --delete -e ssh /backup /test101

-> () /test101 디렉토리가 없으면 생성된다.

-> (/test101 디렉토리안에 backup 디렉토리가 생성된다.

[EX2] rsync 서버 구축 및 rsync 명령어 사용

ssh를 이용한 rsync데이터 동기화를 위해서는 서버에 ssh서버가 작동 하고 있어야 한다.

rsync 서버를 구축하기 위해서는 rsync 설정파일인 /etc/rsyncd.conf 파일을 설정해야 한다.




[추가적인 실습]


Local(/backup/*)  ---> Local(/test100/*)


         # rsync -avz --delete -e ssh /backup/ /test100/


         # ls /backup /test100


 


Local(/linux2XX/*)  ---> Remote(172.16.6.252:/backup/linux2XX/*)


         # mkdir -p /linux2XX


         # cp /backup/* /linux2XX


         # rsync -avz --delete -e ssh /linux2XX 172.16.6.252:/backup


         # ssh 172.16.6.252 ls /backup


 


Remote(172.16.6.252:/backup/linux2XX/*) ---> Local(/test101/*)


         # rsync -avz --delete -e ssh 172.16.6.252:/backup/linux2XX/ /test101/

 # ls /test101


        

 


 


[참고] Win-Rsync : Windows 방식 툴(모든 OS에서 호환)


ActiveSync : Window <- sync -> Windows


cwRsync    : Window <- sync -> Linux/Unix










[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 파일 작성

 

# rpm -q rsync (# rpm -qa | grep rsync)

rsync-2.6.8-3.1

# rpm -q rsync

# rpm -qi rsync

# rpm -ql rsync

# rpm qf /bin/ls

 

# rpm -ql rsync

/etc/xinetd.d/rsync

/usr/bin/rsync

/usr/share/doc/rsync-2.6.8

/usr/share/doc/rsync-2.6.8/COPYING

/usr/share/doc/rsync-2.6.8/README

/usr/share/doc/rsync-2.6.8/tech_report.tex

/usr/share/man/man1/rsync.1.gz

/usr/share/man/man5/rsyncd.conf.5.gz

.... (중략) ....

 

# man rsyncd.conf

/EXAMPLES <----- 매뉴얼 페이지에서 빠른 검색을 한다.

..... (중략) .....

uid = nobody

gid = nobody

use chroot = no

max connections = 4

syslog facility = local5

pid file = /var/run/rsyncd.pid

[ftp]

path = /var/ftp/pub

comment = whole ftp area (approx 6.1 GB)

[sambaftp]

path = /var/ftp/pub/samba

comment = Samba ftp area (approx 300 MB)

[rsyncftp]

path = /var/ftp/pub/rsync

comment = rsync ftp area (approx 6 MB)

[sambawww]

path = /public_html/samba

comment = Samba WWW pages (approx 240 MB)

 

[cvs]

path = /data/cvs

comment = CVS repository (requires authentication)

auth users = tridge, susan

secrets file = /etc/rsyncd.secrets

The /etc/rsyncd.secrets file would look something like this:

tridge:mypass

susan:herpass

..... (중략) .....


# vi /etc/rsyncd.conf (# scp 172.16.9.252:/etc/rsyncd.conf /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 : 업로드 가능 */

 

(/etc/rsyncd.conf 파일의 다른 예)

motd file = /etc/rsyncd.motd

log file = /var/log/rsyncd.log

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

[simple_path_name]

path = /rsync_files_here

comment = My Very Own Rsync Server

uid = nobody

gid = nobody

read only = no

list = yes

auth users = username

secrets file = /etc/rsyncd.scrt

host allow=192.168.0.4            /* ip주소 제한하지 않으면 누구나 데이터를 가져갈 수 있다. */

 

# 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

server           = /usr/bin/rsync

server_args      = --daemon

log_on_failure   += USERID

}

 

# service xinetd restart

xinetd 를 정지 중:                                          [ OK ]

xinetd ()를 시작 중:                                      [ OK ]

-> 서비스 적용

 

③ 서버에서 rsync 서버 동작에 대한 간단한 테스트

# cat /etc/serivces | 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...

Connected to localhost.localdomain (127.0.0.1).

Escape character is '^]'.

@RSYNCD: 29

quit                        <------ 'quit' 입력

@ERROR: protocol startup error

Connection closed by foreign host.

-> rsync 서비스가 873번 포트에서 정상적으로 동작 중이다.

④ 클라이언트에서 rsync 명령어 수행

 

----- 192.168.0.250 ----- ----- 192.168.0.XXX -----

/backup1/(내용) -----------------> # rsync -avz --delete -e ssh 192.168.0.250::Backup /backup1

 

(At linux250.example.com) 192.168.0.250

# cp -r /etc/init.d/* /backup1

# ls /backup1

NetworkManager       dovecot      killall         oddjobd           smb

acpid                dund         krb524          pand              spamassassin

anacron              firstboot    kudzu           pcscd             squid

apmd                 functions    lvm2-monitor    portmap           sshd

atd                  gpm          mcstrans        psacct            syslog

auditd               haldaemon    mdmonitor       rawdevices        tcsd

autofs               halt         mdmpd           rdisc             tux

avahi-daemon         hidd         messagebus      readahead_early   vmware-tools

avahi-dnsconfd       hplip        microcode_ctl   readahead_later   vncserver

bluetooth            hsqldb       multipathd      restorecond       vsftpd

capi                 httpd        named           rpcgssd           wdaemon

conman               ibmasm       netconsole      rpcidmapd         winbind

cpuspeed             innd         netfs           rpcsvcgssd        wpa_supplicant

crond                ip6tables    netplugd        rwhod             xfs

cups                 iptables     network         saslauthd         xinetd

cups-config-daemon   irda         nfs             sendmail          ypbind

dc_client            irqbalance   nfslock         setroubleshoot    yum-updatesd

dc_server            isdn         nscd            single

dnsmasq              kdump        ntpd            smartd

 

(At linuxXXX.example.com) 192.168.0.XXX

# rsync -avz --delete -e ssh 192.168.0.252::Backup /backup1

The authenticity of host '192.168.0.252 (192.168.0.252)' can't be established.

RSA key fingerprint is 8d:f4:02:f4:69:6b:c1:8d:90:91:8e:99:56:26:bb:8f.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '192.168.0.250' (RSA) to the list of known hosts.

root@192.168.0.250's password: (root 사용자 암호 입력)

receiving file list ... done

./

NetworkManager

acpid

anacron

apmd

..... (중략) .....

wdaemon

winbind

wpa_supplicant

xfs

xinetd

ypbind

yum-updatesd

sent 2126 bytes received 118320 bytes 26765.78 bytes/sec

total size is 299679 speedup is 2.49

 

# ls /backup1

NetworkManager       dovecot      killall         oddjobd           smb

acpid                dund         krb524          pand              spamassassin

anacron              firstboot    kudzu           pcscd             squid

apmd                 functions    lvm2-monitor    portmap           sshd

atd                  gpm          mcstrans        psacct            syslog

auditd               haldaemon    mdmonitor       rawdevices        tcsd

autofs               halt         mdmpd           rdisc             tux

avahi-daemon         hidd         messagebus      readahead_early   vmware-tools

avahi-dnsconfd       hplip        microcode_ctl   readahead_later   vncserver

bluetooth            hsqldb       multipathd      restorecond       vsftpd

capi                 httpd        named           rpcgssd           wdaemon

conman               ibmasm       netconsole      rpcidmapd         winbind

cpuspeed             innd         netfs           rpcsvcgssd        wpa_supplicant

crond                ip6tables    netplugd        rwhod             xfs

cups                 iptables     network         saslauthd         xinetd

cups-config-daemon   irda         nfs             sendmail          ypbind

dc_client            irqbalance   nfslock         setroubleshoot    yum-updatesd

dc_server            isdn         nscd            single

dnsmasq              kdump        ntpd            smartd

 

(At linux252.example.com) 192.168.0.252

# cd /backup1

# rm -r [a-v]*

# ls

NetworkManager winbind xfs ypbind

wdaemon wpa_supplicant xinetd yum-updatesd

 

(At linuxXXX.example.com) 192.168.0.XXX

# rsync -avz --delete -e ssh 192.168.0.252::Backup /backup1

root@192.168.0.252's password: (root 사용자 암호 입력)

receiving file list ... done

deleting vsftpd

deleting vncserver

deleting vmware-tools

deleting tux

deleting tcsd

deleting syslog

deleting sshd

..... (중략) .....

deleting avahi-dnsconfd

deleting avahi-daemon

deleting autofs

deleting auditd

deleting atd

deleting apmd

deleting anacron

deleting acpid

./

sent 80 bytes received 203 bytes 80.86 bytes/sec

total size is 18513 speedup is 65.42

 

# ls /backup1

 

NetworkManager winbind xfs ypbind

wdaemon wpa_supplicant xinetd yum-updatesd

 

(주의) 다음 명령어는 한대의 클라이언트에서만 수행한다.

# cp -r /backup1 /linuxXXX (XXX: 자신 서버의 자리번호: linux200)

# rsync -avz --delete -e ssh /linuxXXX 192.168.0.252:/backup2

root@192.168.0.252's password: (root 사용자의 암호 입력)

building file list ... done

linuxXXX/

linuxXXX/NetworkManager

linuxXXX/wdaemon

linuxXXX/winbind

linuxXXX/wpa_supplicant

linuxXXX/xfs

linuxXXX/xinetd

linuxXXX/ypbind

linuxXXX/yum-updatesd

sent 8443 bytes received 202 bytes 1017.06 bytes/sec

total size is 18513 speedup is 2.14

 

# ssh 192.168.0.252 ls /backup2

root@192.168.0.252's password: (root 사용자의 암호 입력)

linux200

linux201

linux202

linux203

..... (중략) .....