LabHub
배우기 러닝패스 코스

バックアップとリストア

tarでバックアップセットを作る

LabHub 에서 이어서 보기

한국어 원문으로 표시합니다.

목표

tar 로 전체 백업과 증분 백업을 만들고, 제외 규칙과 권한 보존과 분할까지 다룹니다.

왜 중요한가

tar 옵션 하나가 복원 결과를 바꿉니다. -C 없이 절대 경로를 담으면 복원 위치를 고를 수 없고, --numeric-owner 없이 복원하면 다른 시스템에서 소유자가 엉뚱하게 매핑되고, --selinux 없이 복원하면 SELinux 시스템에서 서비스가 아예 뜨지 않습니다. 그리고 --listed-incremental스냅샷 파일이 증분 체인의 상태를 들고 있으므로 그 파일도 함께 보관해야 합니다 — 이걸 잃으면 다음 증분이 사실상 전체 백업이 됩니다.

단계

  1. /root/bk/src 아래에 다음을 만드세요. app/main.py, app/conf.yaml, data/records.csv, logs/app.log, logs/old.log. 각 파일에 한 줄 이상 넣되, data/records.csv 만은 200KB 이상으로 채우세요. 7단계에서 아카이브를 64KB 로 쪼개는데, 한 줄짜리 파일만 넣으면 압축본이 1KB도 안 되어 조각이 하나만 생깁니다. base64 /dev/urandom | head -c 240000 > data/records.csv 같은 것이면 충분합니다.
  2. /root/bk/full.tar.gz 로 전체 백업을 만드세요. 아카이브 안의 경로가 src/ 로 시작해야 합니다(절대 경로 금지).
  3. 아카이브 항목 수를 숫자 한 줄로 /root/bk/count.txt 에 적으세요.
  4. 증분 백업을 만드세요. 스냅샷 파일은 /root/bk/snap.snar 입니다. 먼저 /root/bk/inc0.tar.gz 를 만들고, src/app/new.py 파일을 추가한 뒤 /root/bk/inc1.tar.gz 를 만드세요. inc1 의 항목 수가 inc0 보다 적어야 합니다.
  5. logs/ 를 제외한 백업 /root/bk/nolog.tar.gz 를 만드세요. 목록에 logs 가 없어야 합니다.
  6. /root/bk/src/app/conf.yaml 의 권한을 640 으로 바꾼 뒤 다시 전체 백업(/root/bk/perm.tar.gz)을 만들고, /root/bk/restore-perm/ 에 권한을 보존해 복원하세요. 복원된 파일의 권한을 숫자 한 줄로 /root/bk/perm.txt 에 적으세요. 640 이어야 합니다.
  7. /root/bk/full.tar.gz64KB 단위로 분할/root/bk/split/full.part 접두사로 저장하고, 다시 합쳐 /root/bk/rejoined.tar.gz 를 만드세요. 원본과 sha256 이 같아야 합니다.
  8. /root/bk/report.txt 를 다음 5줄로 만드세요. FULL_ENTRIES=<3번 값> / INC0_ENTRIES=<inc0 항목 수> / INC1_ENTRIES=<inc1 항목 수> / NOLOG_HAS_LOGS=no / REJOIN_OK=yes

참고

백업 대상 만들기

/root/bk/src 아래에 다음을 만드세요. app/main.py, app/conf.yaml, data/records.csv, logs/app.log, logs/old.log. 각 파일에 한 줄 이상 넣되, data/records.csv 만은 200KB 이상으로 채우세요. 7단계에서 아카이브를 64KB 로 쪼개는데, 한 줄짜리 파일만 넣으면 압축본이 1KB도 안 되어 조각이 하나만 생깁니다. base64 /dev/urandom | head -c 240000 > data/records.csv 같은 것이면 충분합니다.

하위 디렉터리와 로그를 섞어 두면 뒤 단계의 제외 규칙이 의미를 갖습니다.

전체 백업

/root/bk/full.tar.gz 로 전체 백업을 만드세요. 아카이브 안의 경로가 src/ 로 시작해야 합니다(절대 경로 금지).

절대 경로가 아카이브에 들어가지 않게 하는 옵션이 있습니다. 그래야 복원 위치를 고를 수 있습니다.

목록 확인

아카이브 항목 수를 숫자 한 줄로 /root/bk/count.txt 에 적으세요.

추출하지 않고 내용만 보는 옵션이 있습니다. 항목 수를 세어 파일에 적으세요.

증분 백업 두 번

증분 백업을 만드세요. 스냅샷 파일은 /root/bk/snap.snar 입니다. 먼저 /root/bk/inc0.tar.gz 를 만들고, src/app/new.py 파일을 추가한 뒤 /root/bk/inc1.tar.gz 를 만드세요. inc1 의 항목 수가 inc0 보다 적어야 합니다.

스냅샷 파일이 상태를 들고 있습니다. 같은 스냅샷 파일을 계속 쓰면 증분 체인이 이어집니다.

제외 규칙 적용

logs/ 를 제외한 백업 /root/bk/nolog.tar.gz 를 만드세요. 목록에 logs 가 없어야 합니다.

제외 패턴은 여러 번 지정하거나 파일에서 읽을 수 있습니다. 결과 목록에 그 항목이 없어야 합니다.

권한 보존 확인

/root/bk/src/app/conf.yaml 의 권한을 640 으로 바꾼 뒤 다시 전체 백업(/root/bk/perm.tar.gz)을 만들고, /root/bk/restore-perm/ 에 권한을 보존해 복원하세요. 복원된 파일의 권한을 숫자 한 줄로 /root/bk/perm.txt 에 적으세요. 640 이어야 합니다.

복원할 때 권한과 소유자를 정확히 되살리는 옵션이 있습니다. 복원 후 stat 으로 비교하세요.

아카이브 분할과 재결합

/root/bk/full.tar.gz64KB 단위로 분할/root/bk/split/full.part 접두사로 저장하고, 다시 합쳐 /root/bk/rejoined.tar.gz 를 만드세요. 원본과 sha256 이 같아야 합니다.

split 은 접두사를 받고 조각 파일을 만듭니다. 재결합은 cat 으로 합니다.

백업 세트 요약

/root/bk/report.txt 를 다음 5줄로 만드세요. FULL_ENTRIES=<3번 값> / INC0_ENTRIES=<inc0 항목 수> / INC1_ENTRIES=<inc1 항목 수> / NOLOG_HAS_LOGS=no / REJOIN_OK=yes

각 아카이브의 크기와 항목 수를 모으세요. 값은 실제 측정치여야 합니다.