리눅스/공통

Tar를 이용한 백업과 복원 - 일반 데이터 백업

씨실과 날실 2019. 9. 20. 15:00


이 글은 본래 일반 데이터 백업과 리눅스 시스템 전체 백업에 대하여 설명하고 있었습니다. 그러나 글이 번잡하여 독자가 읽고 이해하기에 쉽지가 않았습니다.

그래서 두 내용을 분리하여 기존 글은 일반 데이터 백업에 대해서만 다루고 리눅스 시스템 전체 백업에 대한 내용은 글을 새로 파서 다루었습니다. 해당 내용은 아래 링크를 참고하시기 바랍니다.

또한 해당 내용들은 가능한 한 보다 많은 정보를  가독성 높게 제공하기 위해 수정 증보하였습니다.


Tar를 이용한 일반 데이터 백업과 복원

일반 데이터 백업

백업할 데이터 생성

일반 데이터 백업 강의를 위한 테스트 디렉터리 및 파일을 생성하도록 하겠습니다.
study@study-VirtualBox:~$ mkdir data
study@study-VirtualBox:~$ cd data
study@study-VirtualBox:~/data$ mkdir dir
study@study-VirtualBox:~/data$ cd dir
study@study-VirtualBox:~/data/dir$ touch dir_file01.txt
study@study-VirtualBox:~/data/dir$ cd ..
study@study-VirtualBox:~/data$ fallocate -l 100 file01.txt
study@study-VirtualBox:~/data$ fallocate -l 10k file02.txt
study@study-VirtualBox:~/data$ ls -l *
-rw-rw-r-- 1 study study   100  8월  6 12:47 file01.txt
-rw-rw-r-- 1 study study 10240  8월  6 12:47 file02.txt

dir:
합계 0
-rw-rw-r-- 1 study study 0  8월  6 12:45 dir_file01.txt
study@study-VirtualBox:~/data$ 


위 명령을 통해 생성된 디렉터리와 파일의 트리구조 확인

study@study-VirtualBox:~$ tree data
data
├── dir
│   └── dir_file01.txt
├── file01.txt
└── file02.txt

1 directory, 3 files
study@study-VirtualBox:~$ 

백업 데이터를 저장할 디렉터리 생성

$ sudo mkdir 백업 파일을 저장할 디렉터리명


study@study-VirtualBox:~$ mkdir backup


필요한 디렉터리와 파일 백업

백업 기본 명령어

$ sudo tar cvpzf  /백업 경로/백업 파일명.tar.gz 백업 대상의 상대 경로

위의 백업 기본 명령어는 말 그대로 가장 기초적인 백업 명령어 구문입니다


study@study-VirtualBox:~$ sudo tar cvpzf ~/backup/backup_file_01.tar.gz data
[sudo] study의 암호: 
data/
data/file02.txt
data/dir/
data/dir/dir_file01.txt
data/file01.txt
study@study-VirtualBox:~$ 


study@study-VirtualBox:~$ sudo tar cvpzf ~/backup/backup_file_02.tar.gz ./data
./data/
./data/file02.txt
./data/dir/
./data/dir/dir_file01.txt
./data/file01.txt
study@study-VirtualBox:~$ 


study@study-VirtualBox:~/data$ sudo tar cvpzf ~/backup/backup_file_03.tar.gz *
dir/
dir/dir_file01.txt
file01.txt
file02.txt
study@study-VirtualBox:~/data$ 

