[Centos 7] Linux Backup 관리(Tar, xfsdump, xfsrestore, dd, TimeShift, Rsync)

2022. 11. 29. 15:26리눅스(Linux)

Linux Backup 개요
   - Backup이란 서비스 운영중 발생할 수 있는 사고에 대비하기 위해 시스템에 저장되어있는 원본 데이터를 복사하는 것을 말 한다.
   - 대표적인 Backup의 방법으로는 2가지로 구분 된다.

 

$ 전체 Backup

   - 매번 시스템 상에 존재하는 모든 데이터 전체를 Backup하는 방식

   - 전체 Backup의 경우 데이터의 신뢰도는 높으나, Backup 소요시간이 길다.

 

$ 증분 Backup

   - 한번의 전체 Backup 후 이후에는 추가되는 데이터만 Backup하는 방식

   - 증분 Backup의 경우 데이터의 신뢰도는 전체 Backup보다 낮지만, Backup 소요시간이 적다

 

$ Backup System을 사용하는 이유
   - 운영 중인 시스템에 문제가 발생하여 클라이언트에게 정상적인 서비스를 제공 할 수 없을 경우 신속한 복구를 통해 클라이언트에게 지속적인 서비스를 제공해야 한다, 이러한 문제를 해결하기 위한 가장 신속하고 효과적인 방법으로는 Backup System에 저장 되어 있는 Backup 데이터를 가져와 실제 서비스를 운영중인 시스템에 복구 작업을 진행하는 것이 가장 좋은 방법이 된다.
   - 위와 같은 이유로 Backup System은 지속적으로 운영 되어야하며, 전체 System의 안정성 및 효과적인 데이터 관리를 위한 필수 요소가 된다.
   - Backup 데이터는 주기적인 작업을 통한 항상 최신의 데이터를 유지하는 것이 중요하며, 실제 서비스를 운영하는 서버가 아닌 별도의 다른 저장 매체에 저장하는 것이 좋다.

 

$ Tar Backup ( File Backup )

# tar cvfzp [ BackupData 이름 ] [ Backup 옵션 ] [ Backup 대상 ]
c : tar 파일 생성
z : tar + gzip
f : tar로 생성되는 데이터 형식이 파일인 것을 나타낸다.
v : tar 작업 진행 결과를 화면에 표시한다.
p : tar로 묶이는 데이터에 대한 퍼미션을 보존한다는 의미가 된다.
--exclude : 작업 대상에서 제외하고자 할 때 사용

[ 실제 명령어 사용 예시 ]
# cd /
# tar cvfzp /backup/backup.tar.gz --exclude=/var/cache /var
# ls –ld /backupdata.tar.g

$ Tar Backup Data를 이용 한 복구 ( File Backup )

# tar xvfzp [ BackupData 이름 ] [ -C 옵션 ] [ 압축해제 위치 ]
x : tar 파일 해제
-C : Tar로 묶인 데이터를 해제할 경로를 지정하는데 사용되는 옵션

[ 실제 명령어 사용 예시 ]
# tar xvfzp /backup/backup.tar.gz -C /home/itbank
# ls -l /home/itbank
   - 압축해제를 원하는 디렉터리를 마지막에 명시한다.



$ xfsdump ( File System Backup ) : 자기 테이프를 이용한 Backup시 사용

# xfsdump [ Option ] [ Backup File ] [ Backup 대상 ] 
-l [ 0 ~ 9 ] : ( 0번은 전체 Backup을 의미하며, 나머지 번호를 이용하여 증가 및 차등 Backup을 진행 )
-f : Backup File 위치 지정 옵션
-M : 장치 Label 설정 ( 설명 ) 
-L : Session Label 설정 ( 설명 )
   
