linux class(new) 1 페이지

본문 바로가기
사이트 내 전체검색


회원로그인

linux class(new)

backup / restore

페이지 정보

작성자 admin 작성일16-02-16 17:02 조회1,396회 댓글1건

본문

백업
- 시스템이나 저장된 데이터에 문제가 생겼을때 복원하기 위하여 백업한다.

- 데이터가 손실될수 있는 경우
시스템 크래쉬, 커널패닉,Disk Fail, 하드웨어 장애
운영자의 실수,
허가받지 않은 사용자에 의한 데이터 파괴.
낙뢰, 화재, 침수등의 재난

백업종류

Full backup (완전백업)
- 백업대상의 파일시스템 전체를 백업

Incremental backup (증분백업)
- 최근에 백업한 시점을 기준으로 변경되거나 추가된 데이터만 백업

Differential backup (차등백업)
- 전체 백업한 시점을 기준으로 변경되거나 추가된 데이터만 백업
- full backup 이후로 부터 시간이 멀어질수록 백업하는데 시간과 용량이 더 필요해진다.

백업매체
자기테이프,하드디스크, CD-RW,usb 메모리 등 데이터를 기록할 수 있는 각종 매체.

tar(tape archive) 백업
백업매체로 데이터가 없는 하드디스크를 하나 선택한다.
아래처럼 백업용 디스크를 하나 선택해서 주파티션을 전체크기로 할당.
그리고 파일시스템 생성 및 마운트.

/root# fdisk -l /dev/sdd

Disk /dev/sdd: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xd0de9c9e

Device Boot Start End Blocks Id System
/dev/sdd1 1 130 1044193+ 83 Linux
/root#
/root# mkfs.ext4 /dev/sdd1 > /dev/null
mke2fs 1.41.12 (17-May-2010)
/root# mkdir /backup
/root# mount /dev/sdd1 /backup


백업은 /home 에 있는 모든 계정을 대상으로 한다.
상대경로와 절대경로 백업의 다른점.
1. 상대경로 백업

/root# cd /home
/home# df -h /backup/
Filesystem Size Used Avail Use% Mounted on
/dev/sdd1 1004M 20M 934M 3% /backup
/home#
/home# tar -tf /backup/home.tar *
/home# /home# tar -tf /backup/home.tar | head -n 5
lee/
lee/.bash_profile
lee/.bash_logout
lee/.gnome2/
lee/.bash_history
/home#


2. 절대경로를 이용한 백업

/home# cd /backup
/backup# tar -cf home2.tar /home/*
tar: Removing leading `/' from member names
/backup# tar -tf home2.tar | head -n 5
home/lee/
home/lee/.bash_profile
home/lee/.bash_logout
home/lee/.gnome2/
home/lee/.bash_history
/backup#

tar 백업은 상대경로를 이용한 백업이 권장된다.
절대경로를 사용했을 경우 tar 가 백업파일에서 맨앞의 슬래시를 제거함으로서
파일은 상대경로로 백업된다.

굳이 절대경로로 백업 받고자 하면 아래처럼 -P 옵션을 사용하면 된다.

/home# tar -cf /backup/home3.tar -P *
/home# tar -tf /backup/home3.tar
/home/lee/
/home/lee/.bash_profile
/home/lee/.bash_logout
/home/lee/.gnome2/
/home/lee/.bash_history
/backup#

절대 경로로 백업이 되었다.
하지만 restore 하는 경우에도 아래처럼 맨앞의 슬래시를 제가하고
풀어서 현재경로 아래에 restore 된다.

/backup# tar -xf home3.tar
tar: Removing leading `/' from member names
/backup# ls
home home.tar home2.tar home3.tar lost+found
/backup#


백업파일의 절대경로 그대로 restore 하는경우에는 백업할때와 마찬가지로
아래처럼 -P 옵션을 사용하면 된다.

/backup# tar -xf home3.tar -P


backup schedule
백업스케쥴은 아래와 같다고 가정.
월 : 풀백업
화 ~ 금 : 증분백업

