LabHub

백업과 복구 · tar 와 rsync · 실습

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

참고

단계 8개

  1. 백업 대상 만들기
  2. 전체 백업
  3. 목록 확인
  4. 증분 백업 두 번
  5. 제외 규칙 적용
  6. 권한 보존 확인
  7. 아카이브 분할과 재결합
  8. 백업 세트 요약