[Linux] Archive

2023. 7. 30. 14:23·DevOps/Linux
목차
  1. 1. Archiving의 목적
  2. 2. Archiving의 대상
  3. 3. Archiving의 위치
  4. 4. tar : 파일과 파일 시스템 archiving
  5. 5. dd : 파티션 archiving
  6. 6. rsync : archive 동기화
  7. 7. 백업 계획 시 고려 사항
📕 목차

1. Archiving의 목적
2. Archiving의 대상
3. Archiving의 위치
4. tar : 파일과 파일 시스템 archiving
5. dd : 파티션 archiving
6. rsync : archive 동기화
7. 백업 계획 시 고려 사항
더보기

🌱 명령 복습

 

# 현재 활성화된 파티션을 사람이 읽기 쉬운 형식으로 보여준다.
df -h

# 특정 디렉토리에 있는 비디오 파일들의 압축된 아카이브를 생성한다.
tar czvf (아카이브명).tar.gz (디렉토리 경로)/*.mp4

# 큰 파일을 지정한 크기의 작은 파일 여러 개로 분할한다.
split -b 1G (아카이브명).tar.gz (아카이브명).tar.gz.part

# 지정한 기준에 맞는 파일들을 찾아 tar 명령에 전달해 아카이브에 추가한다.
find (패턴) -iname (문자) -exec tar -rvf videos.tar {} \;

# 나머지 사용자의 읽기 권한을 제거한다.
chmod o-r /bin/zcat

# sda2 파티션의 Image를 생성해 홈 디렉토리에 저장한다.
dd if=/dev/sda2 of=/home/username/partition2.img

# 파티션을 무작위 글자로 덮어써 이전 데이터를 알아볼 수 없게 한다.
dd if=/dev/urandom of=/dev/sda1

1. Archiving의 목적

 

📌 What is archiving?

https://heeya-stupidbutstudying.tistory.com/entry/Linux-%EC%95%84%EC%B9%B4%EC%9D%B4%EB%B8%8C%EC%99%80-%EC%95%95%EC%B6%95-Archive-Compression

  • 아카이브(archive) : 여러 파일과 디렉토리를 담고 있는 하나의 파일
  • 파일과 디렉토리에 따로 존재할 때보다 이동, 공유, 저장하는 게 훨씬 쉬워진다.
  • archive의 종류
    • tar : 쉽게 공유하거나 백업하기 위해 파일들의 사본을 만드는 경우
    • dd : 파티션이나 심지어 HDD를 통째로 복사해야 하는 경우
    • rsync : 주기적으로 시스템을 백업해야 하는 경우

 

📌 압축(Compression)
  • 압축과 아카이빙이 함께 쓰이는 경우가 많지만, 둘을 혼동해서는 안 된다.
  • 압축은 file이나 archive가 disk에서 차지하는 공간을 줄여주는 알고리즘을 적용하는 소프트웨어 도구다.
  • Network를 통해 큰 archive 파일을 전달할 계획이라면 압축하는 것이 전송 시간을 상당히 줄일 수 있다.

 

📌 고려 사항

1️⃣ 이미지(image)

  • 새로운 곳에 원본 파일 시스템을 다시 생성하는 데 필요한 디렉토리와 파일을 담은 아카이브다.
  • VM에 Linux를 설치하기 위해 사용한 ISO 파일이 하나의 예시다.
    • OS를 담은 이미지로서, 대상 컴퓨터에 복사하기 쉽게 특별히 구성한 파일
  • 실행 중인 OS 전체 혹은 일부분으로부터 생성해 다른 PC에 내용을 쉽게 복사할 수도 있다.
    • 대상 PC의 현재 상태를 원본 PC의 완전한 복제본으로 만들 수 있다.
  • Image를 생성하고 시스템을 복구하는 데 사용하는 도구는 백업 도구와 거의 비슷하다.
  • Window registry architecture는 어떤 방법으로도 설치된 OS를 원래 HW에서 분리할 수 없게 되어 있어서 사용할 수 없다.

 

2️⃣ 데이터 백업

  • 백업은 시스템 관리자 업무의 상당 부분을 차지하며, 굉장히 중요한 과정이다.
  • 검증되지 않은 데이터 백업은 제대로 작동하지 않을 수 있다.
  • 제대로 백업이 되었는지 확신할 방법은 원래 HW와 똑같은 HW에 복구 테스트를 해보는 방법 뿐이다.

 


2. Archiving의 대상

 

💡 특정 Disk를 백업할 때는 어느 파티션을 백업하고, 하지 않을지 정보를 충분히 입수하고 나서 결정하라.

 

📌 archive가 필요 없는 경우
$ scp .ssh/id_rsa.pub (계정명)@(ip):/home/(계정명)/.ssh/authorized_keys
  • 파일의 양이 적고 크기가 크지 않다면 그대로 목적지로 전송해도 크게 문제되지 않는다.
  • 여러 디렉토리에 분산된 많은 파일이나 파티션 곳곳에 분산된 많은 파일을 백업하긴 힘들다.

 

📌 파티션(Partition)

지능적인 백업 정책을 수립하려면 파티션을 생각해봐야 한다.

회사의 아주 큰 회계 데이터베이스가 들어 있는 파티션을 백업할 때, 파티션이 공간을 얼마나 차지하는지, 어디에 위치하는지를 모르면 제대로 백업하기 힘들다.

df 명령어, 현재 Linux 시스템에 마운트된 파티션에 공간 할당 정도와 사용량을 보여준다.

  1. 주 OS 파티션
    • /dev/sda3
      • 저장 장치 A(sda)의 세 번째 파티션
      • 의사 파일 시스템 티렉토리 dev를 통해 시스템 리소스로 표시됨
    • 시스템에 연결된 모든 장치는 dev 디렉토리에 있는 파일로 표시된다.
    • 회계 데이터베이스가 있는 파티션도 /dev/sda1 등의 이름으로 여기에 속할 것이다.
  2. 의사 파일 시스템
    • 의사 파일 시스템에 있는 파일들은 disk에 저장되지 않고 memory에만 존재한다.
    • 시스템이 부팅될 때마다 OS에 의해 자동으로 바뀌고, 종료되면 사라진다.
    • 임시로 HW profile을 나타내는 파일들을 백업할 필요는 없다.
    • 유형이 tmpfs거나 Use 열이 크기가 0이면 일반 파티션이 아닌 임시 파일 시스템이다.
  3. UEFI 펌웨어 제어 파티션
    • Linux를 설치할 때 시스템 부팅 과정을 UEFI 펌웨어로 제어하기 위해 만든 파티션
      • 최근에는 UEFI가 BIOS를 대체하고 있다.
  4. 별도 파티션
    • var, usr 등의 디렉토리
      • 민감한 데이터의 무결성과 보안을 유지하기 쉽다.
      • "/var/log/" 등의 디렉토리에 생성된 파일들이 시스템을 다 차지하는 것을 막을 수 있다.
    • boot 디렉토리
      • 별로 좋은 생각은 아니다.
      • kernel Image가 boot 디렉토리에 저장되므로, Linux kernel 버전으로 업데이트할 때마다 여기에 저장할 파일들이 많아진다.
      • 일반적으로 boot 파티션에 500MB밖에 할당하지 않는데, 6개월 정도 운용하고 업데이트하다보면 공간이 꽉 차서 업데이트에 실패한다.
      • boot 디렉토리는 가장 큰 파티션 안에 두는 것이 좋다.

 


3. Archiving의 위치

 

📌 어디에 백업해야 할까

백업은 순서에 상관없이 다음 속성을 만족해야 한다.

(OS 관점으로 보면 archive를 어디 저장하든지 상관없지만, 모범 사례를 따르는 것이 좋다.)

 

  • 신뢰성(reliable)
    • 백업 중에 무결성을 충분히 보장할 수 있는 storage 매체를 사용하라
  • 검증(tested)
    • 실운영 환경과 똑같은 환경에서 될 수 있으면 많은 archive로 복구 테스트를 수행하라
  • 순환(rotated)
    • 현재 백업보다 최소 몇 단계 이전까지의 archive를 모두 보관해 최신 백업으로 복구할 수 없을 때를 대비하라
  • 분산(distributed)
    • 적어도 일부 archive는 물리적으로 떨어진 곳에 저장하라
  • 보안(secure)
    • 백업 및 복구 과정 동안 안전하지 않은 Network나 storage에 데이터를 잠시라도 노출하면 안 된다.
  • 준수(compliant)
    • 늘 관련 범규와 업계 표준을 준수하라
  • 최신(up to date)
    • 몇 주 또는 몇 달이 지난 archive를 보관할 필요는 없다
  • 스크립트(scripted)
    • 수행할 작업을 사람이 모두 기억하고 있을 거라 기대하지 말고, 자동화하라

 


4. tar : 파일과 파일 시스템 archiving

 

📌 archive 생성 3단계 
  1. archive에 포함할 파일을 알아둔다.
  2. archive가 사용할 storage drive 안의 위치를 확인한다.
  3. file을 archive에 추가하고 archive file을 storage에 저장한다.

이 세 단계를 한 번에 해결하고 싶다면 tar를 사용하면 된다.

 

📌 단순 archive와 compression의 예
💡 tar 명령은 명시한 원본 디렉터리와 파일들을 절대로 이동하거나 삭제하지 않고 복사한다.

 

1️⃣ 기본적인 tar 사용법

$ tar cvf archivename.tar *
  • -c : archive 생성
  • -v : 자세한 log를 화면에 출력
  • -f : 생성할 archive 파일명 지정

tar 확장자명은 없어도 되지만, 파일의 용도를 명확히 보여주는 편이 좋다.

 

2️⃣ archive 파일 압축

$ tar czvf archivename.tar.gz *.mp4
  • -z(zip) : archive를 gzip 프로그램으로 압축한다.
  • 관례로 .gz 확장자를 덧붙인다.

 

3️⃣ 압축 파일 나누기 : split

$ split -b 1G archivename.tar.gz "archivename.tar.gz.part"

$ cat archivename.tar.gz.part* > archivename.tar.gz
  • archive 파일이 아주 커지는 경우, split 명령어로 여러 개의 작은 파일로 나누어 전송한 뒤 병합할 수도 있다.

 

📌 file system archive streaming
# tar czvf - --one-file-system / /user /var \
--exclude=/home/andy/ | ssh (계정명)@(ip) \
"cat > /home/(계정명)/workstation-backup-Apr-10.tar.gz"

위 명령어는 Linux가 작동되는 A host에서 tar로 archive를 생성하고, ssh로 archive를 remote server에 전송해 저장하는 방식이다.

이 명령어를 이해하기 위해서는 작은 예를 먼저 살펴보는 것이 좋다.

 

$ tar czvf - importantstuff | ssh (username)@(ip) \
<linearrow /> "cat > /home/username/myFiles.tar.gz"
  • archive 이름 대신 대시(-)를 사용하면 내용을 표준 출력 장치에 출력한다.
  • archive 이름은 명령어 마지막에, data stream을 remote server에서 cat을 실행함으로써 명시할 수 있다.
  • 중간 단계에 임시 파일을 local pc에 저장할 필요가 없다.

 

# tar czvf /dev/sdc1/workstation-backup-Apr-10.tar.gz \
--one-file-system / /usr /var --exclude=/home/andy
  • 명령어 옵션 구성
    • --one-file-system : archive를 만들 때 다른 파티션에 있는 데이터를 모두 제외한다. (sys나 dev같은 의사 파티션)
    • / /usr /var : usr과 var 파티션을 명시적으로 참조한다.
    • --exclude= : 필요에 따라 선택된 파일 시스템 안에서 특정 디렉토리나 파일을 제외한다.

 

📌 find로 파일 모으기

archiving 하려는 파일이 모두 단일 디렉토리 구조 안에 모여있지 않고, 포함하고 싶지 않은 파일들도 있을 때, 원본 디렉토리 구조를 변경하지 않고 원하는 파일만 모을 수 있다.

  • 주어진 규칙에 맞는 파일들의 이름과 위치를 표준 출력(stdout, standard out)으로 출력한다.

 

# find /var/www/html/ -iname "*.mp4" -exec tar -rvf videos.tar {} \;
  • 명령어 옵션
    • -iname : 대문자와 소문자를 모두 매칭한다. (-name은 대소문자를 구분한다.)
    • {} : find의 표준 출력 결과가 해당 위치로 들어온다.
  • find 명령은 sudo로 실해하는 편이 좋다.
    • 시스템 디렉토리를 검색하므로 일반 사용자 권한으로 읽지 못하는 일부 파일을 놓칠 수도 있다.

 

🟡 locate

$ locate *vedio.mp4
  • 급할 때 파일을 간단히 찾을 수 있는 명령어
  • 전체 시스템을 검색해 지정한 문자열에 매칭되는 파일을 찾는다.
  • 대부분 locate가 fine보다 빨리 결과를 찾는다.
    • locate는 파일 시스템 자체를 검색하지 않고, 검색 문자열을 기존 인덱스에서 찾는다.
    • 인덱스가 오래될 수록 검색 결과의 정확성이 떨어진다.

 

$ updatedb
  • 일반적으로 인덱스는 시스템이 부팅될 때마다 업데이트된다.
  • 수동으로 업데이트하고 싶다면 위의 명령어를 사용하면 된다.

 

📌 권한 및 소유권 유지하기와 archive 추출하기
💡 Archiving 작업으로 파일 접근 권한과 소유자 속성이 손상되면 안 된다.

 

🟡 권한

$ ls -l

귀찮으니까 예전에 정리한 자료로 대체

 

🟡 소유권

  • 파일이 너무 크거나 민감한 데이터가 있는 경우 이메일을 사용할 수는 없다.
    • 같은 server 사용자라면 복사해주면 된다.
    • 서로 다른 서버라도 scp로 파일을 전송하고 요청한 사용자 홈 디렉토리로 복사하면 된다.
  • 두 방법 모두 다른 사용자의 디렉토리로 복사해야 하므로 sudo를 사용해야 한다.
    • 파일 소유자가 root가 되는 문제가 발생한다.
    • 마찬가지로 수신자 측에서 sudo 권한의 chown 명령어로 권한을 수정해야 한다.

 

🟡 추출과 소유권

$ mkdir tempdir && cd tempdir
$ touch file1 file2 file3 && ls -l
$ sudo chown otheruser:otheruser file3
$ tar cvf stuff.tar *
$ tar xvf stuff.tar && ls -l

여전히 세 파일을 모두 내가 소유하고 있다.

  • 일반적으로 관리자 권한이 있는 사용자만 다른 사용자 계정에 있는 리소스를 이용할 수 있다.
    • 내 파일 중 하나의 소유자를 동료로 바꾸는 것은 다른 사용자 계정을 변경하는 작업이다.
  • 따라서 archive에서 파일을 추출할 때, 다른 사용자 소유의 파일로 저장하는 것은 불가능하다.
  • 원래 권한으로 파일을 추출하는 것도 비슷한 문제가 있다.
  • 해결책은 sudo 권한으로 작업을 수행하는 것이다.

 


5. dd : 파티션 archiving

 

📌 dd(disk destroyer)
  • 파티션과 관련된 작업을 할 때 유용하다.
  • 어떤 디지털 매체라도 바이트 하나하나를 완벽히 복사해 완벽한 Image를 만들 수 있다.
  • dd는 디스크 파괴자의 약자다. 오타 하나가 disk 데이터를 통째로, 영구적으로 삭제하는 일이 생길 수 있다.

 

📌 dd 사용하기

'/dev/sda'로 지정된 disk에 있는 데이터 전체의 완벽한 Image를 만들어보자.

우선 '/dev/sda'와 빈 disk를 연결한다.

 

💡 Archive가 제대로 작동하는지 늘 테스트하라.

1️⃣ 기본적인 사용법

# dd if=/dev/sda of=/dev/sdb
  • 'if=' :  원본 드라이브
  • 'of=' : 데이터를 저장할 파일이나 장치의 이름

 

2️⃣ .img archive 생성

# dd if=/dev/sda of=/home/username/sdadisk.img
  • 드라이브 전체의 Image를 생성한다.
  • 드라이브에 있는 특정 파티션에도 똑같이 작업할 수 있다.

 

3️⃣ 한 번에 복사할 바이트 수 지정 : bs 플래그

# dd if=/dev/sda of=/home/username/partition2.img bs=4096
  • 이상적인 bs 값은 하드웨어와 여러 조건에 따라 나뉜다.

 

4️⃣ 복원

dd if=sdadisk.img of=/dev/sdb
  • if와 of의 값을 바꾸면 복원이 된다.

 

📌 dd로 디스크 소거하기
⚠️ 하드디스크 드라이브를 모두 파괴하는 방법
# dd if=/dev/zero of=/dev/sda1

# dd if=/dev/urandom of=/dev/sda1
  • 비밀 데이터를 담은 파일을 지우기만 하면, 시간과 동기만 충분할 경우 복구가 가능하다.
  • dd를 사용하면 파티션의 구석구석을 수백만 또는 수백억 개의 0으로 덮어씌울 수 있다.
  • 두 번째 명령어는 /dev/urandom 파일을 원본으로 사용하여 disk를 무작위 글자들로 덮어버린다.

 


6. rsync : archive 동기화

 

아주 큰 Archive를 정기적으로 백업하기 위해 매일매일 전송하면 Network에 상당한 부담을 준다.

파일 시스템을 통째로 전송하는 대신 최신 백업 내역에서 추가 혹은 수정된 파일들만 전송한다.

 

📌 사용법
$ mkdir mynewdir && cd mynewdir
$ touch file{1..10}

$ ssh yu21911407@192.168.56.1 "mkdir syncdirectory"
$ rsync -av * yu21911407@192.168.56.1:syncdirectory

client
server

  • -a : rsync가 재귀적으로 동기화한다.
    • rsync가 재귀적으로 하위 디렉토리와 그 안의 모든 내용을 동기화한다.
    • 특수 파일들, 수정 시간, 소유권과 접근 권한을 유지한다.
  • -v : 명령이 수행하는 작업을 상세히 출력한다.

 

$ touch newfile
$ nano file3
$ rsync -av * yu21911407@192.168.56.1:syncdirectory

client
server

  • 똑같이 rsync를 보내면 새로 추가한 newfile만 전송된다. (nano file3치고 아무 내용 입력도 안 해버렸더니 반영이 안 됐다. 😅)

 


7. 백업 계획 시 고려 사항

 

📌 데이터 가치 측정
  • 새로운 Archive를 얼마나 자주 생성하고, 이전 버전을 얼마나 오래 보관할 것인가?
  • 백업 과정에 얼마나 많은 검증 단계를 넣을 것인가?
  • 데이터 사본을 동시에 몇 개나 보관할 것인가?
  • Archive를 원격지에 보관하는 것은 얼마나 가치있는가?

 

📌 차등 백업(differential backup) 
  • 전체 백업을 일주일에 한 번(월요일) 수행하고, 더 작고 빠른 차등 백업을 나머지 6일 동안 매일 수행할 수 있다.
  • 화요일 백업은 월요일 백업 이후에 변경된 파일들만 포함한다.
  • 수, 목, 금요일 백업도 각각 월요일 백업 이후에 변경된 파일들을 모두 포함한다.
  • 복구할 때 마지막 전체 백업과 최신 차등 백업만 있으면 된다.

 

📌 증분 백업(incremental backup)
  • 마찬가지로 전체 백업을 월요일에만 수행하고 화요일에는 변경된 파일만 백업한다.
  • 그러나 수요일 백업은 화요일 이후에 추가나 변경된 파일들만 백업한다.
  • 목요일 백업은 수요일 이후에 변경이나 추가된 파일만 백업한다.
  • 빠르고 효율적이지만, 백업 데이터가 여러 파일에 분산되어 있으므로 복구에 시간이 더 많이 들고 복잡하다.

 

✒️ 좋은 보안 습관

• 중요한 데이터를 모두 백업 가능하도록 자동화하고 신뢰성 있으며 검증되고 안전하게 반복하는 절차를 만들어라.
• 가능하면 기밀 데이터는 별도의 파티션에 만든 파일 시스템에 저장하고, 시스템 부팅 시 이 파일 시스템을 마운트하라.
• 파일 접근 권한이 정확한지 늘 검사하고, 최소한의 접근 권한만 부여하라.
• 구형 저장 장치에 저장된 데이터가 제대로 삭제되었을 거라 쉽게 넘기면 안 된다.
저작자표시 비영리 (새창열림)
  1. 1. Archiving의 목적
  2. 2. Archiving의 대상
  3. 3. Archiving의 위치
  4. 4. tar : 파일과 파일 시스템 archiving
  5. 5. dd : 파티션 archiving
  6. 6. rsync : archive 동기화
  7. 7. 백업 계획 시 고려 사항
'DevOps/Linux' 카테고리의 다른 글
  • [Linux] no space left on device 트러블 슈팅
  • [Linux] VIM Plugin 설치
  • [Linux] Remote Access : Encryption
  • [Linux] Issue : Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend
나죽못고나강뿐
나죽못고나강뿐
싱클레어, 대부분의 사람들이 가는 길은 쉽고, 우리가 가는 길은 어려워요. 우리 함께 이 길을 가봅시다.
  • 나죽못고나강뿐
    코드를 찢다
    나죽못고나강뿐
  • 전체
    오늘
    어제
    • 분류 전체보기 (457)
      • Computer Science (60)
        • Git & Github (4)
        • Network (17)
        • Computer Structure & OS (13)
        • Software Engineering (5)
        • Database (9)
        • Security (5)
        • Concept (7)
      • Frontend (21)
        • React (13)
        • Android (4)
        • iOS (4)
      • Backend (77)
        • Spring Boot & JPA (50)
        • Django REST Framework (14)
        • MySQL (8)
        • Nginx (1)
        • FastAPI (4)
      • DevOps (24)
        • Docker & Kubernetes (11)
        • Naver Cloud Platform (1)
        • AWS (2)
        • Linux (6)
        • Jenkins (0)
        • GoCD (3)
      • Coding Test (112)
        • Solution (104)
        • Algorithm (7)
        • Data structure (0)
      • Reference (134)
        • Effective-Java (90)
        • Pragmatic Programmer (0)
        • CleanCode (11)
        • Clean Architecture (2)
        • Test-Driven Development (4)
        • Relational Data Modeling No.. (0)
        • Microservice Architecture (2)
        • 알고리즘 문제 해결 전략 (9)
        • Modern Java in Action (0)
        • Spring in Action (0)
        • DDD start (0)
        • Design Pattern (6)
        • 대규모 시스템 설계 (6)
        • JVM 밑바닥까지 파헤치기 (4)
      • Service Planning (2)
      • Side Project (5)
      • AI (0)
      • MATLAB & Math Concept & Pro.. (1)
      • Review (17)
      • Interview (2)
      • IT News (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃
  • 공지사항

    • 한동안 포스팅은 어려울 것 같습니다. 🥲
    • N Tech Service 풀스택 신입 개발자가 되었습니다⋯
    • 취업 전 계획 재조정
    • 취업 전까지 공부 계획
    • 앞으로의 일정에 대하여..
  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
나죽못고나강뿐
[Linux] Archive

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.