기술 · 실용 가이드
tar “Unexpected EOF”? 다시 풀기 전에 아카이브 완전성을 증명하세요
원본 바이트를 보존하고 압축 계층과 tar 구조를 따로 검사한 뒤 원본 크기와 해시를 대조해 교체 또는 격리 복구를 결정합니다.

“Unexpected EOF”는 현재 구조나 멤버가 끝나기 전에 리더가 받은 바이트를 모두 소진했다는 뜻입니다. 재압축 해제는 사라진 꼬리를 만들 수 없습니다.
정확한 파일을 보존하고 압축과 아카이브 계층을 식별한 뒤 신뢰할 수 있는 원본 크기와 해시를 비교합니다. 일부 파일이 풀렸다고 완전한 것은 아닙니다.
재시도 전에 정확한 바이트 격리
의심 아카이브를 증거 경로로 복사하거나 이름을 바꾸고 바이트 수, 해시, 원본, 획득 명령, 시간, 전체 오류를 기록합니다. 실제 대상에 다시 풀지 않습니다.
파이프라면 양쪽 명령과 종료 상태를 남깁니다. pipefail 같은 상태 기록이 없으면 downstream 성공이 upstream 단절을 가릴 수 있습니다.
파일명 아닌 증거로 각 계층 식별
파일 유형과 시작 바이트를 확인한 뒤 주장된 압축 래퍼를 별도로 검사합니다. 실제 gzip일 때만 gzip -t를 사용합니다.
래퍼 검사 후 복사본이나 올바른 해제기를 통해 tar -tf를 실행해 gzip 손상과 내부 tar 조기 종료를 구분합니다.
생성 원본과 완전성 증명
신뢰 가능한 원본이나 생성 측에서 예상 바이트 수와 해시를 받아 둘 다 비교한 뒤 재다운로드를 수리로 인정합니다.
스트림 복사는 송신과 수신 상태, 양쪽 크기와 해시를 기록합니다. 종료 코드 0보다 일치하는 바이트가 강한 증거입니다.
끝 마커와 누락 페이로드 분리
tar는 512바이트 레코드를 쓰고 보통 0 블록으로 끝납니다. 관례적 끝 블록 누락과 헤더나 멤버 도중 EOF는 다릅니다.
--ignore-zeros는 0 블록을 건너뛸 뿐 누락 내용을 만들지 않습니다. 멤버 중간에서 멈추면 이후는 누락, 출력 파일도 임시입니다.
증거를 덮지 않고 교체 또는 재수집
새 임시 이름으로 다시 받고 올바른 계층, 예상 크기, 신뢰할 해시를 검증한 뒤 원자적으로 교체합니다.
생성 원본이 활성 파일 시스템이면 동결이나 스냅샷을 사용합니다. 변하는 원본은 전송이 완전해도 논리적으로 불일치할 수 있습니다.
복사본에서만 복구하고 종료 조건 정의
원본이 사라졌다면 격리 디렉터리의 복사본에서만 작업합니다. 복구 가능한 멤버를 먼저 나열하고 새 대상에 풀어 독립 기록으로 검증합니다.
대체본이 각 계층 검사와 원본 크기 또는 해시를 만족하고 원래 흐름이 성공할 때만 완료합니다. 복구본은 불완전으로 표시합니다.