월 : tar -g /mnt/backup/home.backup.list -cvzf /mnt/backup/home0.backup.tar.gz ./
화 : tar -g /mnt/backup/home.backup.list -cvzf /mnt/backup/home1.backup.tar.gz ./
수 : tar -g /mnt/backup/home.backup.list -cvzf /mnt/backup/home2.backup.tar.gz ./
... 이하생략

*. home.backup.list 은 백업할때의 정보가 저장되고 이후 증분백업할때 참고되어진다.
Restore는 full backup 부터 복구한다음 화요일 -> 수요일 -> 목요일 ... 백업데이터를 차례대로
풀어야 한다.

full backup

/backup# cd /home
/home# rm -rf /backup/*
/home# tar -cf /backup/home.fullbackup.tar *
/home#



/home# tar -g /backup/home.backup.list -cf /backup/home.fullbackup.tar *
/home# ls /backup/
home.backup.list home.fullbackup.tar
/home#


증분백업(incremental backup)
tar 의 -g, --listed-incremental 옵션이 필요하다.
테스트로 몇개의 계정과 파일을 만들고 증분백업.

/home# useradd cuser1
/home# useradd cuser2
/home# echo hello > testfile.txt
/home#

두개의 계정과 하나의 파일생성(증분백업 대상)
최근백업정보가 home.backup.list 파일에 저장되어 있으므로
그 파일을 참고해서 백업하면 증분백업이 된다.

/home# tar -g /backup/home.backup.list -cf /backup/home2.tar *

확인은 tar -tf /backup/home.tar 및 tar -tf /backup/home2.tar 로
출력해서 보면 된다.(주의. tar 증분백업시 디렉토리 구조는 전부 백업이 된다)
백업후 home.backup.list 는 다음증분 백업을 위해서 갱신된다.

파일 추가 및 수정후 다시 증분백업 테스트

/home# useradd -s /bin/bash cuser3
/home# echo "test" >> user2/.bashrc
/home# tar -g /backup/home.backup.list -cf /backup/home3.tar *
/home# tar -tf /backup/home3.tar | grep .bashrc
cuser3/.bashrc
user2/.bashrc
/home#

증분 백업 데이터중 테스트로 .bashrc 만 출력.
증분백업이 제대로 되어있음을 알수 있다.

--- restore ---
백업데이터를 이용해서 원래 데이터 복원
restore 테스트를 위해서 원래 데이터를 삭제 후 복원.


/home# rm -rf /home/*
/home# ls /backup/
home.backup.list home.fullbackup.tar home2.tar home3.tar
/home# tar -xf /backup/home.fullbackup.tar
/home# ls
lee nepat u1 u4 user100 user200 xuser1 zuser10 zuser20
lovejy nuser1 u3 user1 user2 user300 zuser1 zuser100 zuser30
/home#

fullbackup data가 복원되었다.
그 다음 증분백업 파일을 차례대로 restore 하면 된다.

/home# tar -xf /backup/home2.tar
/home# tar -xf /backup/home3.tar
/home# ls
cuser3 lovejy nuser1 u1 u4 user100 user200 xuser1 zuser10 zuser20
lee nepat testfile.txt u3 user1 user2 user300 zuser1 zuser100 zuser30
/home#

증분백업 데이터 복원 ; 전체 데이터 restore 완료.

백업을 crontab 에 등록해서 주기적으로 자동으로 백업되게 하려면
아래처럼 백업스케쥴에 맞게 백업 스크립트를 작성해서 사용하면 된다.
백업스크립트
-------------------------------------------------------------------------------------------------
#! /bin/bash
backup_dir=/mnt/backup
time=$(date +%Y%m%d%H%M)
day=$(date +%a)
backup_source=/home

if [ ! -d $backup_dir ]
then
mkdir $backup_dir
fi

