Linux 강좌 / tar 압축·백업과 복원 검증하기

압축은 데이터 크기를 줄이고, 백업은 원하는 시점의 데이터를 별도로 보관해 복구할 수 있게 하는 작업입니다. 백업 성공은 파일 생성만으로 판단하지 말고 다른 위치에 실제로 복원한 뒤 내용·권한과 애플리케이션의 사용 가능 여부를 확인해야 합니다.

여기서는 수동으로 만든 백업을 별도 경로에 복원해 내용과 권한을 비교합니다. 이 확인을 통과한 절차를 예약 백업과 독립 상태 점검에서 자동화하는 순서로 학습하세요.

압축·아카이브·동기화를 구분하기

작업 주요 목적 주의점
아카이브 여러 파일과 메타데이터를 한 묶음으로 보관 보관할 메타데이터와 복원 권한 확인
압축 같은 정보를 더 작은 형태로 저장 암호화나 별도 복사본을 뜻하지 않음
동기화 원본과 대상의 현재 상태를 맞춤 잘못된 삭제·변경도 전파될 수 있음
백업 과거 시점 복구와 별도 보존 복원 시험·보존 기간·분리된 저장소 필요

같은 디스크의 다른 폴더에만 복사하면 실수로 덮어쓴 파일에는 도움이 되어도 디스크 고장에 함께 손실될 수 있습니다. 원본과 독립된 저장소, 여러 시점의 사본, 계정 침해나 랜섬웨어가 바로 수정하기 어려운 사본을 설계하세요. 암호화가 필요하면 보관 키를 별도로 안전하게 관리하고 복구 담당자가 접근할 방법도 확보합니다.

안전한 연습 자료 만들기

lab=$(mktemp -d "$HOME/linux-backup-lab.XXXXXX")
mkdir -p "$lab/source/docs" "$lab/archives" "$lab/restore"
printf "version 1\n" > "$lab/source/docs/note.txt"
printf "enabled=yes\n" > "$lab/source/settings.conf"
chmod 600 "$lab/source/settings.conf"
find "$lab/source" -type f -print

작업 경로가 새 임시 디렉터리 아래인지 출력으로 확인합니다. 원본, 압축 파일, 복원 디렉터리를 서로 나누어 원본 안에 백업 파일을 다시 넣는 순환을 피했습니다. 예제는 일반 사용자 파일만 다루므로 root 소유권, ACL·확장 속성, 데이터베이스 일관성을 검증하는 실습은 아닙니다.

상대 경로로 tar.gz를 만들고 목록 확인하기

tar -czf "$lab/archives/source.tar.gz" -C "$lab" source
tar -tzf "$lab/archives/source.tar.gz"
(cd "$lab/archives" && sha256sum source.tar.gz > source.tar.gz.sha256)
(cd "$lab/archives" && sha256sum -c source.tar.gz.sha256)

-c는 생성, -z는 gzip 압축, -f 다음은 압축 파일 이름입니다. -C로 기준 디렉터리를 바꿔 절대 경로 대신 source/...를 담습니다. 목록에 예상한 두 파일이 있는지 확인하고, 체크섬 검증에서 OK가 나오는지 봅니다. 체크섬은 기록 이후 파일이 바뀌었는지 확인하지만, 같은 권한으로 체크섬까지 바꿀 수 있는 공격자에 대한 진위 보증은 아닙니다.

다른 위치에 복원하고 원본과 비교하기

tar -xzf "$lab/archives/source.tar.gz" -C "$lab/restore"
diff -r "$lab/source" "$lab/restore/source"
stat -c "%a %n" "$lab/source/settings.conf" "$lab/restore/source/settings.conf"
cat "$lab/restore/source/docs/note.txt"

diff가 출력 없이 0으로 끝나면 탐색한 파일 내용이 같습니다. stat로 설정 파일의 600 권한을 비교하고, 복원한 파일에서 version 1을 확인합니다. diff는 소유권·ACL·확장 속성 같은 모든 메타데이터를 검사하지 않으므로 실제 서비스 복구에서는 필요한 항목을 별도로 검증해야 합니다.

원본의 note.txt를 version 2로 바꾸고 diff를 다시 실행하면 차이가 보여야 합니다. 백업에는 여전히 version 1이 남아 있다는 점이 “현재 상태 맞추기”와 “이전 시점 복구”의 차이입니다. 검증 후 원본으로 덮어쓰지 말고 복원 디렉터리에 보관한 상태에서 결과를 살펴보세요.

신뢰하지 않는 압축 파일과 실행 중인 서비스

출처가 불명확한 아카이브는 목록부터 확인하고 일반 계정의 격리된 새 디렉터리에 풉니다. 예상하지 못한 경로·심볼릭 링크·파일 수와 크기를 점검하고 루트 디렉터리에 관리자 권한으로 풀지 마세요. 형식 검사만으로 안전을 보장할 수 없으므로 중요한 시스템과 분리된 환경을 사용하는 편이 적절합니다.

실행 중인 데이터베이스의 저장 디렉터리를 단순 tar로 묶으면 서로 다른 시점의 파일이 섞일 수 있습니다. 데이터베이스가 제공하는 논리 백업·물리 백업 절차, 정지 또는 일관된 스냅샷 조건을 사용하세요. 재해 복구 시간과 허용할 데이터 손실 범위도 정하고 실제 복원 시간으로 평가합니다.

rsync를 사용할 때는 먼저 변경 예정 목록 보기

rsync -av --dry-run "$lab/source/" "$lab/restore/source/"

rsync가 설치된 환경에서 --dry-run은 변경 예정 목록을 보여 줍니다. 소스 뒤의 /는 디렉터리 자체가 아니라 그 내용을 대상으로 한다는 중요한 의미가 있습니다. --delete는 대상에만 있는 파일을 삭제할 수 있으므로 이 예제에 넣지 않았습니다. 동기화 대상 경로를 확인하고, 별도 시점 백업을 유지한 뒤 필요한 작업만 적용하세요.

공식 문서