study@study-VirtualBox:~$ sudo tar cvpzf ~/backup/backup_file_04.tar.gz /home/study/data
tar: 구성 요소 이름 앞에 붙은 `/' 제거 중
/home/study/data/
/home/study/data/file02.txt
/home/study/data/dir/
/home/study/data/dir/dir_file01.txt
/home/study/data/file01.txt

study@study-VirtualBox:~$ sudo tar cvpzfP ~/backup/backup_file_05.tar.gz /home/study/data
/home/study/data/
/home/study/data/file02.txt
/home/study/data/dir/
/home/study/data/dir/dir_file01.txt
/home/study/data/file01.txt
study@study-VirtualBox:~$ 



sudo : 계정 변경 명령어

관리자 권한으로 이하의 명령을 실행하라

tar : 묶음/압축 명령어

cvpzf : tar 명령어의 옵션

-c, --create : 아카이브 파일 생성
-v, --verbose : 처리 중인 파일 출력
-p, --same-permissions, --preserve-permissions : 모든 퍼미션 정보 유지, 보호
-z, --gzip, --ungzip : 아카이브 파일을 gzip으로 압축하거나 풂
-f, --file [HOSTNAME:]F : 저장 파일 혹은 장치 파일 F에 저장

tar 명령어의 옵션은  두문자 옵션 맨 앞에 -을 붙이는 것이 기본 사용법이지만, 위 예시처럼 붙이지 않아도 옵션임을 인식하고 작동합니다.

tar를 이용한 시스템 백업에서 가장 중요한 옵션은 -p입니다. 시스템을 백업할 때 가장 중요한 것은 각 디렉토리와 파일들의 퍼미션(권한) 정보를 온전히 유지하는 것입니다. 퍼미션이 유지가 되지 않으면 소유자, 사용 그룹, 제3자의 권한이 뒤바뀌게 되어 혼란을 줄 뿐만 아니라 시스템에 치명적인 보안상의 취약점이 생기기 때문입니다.

다른 옵션은 순서가 바뀌더라도 문제를 일으키지 않지만 반드시 -f 옵션만큼은 경로와 파일명이 연속되어 있어야 하므로 옵션의 맨 나중에 위치해야 합니다.


Tar 압축 파일 내용 확인

study@study-VirtualBox:~$ ls
backup  data  공개  다운로드  문서  바탕화면  비디오  사진  음악  템플릿
study@study-VirtualBox:~$ cd backup
study@study-VirtualBox:~/backup$ ls
backup_file_01.tar.gz  backup_file_03.tar.gz  backup_file_05.tar.gz
backup_file_02.tar.gz  backup_file_04.tar.gz
study@study-VirtualBox:~/backup$ tar -tvf backup_file_01.tar.gz
drwxrwxr-x study/study       0 2020-08-06 12:47 data/
-rw-rw-r-- study/study   10240 2020-08-06 12:47 data/file02.txt
drwxrwxr-x study/study       0 2020-08-06 12:45 data/dir/
-rw-rw-r-- study/study       0 2020-08-06 12:45 data/dir/dir_file01.txt
-rw-rw-r-- study/study     100 2020-08-06 12:47 data/file01.txt
study@study-VirtualBox:~/backup$ tar -tvf backup_file_02.tar.gz
drwxrwxr-x study/study       0 2020-08-06 12:47 ./data/
-rw-rw-r-- study/study   10240 2020-08-06 12:47 ./data/file02.txt
drwxrwxr-x study/study       0 2020-08-06 12:45 ./data/dir/
-rw-rw-r-- study/study       0 2020-08-06 12:45 ./data/dir/dir_file01.txt
-rw-rw-r-- study/study     100 2020-08-06 12:47 ./data/file01.txt
study@study-VirtualBox:~/backup$ tar -tvf backup_file_03.tar.gz
drwxrwxr-x study/study       0 2020-08-06 12:45 dir/
-rw-rw-r-- study/study       0 2020-08-06 12:45 dir/dir_file01.txt
-rw-rw-r-- study/study     100 2020-08-06 12:47 file01.txt
-rw-rw-r-- study/study   10240 2020-08-06 12:47 file02.txt
study@study-VirtualBox:~/backup$ tar -tvf backup_file_04.tar.gz
drwxrwxr-x study/study       0 2020-08-06 12:47 home/study/data/
-rw-rw-r-- study/study   10240 2020-08-06 12:47 home/study/data/file02.txt
drwxrwxr-x study/study       0 2020-08-06 12:45 home/study/data/dir/
-rw-rw-r-- study/study       0 2020-08-06 12:45 home/study/data/dir/dir_file01.txt
-rw-rw-r-- study/study     100 2020-08-06 12:47 home/study/data/file01.txt
study@study-VirtualBox:~/backup$ tar -tvf backup_file_05.tar.gz
tar: 구성 요소 이름 앞에 붙은 `/' 제거 중
drwxrwxr-x study/study       0 2020-08-06 12:47 /home/study/data/
-rw-rw-r-- study/study   10240 2020-08-06 12:47 /home/study/data/file02.txt
drwxrwxr-x study/study       0 2020-08-06 12:45 /home/study/data/dir/
-rw-rw-r-- study/study       0 2020-08-06 12:45 /home/study/data/dir/dir_file01.txt
-rw-rw-r-- study/study     100 2020-08-06 12:47 /home/study/data/file01.txt
study@study-VirtualBox:~/backup$ 

일반 데이터 백업 파일 복원

Tar 압축 아카이브 파일 해제 - 현재 위치

$ sudo tar xvpzf /경로/백업 파일명.tar.gz


study@study-VirtualBox:~/backup$ sudo tar -zxvf backup_file_01.tar.gz
data/
data/file02.txt
data/dir/
data/dir/dir_file01.txt
data/file01.txt
study@study-VirtualBox:~/backup$ 

