개인/리눅스

[리눅스] 백업명령의 사용 (tar,cpio,rsync)

OmeGa2 2020. 2. 18. 19:42

백업이란

컴퓨터를 사용하는 대부분의 작업은 여러 기록과 데이터로 저장되어 관리한다.

 

이런 데이터들이 작업하는 도중 갑작스럽게 진행하던 프로젝트에 관련된 데이터들이 하드웨어의 문제나 바이러스 등으로 인해 사용하지 못하게 되면 작업이 지연되거나 서비스가 중지되는 등 여러 문제가 생길수 있는다.

 

시스템을 관리하는 사람이 최우선적으로 해야하는 일중에 하나는 중요 데이터를 보호하는 것이다.

이런 자료를 보호하는 대표적인 방법으로는 백업(backup)이 있다.

 

백업은 자료를 보호하는 방법으로 데이터를 잃어버리거나, 사용하지 못하게 되는 경우를 대비해서

사전에 중요데이터를 주기적으로 다른 위치에 복사본을 만들어 두는 것이다.

 

아무리 시스템을 깔끔하게 관리한다고 하더라도 미숙한 작업자의 실수나, 소프트웨어 문제,

도난이나 자연재해, 사이버공격 등 여러가지 이유로 갑작스럽게 자료가 유실되는 경우가 종종 있다.

때문에 백업의 중요성은 항상 강조되고 있으며, 기본적으로 가져야 하는 안전장치인 셈이다.

 

 

백업을 하기 전에

백업에도 여러 종류가 있고 백업에 사용되는 프로그램이나 유틸리티만해도 다양하다.

작업자는 환경에 맞게, 백업할 용량에 맞게 프로그램을 선택해서 원하는 위치에 주기적으로

백업파일을 관리하는데에 앞서 여러가지 고려할만한 사항이 있다.

 

 

1. 백업 대상 선택

 

가능한 한도 내에서 많은 데이터의 백업을 해두는 것이 좋지만, 중요 파일이 아닌데도 불구하고

많은 용량을 차지하거나, 필요없는 log 데이터와 쉽게 설치할 수 있는 프로그램 등

백업할 필요가 없는 데이터들도 많이 있다.

 

또한 중요파일이 중구난방으로 흩어져 있으면 주기적으로 해야하는 백업을 할 때 마다 번거롭고

까다로워질 수 있다. 

 

작업자는 중요파일을 특정 디렉터리에 모으면서 비교적 용량을 적게 차지하는 효율적인

백업 방식을 선택하는것이 효과적이다.

 

 

2. 백업의 종류

 

백업에는 전체백업과 부분백업으로 나뉜다.

전체백업은 장치가 마운트 된 특정 파일시스템이나 파티션 그 자체를 백업하는 것이다.

반면에 부분백업은 특정 파일이나 디렉터리를 선택해서 백업하는 것이다.

 

기본적인 프로그램이나 데이터 등 불필요하게 시스템 전체를 백업할 필요는 많지않다.

보통은 특정 디렉터리에 중요데이터를 모아두고 부분백업하는 경우가 많다.

부분백업에도 종류가 나뉘는데, 증가된 내용만 백업하는 증분백업

바뀐부분만 백업하는 차등백업으로 구분할 수 있다.

 

각자 환경과 스타일에 맞는 백업방식과 유틸리티를 찾아야 한다.

 

 

3. 백업 주기

 

얼마나 자주 백업할 것인지를 정한다.

시스템이 바뀔 때 마다 백업은 거의 필수적으로 해야하는데, 데이터가 자주 변화한다면 일주일,

거의 변화가 없다고하면 한달에 한번 백업하는 경우도 있다.

 

특정 파일이 매일 업데이트한다고 해서 전체백업을 매일 행하는 것은 상당히 비효율적이다.

따라서 특정 디렉터리나 파티션만 매일 백업하며, 전체백업은 한달에 한번 할 수도 있다.

 

이처럼 백업주기는 파일이나 시스템에 맞게 적절히 섞어서 이루는것이 좋다.

보통은 작업자에 따라 두 가지 이상을 섞어 백업하는 경우가 많다.

 

 

4. 매체 선택 여부

 

데이터를 백업해 둘 장치를 고르는것도 중요하다.

 

한달 치 데이터를 백업해두고 일정기간이 지난 백업파일은 삭제하면서 관리하는 경우가 많다.

이 때, 장치가 데이터를 백업할 용량이 부족하다면 부득이하게 여러 장치를 사용하게 될 수도 있다.

 

처음 백업할 때 어느정도의 데이터를 보관할지 정하고, 백업파일의 크기는 일정하지 않기 때문에

그에 대비해 조금 더 넉넉한 장치를 고르는 것이 효과적이다.

 

