復旧リハーサル
한국어 원문으로 표시합니다.
목표
앞에서 만든 백업 세트로 복구 리허설을 수행하고, 시간을 재서 RTO 충족 여부를 판정합니다.
왜 중요한가
복구는 순서와 검증이 전부입니다. 임시 경로를 거치지 않고 -C / 로 바로 푸는 것은 되돌릴 수 없는 작업이고, 증분 복원 순서를 어기면 있어야 할 파일이 사라집니다. 그리고 RTO 는 실제로 재기 전까지 희망사항입니다 — 실무에서 RTO 를 못 지키는 원인 1위는 추출이 느려서가 아니라 백업을 가져오는 시간을 계산에 넣지 않았기 때문입니다.
이 실습의 복구 목표는 RPO 24시간, RTO 300초 입니다.
단계
/root/rest디렉터리를 만들고,/root/rest/objective.txt에 다음 두 줄을 적으세요.RPO=24h/RTO=300s/root/bk/full.tar.gz를/root/rest/check/에 복원하세요. 현재/root/bk/src는 건드리면 안 됩니다.- 복원본과 원본을 재귀 비교해 결과를
/root/rest/diff.txt로 저장하세요. (4번에서 추가한 파일 때문에 차이가 있을 수 있으니, 비교 대상은conf와data디렉터리로 한정해도 좋습니다.) - 아카이브에서
src/app/conf.yaml하나만/root/rest/one/으로 복원하세요. 그 디렉터리에 다른 파일이 있으면 안 됩니다. --strip-components를 써서 아카이브의src/를 떼고/root/rest/stripped/에 복원하세요. 결과적으로/root/rest/stripped/app/main.py가 존재해야 합니다.- 증분 세트를 순서대로 복원하세요.
/root/rest/inc/에 전체 → inc0 → inc1 순으로 풀어,/root/rest/inc/src/app/new.py가 존재해야 합니다. - 2번부터 6번까지의 전체 복구를 다시 한 번 수행하며 시간을 재고,
/root/rest/timing.txt에 다음 두 줄을 적으세요.ELAPSED=<초>/MEETS_RTO=<yes|no>(300초 이내면 yes) /root/rest/report.txt를 다음 5줄로 만드세요.RESTORED_FILES=<2번 복원본의 파일 수>/SELECTIVE=1/STRIPPED_OK=yes/INCREMENTAL_OK=yes/RTO_MET=<7번의 판정>
참고
- 선택 복원은
tar -xzf <아카이브> -C <대상> <아카이브 안 경로>입니다. 경로는tar -tzf로 먼저 확인하세요. - 증분 복원은
tar --listed-incremental=/dev/null -xzf <아카이브> -C <대상>형태로 순서대로 실행합니다. - 시간 측정은
S=$(date +%s); ...; E=$(date +%s); echo $((E-S))입니다. - 흔한 실수 1: 2번에서 대상 디렉터리를 미리 만들지 않으면 tar 가 실패합니다.
- 흔한 실수 2: 6번에서 증분 순서를 뒤집으면 나중 변경이 이전 것으로 덮여 파일이 사라집니다.
복구 목표 기록
/root/rest 디렉터리를 만들고, /root/rest/objective.txt 에 다음 두 줄을 적으세요.
RPO=24h / RTO=300s
RPO 와 RTO 는 이 실습에서 주어집니다. 값을 정확히 적으세요.
임시 경로로 복원
/root/bk/full.tar.gz 를 /root/rest/check/ 에 복원하세요. 현재 /root/bk/src 는 건드리면 안 됩니다.
절대 현재 위치에 바로 풀지 마세요. 복원 위치를 지정하는 옵션을 씁니다.
원본과 비교
복원본과 원본을 재귀 비교해 결과를 /root/rest/diff.txt 로 저장하세요. (4번에서 추가한 파일 때문에 차이가 있을 수 있으니, 비교 대상은 conf 와 data 디렉터리로 한정해도 좋습니다.)
디렉터리 전체를 재귀적으로 비교하는 명령이 있습니다. 차이가 없으면 조용합니다.
선택 복원
아카이브에서 src/app/conf.yaml 하나만 /root/rest/one/ 으로 복원하세요. 그 디렉터리에 다른 파일이 있으면 안 됩니다.
아카이브 안 경로를 인자로 주면 그것만 풀립니다. 먼저 목록에서 정확한 경로를 확인하세요.
경로 조정 복원
--strip-components 를 써서 아카이브의 src/ 를 떼고 /root/rest/stripped/ 에 복원하세요. 결과적으로 /root/rest/stripped/app/main.py 가 존재해야 합니다.
앞쪽 경로 요소를 몇 개 떼어낼지 지정하는 옵션이 있습니다.
증분 순서대로 복원
증분 세트를 순서대로 복원하세요. /root/rest/inc/ 에 전체 → inc0 → inc1 순으로 풀어, /root/rest/inc/src/app/new.py 가 존재해야 합니다.
전체를 먼저, 증분을 순서대로 풀어야 합니다. 복원 시 스냅샷 파일은 갱신하지 않습니다.
복구 시간 측정
2번부터 6번까지의 전체 복구를 다시 한 번 수행하며 시간을 재고, /root/rest/timing.txt 에 다음 두 줄을 적으세요.
ELAPSED=<초> / MEETS_RTO=<yes|no> (300초 이내면 yes)
시작과 끝 시각의 차이를 초로 계산합니다. 목표와 비교해 판정하세요.
리허설 보고서
/root/rest/report.txt 를 다음 5줄로 만드세요.
RESTORED_FILES=<2번 복원본의 파일 수> / SELECTIVE=1 / STRIPPED_OK=yes / INCREMENTAL_OK=yes / RTO_MET=<7번의 판정>
앞 단계의 실제 결과를 모으세요. 불일치 수는 비교 결과에서 나옵니다.