본문으로 바로가기

백업관리

category Linux/Linux Server 2017. 9. 6. 20:31
  •  백업( Backup) 의 개념 

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


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

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


  • 백업( Backup ) 의 종류
- 완전 백업 ( Full Backup ) : 완전히 다 백업
- 증분 백업 ( Incremental Backup ) : 완전 백업 하고 새로 생긴것 누적해서 백업
- 차등 백업 ( Differential Backup ): 완전 백업 하고 새로 생긴것 하나하나 백업



  • 백업 ( Backup ) 명령어
디렉토리 단위의 백업 :  tar , cpio
파일 시스템 단위의 백업 : dump / restore
디스크 단위의 백업 :  dd 

가장 많이 사용되는 tar 명령어 백업을 다뤄보겠습니다.

[참고] tar 명령어
# tar cvf file.tar file1 file2 file3
# tar tvf file.tar
# tar xvf file.tar

# tar cvzf file.tar.gz file1 file2 file3
# tar tvzf file.tar
# tar xvzf file.tar

# tar cvjf file.tar.bz2 file1 file2 file3
# tar tvjf file.tar
# tar xvjf file.tar

(주의) 백업을 받을땐 절대 경로로 받지 않는다.

절대경로로 받으면 압축을 풀때 그 경로로 압축이 풀린다.

만약 현재파일과 백업된 파일을 비교하려고 백업된 압축을 풀면 현재 파일에 오버라이트 되어버려 현재 파일을 다 날려버릴 수 있다. 


(상대경로)
# cd /home
# tar cvf /mnt/backup/home-backup.tar .  ( # tar cvzf /mnt/backup/home-backup.tar.gz . )

(절대 경로)
# tar cvf /mnt/backup/home-backup.tar /home


[명령어 사용] Full Backup & Incremental Backup
- 백업
( Full Backup )
# cd /home
# tar -g /backup/2017-09-06.list -cvzf /backup/2017-09-06-full.tar.gz .

# ls /backup

 2017-09-06.list    2017-09-06-full.tar.gz


( Incremental Backup )
# cd /home
# tar -g /backup/2017-09-06.list -cvzf /backup/2017-09-07.tar.gz .

# ls /backup

 2017-09-06.list    2017-09-06-full.tar.gz    2017-09-07.tar.gz


- 복구

( Full Backup )

# cd /home

# tar -g /backup/2017-09-06.list -xvzf /backup/2017-09-06-full.tar.gz 


( Incremental Backup )

# cd /home

# tar -g /backup/2017-09-06.list -xvzf /backup/2017-09-07.tar.gz 


( 복구 순서 )

2017-09-06-full.tar.gz -> 2017-09-07.tar.gz -> 2017-09-08.tar.gz ...  

오래된것부터 차례대로 순서에 맞게 받아야한다.



[예] 데이터 마이그레이션  /test1/* ------ migration ------> /test2/*

cp 명령어로 옮기면 될까?

# ls -al /test1    /* 여러 파일을 만들어서 확인 */

 

 합계 120

drwxr-xr-x  3 root   root    4096  9월  7 04:38 .

drwxr-xr-x 30 root   root    4096  9월  7 04:37 ..

-rw-r--r--  1 root   root     176  9월  7 04:38 .file4

drwxr-xr-x  2 root   root    4096  9월  7 04:38 dir1

-rwxrwxrwx  1 root   root    1904  8월 21 03:42 file1

lrwxrwxrwx  1 root   root       5  9월  7 04:38 file2 -> file1

-rwxr-xr-x  1 user01 user01 93560  9월  7 04:38 file3


 


# cp -r /test1/* /test2

# ls -al /test2

 

 합계 116

drwxr-xr-x  3 root root  4096  9월  7 04:41 .

drwxr-xr-x 30 root root  4096  9월  7 04:37 ..

drwxr-xr-x  2 root root  4096  9월  7 04:41 dir1