[ 실제 명령어 사용 예시 ]
# xfsdump -L "Backup of /home" -M "Backup Media:/dev/st0" -l 0 -f /dev/st0 /home ( 1회차 )
# xfsdump -L "Backup of /home" -M "Backup Media:/dev/st0" -l 1 -f /dev/st0 /home ( 2회차 )
# xfsdump -I ( xfsdump 정보 확인 “/var/lib/xfsdump/inventory/” )
# ls -l /backup
   - “/dev/st0” 장치는 자기테이프의 기본 장치이름

   - Level 번호를 조정하여, 원하는 데이터만 Backup이 가능하다 (동일 한 Level의 경우 동일한 Level을 포함하여 Backup)

   - 월, 화, 수, 목의 경우 새로 생성되거나 수정 된 데이터만 Backup

   - 금요일의 경우 월 ~ 금 사이에 새로 생성되거나 수정 된 데이터 전체를 Backup

 

$ xfsrestore ( File System 복원 )

# xfsrestore [ Option ] [ Backup File ] [ Backup Data 저장 할 대상 ] 
-f : Backup File 위치 지정 옵션
-v : Silent, Verbose, Trace 등의 모드 선택
-r : 전체 복구 시 사용

[ 실제 명령어 사용 예시 ]
# mt -f rewind 
   - 자기 테이프의 상태를 최초 시작점으로 되감기

# mkdir /test
# xfsrestore -f /dev/st0 -r /test
   - (-r) 옵션을 생략 할 경우 최초 전체 Backup관한 데이터만 Restore를 짂행
   - (-r) 옵션을 함께 사용 할 경우 복원 작업을 누적하여 진행하도록 설정 할 수 있다

$ dd ( Disk Dump )를 이용한 Disk 복제

# dd if=[ 복제할 대상 디스크 이름 ] of=[ 복제 데이터를 저장 할 디스크 이름 ] bs=[ 작업 단위 ] 
if : 입력 파일
of : 출력 파일
bs : 읽기, 쓰기 작업 단위

[ 실제 명령어 사용 예시 ]
# dd if=/dev/sda of=/dev/sdb bs=512
# fdisk -l /dev/sdb
 Device Boot Start End Blocks Id System
/dev/sdb1 * 2048 2099199 1048576 83 Linux
/dev/sdb2 2099200 83886079 40893440 8e Linux LVM
   - /dev/sda HDD를 /dev/sdb HDD에 복제

 

$ TimeShift를 이용한 Snapshot 설정

   - 현재 System의 상태를 저장 할 수 있는 도구 Tool 
   - 직관적인 GUI 환경이 제공되어 초보자도 쉽게 스케줄링과 Snapshot 관리를 할 수 있다. 
   - TimeShift를 사용하기 위해서는 Package를 설치해야 하며, 기본 저장소에서는 제공 되지 않는다.
   - Epel 저장소를 이용하여 설치해야 하므로, EPEL 저장소를 추가 후 TimeShift Package 설치를 진행 한다.

# yum -y install epel-release
# yum -y install timeshift
# rpm -qa | grep timeshift
timeshift-18.4-1.el7.x86_64

$ Rsync

   - Remote Sync의 줄임말로써 원격지의 파일을 복사할 때 사용하는 명령어이다.
   - 원격지로 데이터를 전달 할 수 있으며, 원격지의 데이터를 가져올 수도 있다.
   - 다양한 옵션을 제공 ( 압축, Link 유지, 권한 유지, 날짜 정보 유지 등 )
   - 원격지에 데이터를 주기적으로 전송 후 저장하는 작업에서 많이 사용 된다.
   - Rsync는 전송 할 파일이 이미 목적지에 존재하거나 시간 및 크기가 동일할 경우 복사를 건너뜀
   - Rsync의 경우 반드시 데이터를 저장 할 경로에 대한 쓰기권한이 필요하다.
   - SCP 명령어의 사용법과 동일하다.

 

rsync Option

   -v    작업 과정을 자세히 표시 ( Verbosity )
   -z    파일 복사 시 압축을 진행 ( Compress )
   -a    Archive 모드로 복사를 진행 ( 복사되는 데이터의 기존 정보를 전부 유지하며 복사를 진행 )
   -I    크기와 시간정보가 일치하는 파일또한 복사대상으로 설정 ( 기존 파일에 덮어쓰기 진행 )
   -h    파일 복사 결과 출력

 

$ Rsync Test