if [ $day = "일" ]
then
rm -f $backup_dir/home.backup.list
tar -g $backup_dir/home.backup.list -czf $backup_dir/home_$time.full-backup.tar.gz $backup_source
else
tar -g $backup_dir/home.backup.list -czf $backup_dir/home_$time.backup.tar.gz $backup_source
fi
-------------------------------------------------------------------------------------------------
*. /etc/crontab 파일에 등록하여 주기적으로 자동 백업이 되게 한다.
ex) /etc/crontab 맨 아래에 아래처럼 등록하면 매일 새벽 한시 정각에 백업스크립트가 실행된다.
0 1 * * * root /root/bin/backup.sh

*. 기타
tar 백업시 백업대상디렉토리에서 특정파일이나 특정 디렉토리를 제외하고 백업받으려면
--exlude 옵션을 사용하면 된다.
ex)

/home# tar -cf /backup/test.tar * --exclude user1 --exclude user2

현재 디렉토리에서 user1 과 user2 를 제외하고 모든 데이터 백업

dd 백업

디스크를 복제하거나 파티션내의 모든 데이터를 복제할때 유용하게 사용될 수 있다.
디스크 전체를 복제할때는 소스디스크와 타겟디스크 용량이 같아야 한다.

dd if=/ of=/dev/st0 ; 파일시스템 전체를 테이프 드라이버에 백업.
dd if=/dev/sda1 of=/dev/st0
dd if=/dev/sdb1 of=/dev/sdc1
dd if=/dev/sdb of=/dev/sdc


/root# fdisk -l /dev/sdc /dev/sdd | egrep -i 'mb|gb'
Disk /dev/sdc: 1073 MB, 1073741824 bytes
Disk /dev/sdd: 1073 MB, 1073741824 bytes
/root# fdisk -l /dev/sdd

Disk /dev/sdd: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xd0de9c9e

Device Boot Start End Blocks Id System
/root# ls /dev/sdd*
/dev/sdd
/root#


/root# ls /dev/sdd*
/dev/sdd
/root# dd if=/dev/sdc of=/dev/sdd
2097152+0 records in
2097152+0 records out
1073741824 bytes (1.1 GB) copied, 40.891 s, 26.3 MB/s
/root#

입출력 속도를 빠르게 하려면 block size 옵션을 설정하면 가능한데
디스크 I/O(입출력) 속도에 영향을 받는다.

/root# dd if=/dev/sdc of=/dev/sdd bs=512k
2048+0 records in
2048+0 records out
1073741824 bytes (1.1 GB) copied, 6.30243 s, 170 MB/s

- 출력결과를 비교해보면 속도 차이가 나는것을 알수 있다.
- 제대로 복제가 되었는지 확인을 하려면 -->

/root# mkdir /mnt/test
/root# mount -t ext4 /dev/sdd1 /mnt/test
mount: special device /dev/sdd1 does not exist
/root# fdisk -l /dev/sdd

Disk /dev/sdd: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x96017627

Device Boot Start End Blocks Id System
/dev/sdd1 1 130 1044193+ 83 Linux
/root# ls /dev/sdd*
/dev/sdd
/root#

복제는 제대로 되었지만 파티션 파일은 파티션 작업 후 저장할때 생성이 되므로 장치파일이
만들어져 있지 않아서 마운트가 되지 않는다.
이런 경우에는 mknod 로 sdd1 을 생성하거나 fdisk /dev/sdd 를 한번 실행해서 저장하고
나가면 장치파일이 생성된다.
sdd1 파일이 생성되고 나면 임의이 디렉토리에 마운트해서 제대로 복제되었는지를 확인하면
된다.

/root# mount /dev/sdd1 /mnt/test
/root# df -h /dev/sdc1 /dev/sdd1
Filesystem Size Used Avail Use% Mounted on
/dev/sdc1 1004M 33M 921M 4% /bloghome
/dev/sdd1 1004M 33M 921M 4% /mnt/test
/root# ls /bloghome /mnt/test
/bloghome:
aquota.group aquota.user bluser1 bluser10 bluser11 bluser12 bluser2 bluser3 bluser4 bluser5 lost+found