-rwxr-xr-x  1 root root  1904  9월  7 04:41 file1

lrwxrwxrwx  1 root root     5  9월  7 04:41 file2 -> file1

-rwxr-xr-x  1 root root 93560  9월  7 04:41 file3


 

-> file1의 퍼미션이 다르다.

-> file3의 소유자 그룹소유자가 다르다.

-> 모든 파일의 생성 시간이 새로 쓰여졌다.

-> .file4  숨김 파일은 복사되지 않았다.


/* 이러한 오류는 서비스 할때 치명적인 오류로 작용할 수 있다. */


(해결방법) /test1/* 을 백업받고 /test2 에 압축을 푼다

# cd /test1

# tar cvf - . | ( cd /test2 ; tar xvf - )     /* - : stdout (monitor) */

-> 현재폴더에 있는 것을 tar 명령어로 압축한다. 압축은 - ( monitor ) 로 한다. 

-> cd /test2 로 가서  앞에 모니터에 압축해놓은 것을 해제한다. 

-> 파일을 만드는 것보다 시간을 줄일 수 있다.


[확인] 마이그레이션이 잘 됬는지 확인

# find /test1 | wc -l     # find /test2 | wc -l 

# diff --recursive /test1 /test2


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

운영체제를 백업할때 /proc , /mnt , /media , /tmp  디렉토리는 할 필요가 없다. 

-> 임시파일과 마운트는 딱히 할 필요가 없다.


(명령어 형식)

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


(수행)

# mkdir -p /RootBackup   /* 백업 파일을 저장할 디렉토리 생성 */

# tar cvzf /RootBackup/full_backup.tar.gz \

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

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

> --absolute-name /


(주의) /* --exclude=/RootBackup  -> 백업받을 디렉토리는 백업받지 않는다. 추가하지 않으면 데이터가 full 날 수 있다.  */


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

# rpm -qa | grep rsync
# yum -y install rsync

[명령어 형식]
# scp -r /test 172.16.6.252:/test
# rsync -avz --delete -e ssh /test 172.16.6.252:/test /* 처음엔 풀백업 다음부턴 추가된것만 백업*/
# rsync -avz --delete -e ssh <원격서버:데이터경로> <백업경로> 
/* --delete 소스쪽에서 삭제되면 동기화 된쪽도 삭제 */
/* -e ssh  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

 


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

[명령어 예] 
# 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

-> /backup/ /test101 : test101 디렉토리 하위에 /backup 디렉토리를 만들어 백업
-> /backup /tset101 : test101 디렉토리에 바로 백업 

[예] rsync 서버 구축 
1) /etc/rsyncd.conf 생성
2) /etc/xinetd.d/rsync 수정
3) xinetd 서비스 재시작

1) /etc/rsyncd.conf 파일 작성
# man rsyncd.conf /* 어떻게 작성해야하는지 예시가 적혀져잇음 */
/EXAMPLES

 

 EXAMPLES

       A  simple rsyncd.conf file that allow anonymous rsync to a ftp area at /home/ftp

       would be:


       [ftp]

               path = /home/ftp

               comment = ftp export area


       A more sophisticated example would be:


       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]

:


 


# 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 : 업로드 가능 */

 



# chkconfig rsync on

# service xinetd restart


[확인]

# cat /etc/services | grep rsync

 

..... 

rsync           873/tcp                         # rsync

rsync           873/udp                         # rsync

......

 


- Client 

# rsyn -avz --delete -e ssh IP::Backup /bakup1



'Linux > Linux Server' 카테고리의 다른 글

FreeRadius OTP 인증 서버 만들기  (0) 2019.03.21
raw 디스크 부팅시 자동 연결  (0) 2019.03.21
스케줄링 관리  (0) 2017.09.05
사용자 그룹 관리  (0) 2017.09.05
부팅과정  (0) 2017.09.04