백업매체는 편리성, 처리속도, 가용성 등을 고려해서 선택하며

SSD나 하드디스크, USB메모리 등 장치를 결정한 뒤 백업을 진행한다.

 

 

5. 백업 방법

 

백업을 진행할 때  tar, dd, dump 등 많은 프로그램이나 유틸리티를 사용할 수 있다.

 

각각 유틸리티는 속도와 성능도 다양할 뿐더러 부분백업에는 유용하지만 전체백업을 하기엔

무리가 있는 유틸리티도 있다.

 

작업자가 진행할 백업파일의 용량과 위치 등을 고려해서 알맞는 유틸리티를 찾아야한다.

리눅스에서는 cpio, rsync 등이 있고 이외에 ArcServe, amanda 처럼 상용 유틸리티를 사용해도 된다.

 

 

 

 

백업 및 복원 관련 유틸리티

 

1. tar (tape archive)

리눅스에서 tar는 여러 파일을 하나로 묶어주는 작업을 한다.

tar는 사용과 동시에 gzip이나 bzip2 등의 압축파일을 같이 사용할 수 있으며

사용이 간편하면서 권한을 유지하는 등 여러 옵션을 가지고 있다.

 

부분백업, 전체백업 모두 사용할 수 있지만 주로 소량의 파일을 백업하는데에 사용되는

tar은 사용 이후에도 원본파일을 그대로 남겨둔다.

 

▷ 사용방법

]# tar cvf [파일명] [묶을 파일]  = 여러 파일을 하나로 묶는다.

]# tar xvf [파일명] = 현재 위치에 tar파일을 푼다.

]# tar rvf [파일명] [묶을파일] = 기존에 존재하던 tar파일에 다른 파일을 추가로 묶는다.

 

▷ tar를 이용한 전체백업

 

]# tar cvfp home.tar /home

 = /home 디렉터리의 권한은 그대로 유지한 채 home.tar 파일로 묶는다. (원본유지)

 

]# tar xvf home.tar

 = home.tar 파일을 현재 위치에 풀어서 복원한다.

 

 

▷ tar를 이용한 증분백업

 

]# tar -g list -cvfp 1111.tar /home

 = list라는 파일의 내용으로 증분백업을 시도하는데, 처음 사용하는 경우에는 전체백업을 한다.

    (g는 증분백업에 사용하는 옵션이다.)

 

]# tar -g list -cvfp 2222.tar /home

 = list파일의 내용과 비교해 바뀐 부분만 2222.tar 로 백업한다.

 

]# tar xvf 1111.tar -C /

]# tar xvf 2222.tar -C /

 = 처음에 백업된 파일을 순서대로 복원한다.

 

]# tar -c -v -N '1 May 2019' -f home.tar /home

 = /home에서 2019년 5월 1일 이후 변경된 파일만 home.tar로 백업한다.

 

 

▷ 분할 및 압축 백업

 

]# tar zcvf - /home | split -b 50m - test.tar.gz

 = /home 디렉터리를 압축해서 50MB 단위로 백업한다.

 split 명령은 파일명 뒤에 aa, ab 등의 형태로 파일이 생성된다.

 따라서 test.tar.gzaa 형색으로 생성된다.

 

]# cat test.tar.gzaa | tar zxvf -

 = split 명령은 텍스트 파일 관련 명령어이므로 복원할 때 cat를 사용한다.

 

  

 

2. spio (copy input to output)

spio는 파일이나 그룹 또는 전체 파일시스템을 복사하는데 주로 사용하는데

tar과 비슷한 유틸리티 이면서 기능상의 차이는 거의 없지만 spio가 tar에 비해서는 훨씬 빠르다.

 

또한 spio는 장치파일이나 특수파일도 백업이 가능하며 백업파일의 크기도 작을 뿐더러

만일 백업파일이 손상되었을 때, 손상된 부분일 제외하고 복구가 가능하다.

(단, 증분백업은 지원하지 않는다.)

 

기존의 명령어를 사용해서 백업을 진행하므로 다양한 조건을 활용해서 백업이 가능하다.

 

▷ 사용방법

]# spio [옵션] < 파일명

]# [명령어] | cpio [옵션] > 파일명

-o : 표준 출력으로 보내 사용한다. (create)

-c : 아카이브 포맷 형식을 'newc'로 지정한다.

-d : 필요할 경우 디렉터리를 생성한다.

-t : 내용만 확인할 때 사용한다.

-F : 표준 입출력전환 기호 대신 파일명을 지정할 때 사용한다.

-H [포맷] : 아카이브 포맷 형식을 지정한다.

-i : 표준 입력으로 받을 때 사용한다. (백업한 자료를 불러올때)