/mnt/test:
aquota.group aquota.user bluser1 bluser10 bluser11 bluser12 bluser2 bluser3 bluser4 bluser5 lost+found
/root#

- 제대로 복제 되어 있음을 알수 있다.

/root# dumpe2fs /dev/sdc1 | grep -i uuid
dumpe2fs 1.41.12 (17-May-2010)
Filesystem UUID: 4b06195c-64e4-4a33-a410-387c09e1005d
/root# dumpe2fs /dev/sdd1 | grep -i uuid
dumpe2fs 1.41.12 (17-May-2010)
Filesystem UUID: 4b06195c-64e4-4a33-a410-387c09e1005d
/root#

- 심지어 uuid 값까지 똑 같다.
uuid 는 장치를 유일하게 식별하는 식별자이므로 uuid 를 변경하려면
아래처럼 변경할 수 있다.

/root# tune2fs -U random /dev/sdd1
tune2fs 1.41.12 (17-May-2010)
/root# dumpe2fs /dev/sdd1 | grep -i uuid
dumpe2fs 1.41.12 (17-May-2010)
Filesystem UUID: 683f9ecb-9f5c-40d6-8d5a-e402040eee9f
/root#

- uuid 값이 변경됨.

cpio 백업 - copy files to and from archives

참고사이트 ==> http://heirloom.sourceforge.net/man/cpio.1.html#1
[root@centos1 ~]# cpio --help
Usage: cpio [OPTION...] [destination-directory]

주요옵션
-o : 표준입력으로부터 경로명의 파일목록을 읽어스 그 파일명을 경로명 상태정보와 함께 표준출력으로 복사.
-i : cpio -o 의 실행결과를 표준입력으로 하여 패턴이 일치하는 파일만 선택한다.
-p : 표준입력으로부터 경로명의 목록을 읽어서 지정한 디렉토리에 파일을 생성하고 복사한다.
-d : 디렉토리가 필요할경우 자동으로 생성한다.
-f : 패턴과 일치하는것을 제외하고 모든 파일복사.
-v : 진행되는 상황을 표시해준다.
-c : 아스키 형태로 정보를 읽거나 저장.
-u : restore 할때 같은 이름의 파일이 있으면 덮어쓴다. 디폴트는 같은 파일이 있는경우 원본의 시간을 비교하여 오래된 파일인
경우에만 덮어쓴다.

댓글목록

admin님의 댓글

admin 작성일

rsync
-----
파일전송 유틸리티 원격 백업에 많이 사용된다.

*. 변경된 파일만 전송 가능
*. 보안
*. 편의성
centos 7 에서 rsyncd 서비스 start
svr2 :  systemctl start rsyncd
          systemctl enable rsyncd ; 부팅시 자동실행
firewall :  firewall-cmd --add-service=rsyncd --permanent ; 부팅시에 적용
              firewall-cmd --reload  ; 바로 적용


rsync [option] 원본경로 목적지 경로
rsync [option] 원본경로 목적지주소및경로
rsync [option] 원본주소및경로 목적지경로

자주 사용되는 옵션

-a: 아카이브 모드로 링크 및 속성을 그대로 가지고 전송
-v: 진행상황을 자세히 보여줌
-z: 데이터를 압축하여 전송(전송용량이 줄어듦)
-r: 지정한 디렉토리의 하위 디렉토리까지 모두 실행
--delete: 원본경로에 있는 내용과 목적지경로의 내용을 동기화(원본경로에는 없는 파일들은 목적지에서도 삭제)
--exclude: 해당 경로 또는 파일을 제외하고 나머지 전송


ex)

local 에서 사용
rsync -avz /var/log  /backup

remote 파일을 local로 전송
rsync -avz 192.168.10.3:/var/log  /backup

local 파일을 remote로 전송
rsync -avz /var/log 192.168.10.3:/backup


접속자집계

오늘
141
어제
66
최대
611
전체
453,422
개인정보취급방침 서비스이용약관 twoseven.kr All rights reserved.
상단으로