study@study-VirtualBox:~/backup$ sudo tar -zxvf backup_file_02.tar.gz
./data/
./data/file02.txt
./data/dir/
./data/dir/dir_file01.txt
./data/file01.txt
study@study-VirtualBox:~/backup$ 


study@study-VirtualBox:~$ tree backup
backup
├── backup_file_01.tar.gz
├── backup_file_02.tar.gz
├── backup_file_03.tar.gz
├── backup_file_04.tar.gz
├── backup_file_05.tar.gz
└── data
    ├── dir
    │   └── dir_file01.txt
    ├── file01.txt
    └── file02.txt

2 directories, 8 files
study@study-VirtualBox:~$

위 두 파일을 만들 때 사용된 압축 명령은 다소 차이가 있지만 압축 해제의 결과는 data 디렉터리와 그 안의 내용물이 현재 위치에 풀리는 것으로 동일합니다.


study@study-VirtualBox:~/backup$ sudo tar -zxvf backup_file_03.tar.gz
dir/
dir/dir_file01.txt
file01.txt
file02.txt


study@study-VirtualBox:~$ tree backup
backup
├── backup_file_01.tar.gz
├── backup_file_02.tar.gz
├── backup_file_03.tar.gz
├── backup_file_04.tar.gz
├── backup_file_05.tar.gz
├── dir
│   └── dir_file01.txt
├── file01.txt
└── file02.txt

1 directory, 8 files
study@study-VirtualBox:~$

세번째 파일은 data 디렉터리 안의 것만 압축 해제되고 상위 디렉터리인 data는 없습니다.


study@study-VirtualBox:~/backup$ sudo tar -zxvf backup_file_04.tar.gz
home/study/data/
home/study/data/file02.txt
home/study/data/dir/
home/study/data/dir/dir_file01.txt
home/study/data/file01.txt
study@study-VirtualBox:~/backup$ 


backup
├── backup_file_01.tar.gz
├── backup_file_02.tar.gz
├── backup_file_03.tar.gz
├── backup_file_04.tar.gz
├── backup_file_05.tar.gz
└── home
    └── study
        └── data
            ├── dir
            │   └── dir_file01.txt
            ├── file01.txt
            └── file02.txt

4 directories, 8 files
study@study-VirtualBox:~$

네 번째 파일은 해당 파일이 위치한 곳에 절대 경로로 적었던 형태와 동일한 트리 구조가 유지된 채 압축이 해제됩니다.


study@study-VirtualBox:~/backup$ sudo tar -zxvf backup_file_05.tar.gz
tar: 구성 요소 이름 앞에 붙은 `/' 제거 중
/home/study/data/
/home/study/data/file02.txt
/home/study/data/dir/
/home/study/data/dir/dir_file01.txt
/home/study/data/file01.txt
study@study-VirtualBox:~/backup$ 
네 번째 파일의 압축 해제 결과와 동일합니다.


study@study-VirtualBox:~/backup$ sudo tar -zxvPf backup_file_05.tar.gz
/home/study/data/
/home/study/data/file02.txt
/home/study/data/dir/
/home/study/data/dir/dir_file01.txt
/home/study/data/file01.txt
study@study-VirtualBox:~/backup$ 

위 명령처럼 P옵션을 추가하면 파일의 현재 위치가 아니라 압축 파일에 담긴 절대 경로와 동일한 트리 구조로 압축이 해제됩니다.


Tar 압축 아카이브 파일 해제 - 해제 위치 지정

$ sudo tar xvpzf /경로/백업 파일명.tar.gz -C 파일을 풀 디렉터리


study@study-VirtualBox:~$ mkdir restore
study@study-VirtualBox:~$


study@study-VirtualBox:~/backup$ sudo tar -zxvf backup_file_01.tar.gz -C ~/restore
data/
data/file02.txt
data/dir/
data/dir/dir_file01.txt
data/file01.txt
study@study-VirtualBox:~/backup$ tree ~/restore
/home/study/restore
└── data
    ├── dir
    │   └── dir_file01.txt
    ├── file01.txt
    └── file02.txt

2 directories, 3 files
study@study-VirtualBox:~/backup$ 

study@study-VirtualBox:~/backup$ sudo tar -zxvPf backup_file_05.tar.gz -C ~/restore
/home/study/data/
/home/study/data/file02.txt
/home/study/data/dir/
/home/study/data/dir/dir_file01.txt
/home/study/data/file01.txt
study@study-VirtualBox:~/backup$ 
P 옵션을 붙여 압축을 해제하는 경우 -C 옵션을 사용하여 해제 위치를 지정하더라도 기존 절대 경로 트리 구조 형태로 복원됩니다.