본문 바로가기

About/Linux

[Linux] Ubuntu에서 ssh 통신을 이용한 tar 아카이브 원격 저장

다음 도서를 참고하여 작성하였습니다.

http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9791160509366 

 

모던 리눅스 관리 - 교보문고

12가지 실무 프로젝트로 배우는 리눅스 관리의 기술 | 실무에 바로 적용할 수 있는 최신 리눅스 관리 기술리눅스 관리의 최신 기술을 12가지 실무 프로젝트로 익힌다!최신 기술을 활용하여 리눅

www.kyobobook.co.kr


리눅스 환경에서 백업을 해야하는 경우

다음 이미지와 같이 리눅스 환경에서 아카이브 이미지를 생성하여 원격 저장소에 스트리밍하는 방법을 다뤄보겠습니다.

아카이브 생성 및 원격 저장소 저장

파일 준비

원격 저장소에 저장할 파일을 간단하게 생성합니다.

mkdir tmp
cd tmp

touch file1
touch file2
touch file3
...

 

트리형식으로 나타내면 다음과 같습니다.

tmp/
├── file1
├── file2
├── file3
└── file4

 

아카이브 생성 및 원격 스트리밍 전송

명령어 부터 살펴보면 다음과 같습니다. 여기서 ssh로 전송할 목적지의 계정은 ubuntu, ip는 10.0.3.179 입니다.

tar czvf - tmp | ssh ubuntu@10.0.3.179 \
"cat > /home/ubuntu/myfiles.tar.gz"

 

실행결과

파일명들이 출력되며, 원격 저장소의 비밀번호를 입력하면 원격 저장소에 myfiles.tar.gz 파일이 생성됩니다.

원격 저장소를 확인해보겠습니다.

 

원격 저장소의 파일 확인

위 파일의 압출을 풀면 위에서 생성한 파일들이 그대로 저장된 것을 확인할 수 있습니다.

# tar -xzvf myfiles.tar.gz
# ls tmp
file1  file2  file3  file4

 

어떻게 동작이 이루어졌는지 실행한 명령어를 하나하나 살펴보겠습니다.

tar czvf - tmp | ssh ubuntu@10.0.3.179 \
"cat > /home/ubuntu/myfiles.tar.gz"

tar 명령 인자 뒤에 아카이브 이름 대신 대시(-)를 사용하여 내용을 표준 출력 장치(화면)에 출력하였습니다.

아카이브에 추가할 파일명(디렉토리명, 여기서는 tmp)를 tar 명령어 끝에 지정합니다

 

그 다음 이름이 지정되지 않은 압축된 아카이브를 원격 서버에 로그인하는 ssh 명령과 파이프로 연결합니다.

이 후 큰따옴표 안의 명령어가 실행되는데, cat 명령어파이프로 전달받은 데이터 스트림을 원격 서버의 홈 디렉토리에 myfiles.tar.gz 라는 파일로 저장합니다.

 

 

이러한 방법으로 아카이브를 생성하면 중간 단계에서 임시 파일을 로컬 컴퓨터에 생성할 필요가 없다는 장점이 있습니다. 

만약 120GB가 남아있는 디스크에 110GB에 달하는 설치파일을 백업해야하는 경우 아카이브 파일을 저장하기 힘들것입니다.

아카이브를 생성하면서 스트리밍

 

 

전송하고자 하는 파일을 살펴보면 다음과 같습니다.

tmp/
├── file1
├── file2
├── file3
└── file4

 

만약 tmp 폴더에서 file1과 file2만 전송하고 싶은 경우는 어떻게 할까요?

tar 명령어의 --exclude 명령어를 이용하여 원하지 않는 파일이나 디렉토리를 제외합니다.

 

tar czvf - tmp  \ 
--exclude=tmp/file3 --exclude=tmp/file4 | ssh ubuntu@10.0.3.179 \ 
"cat > /home/ubuntu/myfiles.tar.gz"

원격 저장소에서 압축을 해제하면 file1과 file2만 있는 것을 확인할 수 있습니다.


Ubuntu 환경에서 tar 명령어를 이용하여 아카이브를 생성하고 원격 저장소로 스트리밍하는 방법에 대하여 알아봤습니다.