백업과 복구 · 무결성 검증 · 실습
백업 검증 자동화
목표
백업의 무결성을 세 단계로 검증하고, 단계별 종료 코드를 가진 검증 스크립트를 작성합니다.
왜 중요한가
"백업이 돌고 있다" 와 "백업이 유효하다" 는 다른 말입니다. 검증은 세 단계입니다 — 존재하는가, 읽히는가, 실제로 복구되는가. 앞의 둘은 자동화할 수 있고 그것만으로도 대부분의 조용한 실패를 잡습니다. 그리고 단계별로 다른 종료 코드를 주면 모니터링에서 어디서 깨졌는지 바로 알 수 있습니다 — "백업 검증 실패" 보다 "압축 스트림 손상" 이 훨씬 유용한 알람입니다.
단계
1. /root/bv 디렉터리를 만들고, /root/bk 아래의 .tar.gz 파일들에 대한 sha256 매니페스트를 /root/bv/manifest.sha256 으로 만드세요.
2. 매니페스트로 검증을 수행해 결과를 /root/bv/check.txt 로 저장하세요. 모든 줄이 정상이어야 합니다.
3. /root/bk/full.tar.gz 의 압축 스트림 무결성을 검사하고, 종료 코드를 /root/bv/gzip.txt 에 rc=0 형식으로 적으세요.
4. 같은 파일의 아카이브 구조를 검사하고, 종료 코드를 /root/bv/tarlist.txt 에 rc=0 형식으로 적으세요.
5. /root/bv/corrupt.tar.gz 를 만드세요. /root/bk/full.tar.gz 를 복사한 뒤 중간 바이트를 손상시켜야 합니다. 그리고 압축 검사가 실패하는 것을 확인해 출력을 /root/bv/corrupt-detected.txt 로 저장하세요.
6. /root/bv/last-success 파일에 현재 시각을 ISO 형식(date -Is)으로 기록하고, 그 파일이 24시간 이내인지 판정한 결과를 /root/bv/fresh.txt 에 FRESH=yes 형식으로 적으세요.
7. /root/bv/verify.sh 를 작성하세요. 첫 번째 인자로 아카이브 경로를 받아 다음처럼 동작해야 합니다.
- 파일이 없거나 크기가 0 이면 종료 코드 1
- 압축 스트림이 손상됐으면 종료 코드 2
- 아카이브 구조가 손상됐으면 종료 코드 3
- 모두 통과하면 종료 코드 0 과 함께
OK를 포함한 메시지 출력
채점기가 정상 아카이브와 5번의 손상 아카이브 양쪽으로 실행합니다.
8. /root/bv/report.txt 를 다음 4줄로 만드세요.MANIFEST_OK=yes / CORRUPT_DETECTED=yes / SCRIPT_OK_RC=0 / SCRIPT_BAD_RC=<손상 아카이브에 대해 스크립트가 낸 종료 코드>
참고
- 손상 만들기:
cp <원본> <사본>후dd if=/dev/urandom of=<사본> bs=1 seek=200 count=32 conv=notrunc - 압축 검사는
gzip -t <파일>, 구조 검사는tar -tzf <파일> >/dev/null입니다. - 파일 나이 확인은
find <파일> -mtime -1또는stat -c %Y와 현재 시각 비교로 합니다. - 흔한 실수 1: 5번에서 파일 끝에 바이트를 덧붙이면 gzip 이 경고만 내고 통과할 수 있습니다. 중간을 손상시키세요.
- 흔한 실수 2: 7번 스크립트에
set -e만 쓰면 검사 실패 시 원하는 종료 코드 대신 명령의 코드로 끝납니다. 명시적으로exit N하세요.
단계 8개
- 체크섬 매니페스트
- 매니페스트 검증
- 압축 스트림 검사
- 아카이브 구조 검사
- 손상 재현과 탐지
- 최근 성공 시각 기록
- 단계별 검증 스크립트
- 검증 보고서