[ “192.168.1.100 Server” ]
# mkdir /test
# touch /test/A /test/B /test/C
# rsync -avzh /test root@192.168.1.150:/backup    
root@192.168.1.150's password: “Password Input”
sending incremental file list
test/
test/A
test/B
test/C
sent 174 bytes received 73 bytes 44.91 bytes/sec
total size is 0 speedup is 0.00
   - 192.168.1.150 Server에서 /backup 디렉터리 생성 후 작업
   - 기본 SSH 통신을 진행하므로 처음 나오는 화면은 yes를 입력 
   ( 지정 한 디렉터리를 포함하여 데이터 전송을 진행 )
   
[ “192.168.1.150 Server” ]
# ls -lR /backup
/backup:
합계 0
drwxr-xr-x. 2 root root 33 3월 9 21:53 test
/backup/test:
합계 0
-rw-r--r-- 1 root root 0 3월 9 20:30 A
-rw-r--r-- 1 root root 0 3월 9 20:30 B
-rw-r--r-- 1 root root 0 3월 9 20:30 C
   - 데이터 전송 확인 ( “test Directory” 전체가 전송 된 것을 확인 )
   
[ “192.168.1.100 Server” ]
# touch /test/D /test/E 
# rsync -avzh /test root@192.168.1.150:/backup 
root@192.168.1.150's password: “Password Input”
sending incremental file list
test/
test/D
test/E
sent 205 bytes received 58 bytes 105.20 bytes/sec
total size is 0 speedup is 0.00
   - 새로운 파일 2개를 생성 후 다시한번 rsync를 이용하여 데이터를 전송 
   ( 기존 내용은 전송하지 않고 새로운 내용만 전송 )

[ “192.168.1.150 Server” ]
# ls -lR /backup
/backup:
합계 0
drwxr-xr-x. 2 root root 33 3월 9 21:53 test
/backup/test:
합계 0
-rw-r--r-- 1 root root 0 3월 9 20:30 A
-rw-r--r-- 1 root root 0 3월 9 20:30 B
-rw-r--r-- 1 root root 0 3월 9 20:30 C
-rw-r--r-- 1 root root 0 3월 9 20:31 D
-rw-r--r-- 1 root root 0 3월 9 20:31 E

[ “192.168.1.100 Server” ]
# touch /test/D /test/E 
# rsync -avzh /test root@192.168.1.150:/backup 
root@192.168.1.150's password: “Password Input”
sending incremental file list
test/
test/D
test/E
sent 205 bytes received 58 bytes 105.20 bytes/sec
total size is 0 speedup is 0.00
   - 새로운 파일 2개를 생성 후 다시한번 rsync를 이용하여 데이터를 전송 
   ( 기존 내용은 전송하지 않고 새로운 내용만 전송 )
   
[ “192.168.1.100 Server” ]
# rsync -avzhI /test root@192.168.1.150:/backup 
root@192.168.1.150's password: “Password Input”
sending incremental file list
test/A
test/B
test/C
test/D
test/E
sent 310 bytes received 112 bytes 281.33 bytes/sec
total size is 0 speedup is 0.00
   - 대문자 “I” 옵션을 사용 할 경우 기존 데이터를 포함한 전체 데이터가 전송 ( 덮어쓰기 진행 )

$ Rsync Test ( Data 가져오기 )

[ “192.168.1.100 Server” ]
# rsync -avzh root@192.168.1.150:/backup/test /backup
root@192.168.1.150's password: “Password Input”
receiving incremental file list
test/
test/A
test/B
test/C
sent 72 bytes received 179 bytes 100.40 bytes/sec
total size is 0 speedup is 0.00
   - 원격지의 데이터 또한 전송받을 수 있다. 
   ( 지정 한 디렉터리를 포함하여 데이터 전송을 진행 )
   
# ls -lR /backup
/backup:
합계 0
drwxr-xr-x. 2 root root 33 3월 2 21:53 test
/backup/test:
합계 0
-rw-r--r--. 1 root root 0 3월 2 21:53 A
-rw-r--r--. 1 root root 0 3월 2 21:53 B
-rw-r--r--. 1 root root 0 3월 2 21:53 C
   - 원격지로부터 데이터를 전송받은 것을 확인