-v : 과정을 출력한다.

]# ls *.log | spio -ocv > [파일이름].cpio

 = 백업파일 생성 (.cpio)

 

]# cpio -icdv < [파일명].cpio

 = 백업파일 복원

 

 

▷ 사용 예시

]# find /home | cpio -ocv > home.cpio

 = /home 를 home.cpio 파일로 백업한다.

 

]# cpio -icdv < home.cpio

 = home.spio의 현재 내용을 디렉터리에 복원한다.

 

]# ls *.txt | cpio -ocv > txt.cpio

 = txt 파일을 백업한다.

 

]# cpio -ic < txt.cpio

 = txt 파일에 백업된 데이터를 복원한다.

 

]# cpio -icvt "11.txt" < txt.cpio

 = 백업된 txt파일에서 11.txt의 내용만 보여준다.

 

 

 

dump 와 restore (복원)

dump는 파일시스템을 이용해 백업할 때 사용하는 유틸리티이다.

일반적으로 파티션단위로 백업할 떄 사용하며 전체/증분백업 모두 지원한다.

 

dump에는 0~9 단계의 레벨을 가지고 있는데, 0단계는 전체백업을 의미하며

1 ~ 9단계는 부분백업시에 사용하며, 작업정보를 따로 파일에 기록할 수 있다.

 

파일시스템의 설정정보가 들어있는 /etc/fstab을 이용해서 dump 백업이 이루어지며

데이터를 복원할 때는 restore 명령을 사용한다.

 

 

▷ dump 사용법

]# dump [파일명] [백업대상]

-0 ~ -9 : 레벨을 지정한다.

-f : 백업할 매체나 파일명을 지정한다.

-u : 작업 후 /etc/dumpdates 파일에 관련 정보를 기록한다.

 

]# dump -0u -f test.dump /dev/sdb1

 = /dev/sdb1 를 test.dump 에 전체백업 후 작업정보를 dumpdates파일에 기록한다.

 

]# dump -5u -f 1111.dump /home

 = /home 디렉터리를 1111.dump 이름으로 5레벨로 백업 후 작업정보를 dumpdates 파일에 기록한다.

 

 

 

▷ restore 사용법

]# restore [백업 파일명]

-i : 대화식으로 복구할 파일을 선택 후 복원

-f : 백업할 매체나 파일명 지정

-r : 전체 복원시에 사용

 

]# restore -rf test.dump

 = test.dump 파일에 저장된 데이터를 전체 복원한다.

 

restore로 복원할 때 명령어 사용 시 'restore>' 라는 프롬프트가 나온다.

여기서 help를 통해 사용가능한 명령을 확인 후 부분 복원도 가능하다.

 

 

 

rsync (remote synchronous)

rsync는 두 개의 프로그램을 원격으로 연결해 파일을 동기화시키는 유틸리티이다.

 

원격지에 있는 프로그램을 백업할 수 있는 기능을 제공하는 rsync에서는 파일의 상태를

보존하기 위한 여러가지 옵션을 제공한다.

 

원격으로 백업시에 파일의 소유권과 허가권을 유지하며, 특정부분만 백업할 수도 있다.

또한 중복파일이 있을때 제외할 수 있고 관리자권한 없이 백업이 가능하다.

 

 

▷ 사용방법

]# rsync [백업파일] [백업되는 위치]

-r : 하위 디렉터리까지 실행

-l : 심볼릭 링크를 보존한다.

-L : 심볼릭 링크가 가리키는 파일을 복사한다.

-p : 권한을 보존한다.

-t : 타임스탬프를 보존한다.

-g : 그룹소유권을 보존한다.

-o : 소유권을 보존한다.

-H : 하드링크 보존

-v : 진행상황을 출력

-u : 업데이트된 내용만 전송

-z : 전송할 때 압축

-b : 백업시 동일한 파일이 존재하는 경우 ~를 붙여서 생성한다.

-a : -rlptgoD를 한번에 실행할 때 사용 (--archive)

--progress : 파일이 전송되는 동안 전송 상황정보를 출력한다.

 

]# rsync -av /home /home5

 = /home를 그대로 유지하면서 /home5로 백업한다.

 

]# rsync -avz 192.168.2.20:/test /backup

 = 192.168.2.20로 원격접속후 /test 파일을 압축해서 /backup로 복사한다.

 

]#  rsync -avz -e ssh other@192.168.2.20:/test ~/backup

 = -e옵션은 원격지에 접속시 프로토콜을 지정한다.

 (최근에는 생략하면 자동으로 ssh를 사용한다.)

 192.168.2.20 원격지로 other 계정으로 접속 후 test 파일을 압축해서 복사한다.