bzip2recover 명령을 사용해 깨진 압축 폴더를 복원해 보겠습니다.

    7zip에서 tar.bz2 파일의 압축을 해제하려 하면


    위와 같은 정말 온갖 오류가 발생합니다.

    데이터 오류 : <파일명>.tar
    CRC가 다릅니다 : <파일명>.tar
    파일 '<파일명>'을(를) 압축파일로 열 수 없음
    데이터의 예기치 않은 종료 : <파일명>.tar

    이중에 해당되신다면 아래를 참고해 데이터를 복구해주세요.


    리눅스 쉘(저는 윈도우 상에서 WSL을 통해 작업하도록 할게요)에서도 마찬가지로 풀리지 않습니다.

    bzip2: Data integrity error when decompressing.

    파일을 몇 번이고 다시 받아도 동일한 증상이 발생하고 있습니다.

    이 파일을 복구해 보도록 하겠습니다.

    리눅스에서 작업하신다면 최고입니다. 아니면 WSL을 켜 주세요
    (WSL을 활성화하는 방법은 구글링으로..(chocolatey(윈도우판 apt-get)로는 작동되지 않았습니다.))

    준비

    bunzip2 패키지가 필요합니다. 다음과 같이 설치해주세요

    sudo apt install bzip2
    sudo apt install bzip2

    저는 이미 설치되어 있기 때문에 위와 같이 표시됩니다.
    여러분은 나타나는 질문에 긍정적인 대답을 해 설치를 완료해주세요.

    저는 작업을 편하게 하기 위해 아래 사진처럼 경로를 나눴어요.

     

    • 깨짐 - 손상된 원본 압축 파일

    • 복구 - 복구하기 위해 블록 단위로 쪼갠 압축파일

    • 완료 - 복구가 완료된 압축 파일

    을 담을 생각입니다.

    1. 손상된 파일 분할

    cd 명령어로 원하는 디렉토리로 이동한 다음 아래 명령을 사용해 손상된 bz2 파일을 블록 단위로 쪼갭니다.

    bzip2recover <파일 이름>
    bzip2recover Hello.tar.bz2

    (블록의 크기는 사용된 압축 옵션에 따라 100KB... 200KB... 또는 900KB가 될 수 있습니다. 기본값은 900KB입니다)

    ...모든 블록이 기록되었으면 다음과 같이 저장됩니다.

    (용량이 큰 원본 파일은 치워버립시다)

    2. 손상된 블록 검색

    이제 손상된 블록을 찾아 삭제하거나 수리해야 합니다.

    각각의 압축 파일을 모두 테스트하기 위해 아래 명령어를 사용하세요.

    for i in *.bz2; do bzip2 -tvf $i >> result.log 2>&1; done
    for i in *.bz2; do bzip2 -tvf $i >> result.log 2>&1; done

    아무런 응답 없이 잠시 동안 멈춰 있으면 정상입니다.(저는 3분 정도 걸린 것 같네요)

    테스트 결과는 같은 폴더의 result.log에 저장됩니다.

    메모장으로 result.log 파일을 열어 보았습니다.

    모든 파일이 정상이지만(파일이 예기치 않게 끝나는 오류는 무시해도 좋습니다)

    단 하나의 파일에서 CRC 체크섬 오류가 발생했네요.

    grep 명령으로도 확인할 수 있습니다.

    grep -i CRC result.log
    grep -i CRC result.log

    저는 2581번째 블록이 손상된 모양이에요.

     

    3. 손상된 블록 삭제

    사용한 로그와 손상된소중한 블록을 삭제합니다. 다른 블록이 아주 많고 해당 블록의 크기가 작다면 손실되는 데이터는 그리 많지 않을 겁니다.

    rm result.log
    rm rec<손상된 블록>.tar.bz2
    rm result.log
    rm rec02581Hello.tar.bz2 

    또는 파일 탐색기에서 삭제해도 됩니다.

     

    4. 손상된 인접 파일 헤더 복원

    이제 나머지 파일들의 bz2 압축을 해제해야 합니다.

    아까 만든 3개의 폴더 옆에 복구2라는 이름으로 폴더를 하나 더 만들었어요.

    실수로 위에서 만드는 걸 까먹어서...

    그리고 다음 명령을 입력합니다.

    for i in *.bz2; do bzip2 -dcvf $i > ./../복구2/$i.tar; done
    for i in *.bz2; do bzip2 -dcvf $i > ./../복구2/$i.tar; done

    압축이 풀린 파일 중 아까 손상된 파일 주변에서 가장 가까운 헤더의 시작점과 끝점을 찾아야 합니다

    그리고 그 둘을 부드럽게 이어줘야 합니다.

    rec02577.tar - 가장 인접한 선행 헤더(./Hello.tar/pictures/easter/pic01.jpg)
    rec02578.tar
    rec02579.tar
    rec02580.tar
    rec02581.tar <- 손상된 블록
    rec02582.tar
    rec02583.tar - 가장 인접한 후행 헤더(./Hello.tar/pictures/easter/pic02.jpg)

    블록들에는 위와 같이 헤더가 있고 헤더 사이에는 파일의 내용이 들어 있습니다

    위의 블록을 예시로 들자면 pic01.jpg 파일이 손상된 것이겠죠

    그 파일의 헤더와 함께 그 파일을 제거하고 서로 이어주면 되겠습니다. 

    HEX에디터가 필요합니다.

    선행 헤더를 찾기 위해 앞쪽 파일을 차례대로 짚어가며 HEX 에디터로 열어서 헤더를 찾으면 됩니다.

    저 같은 경우는 2580...2579...2578.. 등으로 내려가며 파일을 열어야겠죠

     

    Ctrl+F 를 반복한 결과 2481번 블록까지 내려가서야 찾았습니다. 용량이 매우 큰 파일이 깨진 모양이에요. 사진 한장 정도라면 보통 한두블록 뒤에 있기에 저는 특수한 케이스라고 할 수 있겠네요.

    그 위로는 2743블록에 헤더가 있었습니다. 찾는데 정말 고생했어요. 예전에 누가 루비로 헤더 찾는 프로그램을 만들었던 것 같은데 아무리 찾아도 나오지 않아 그냥 수동으로 찾았습니다. 알고 계신 분은 댓글 부탁드려요.

    이제 2481~2743블록 사이의 내용이 깨진 걸 알았으니 그 사이를 지워야 합니다.

    헤더의 파일/폴더명은 압축된 내용에 따라 다르겠죠. 제 경우에는 2481번 블록의 MTK_APSoC~ 부터 2743번 블록의 MTK_APSoC~ 바로 직전까지의 모든 내용을 삭제하면 됩니다.(파일 용량이 달라져도 됩니다.)

    그리고 수정한 두 블록 사이에 있는 파일(2482~2742)들은 그냥 삭제하면 됩니다.

    5. 정상적인 파일 합치기

    거의 다 왔어요 조금만 힘내세요! 

    남은 파일은 모두 정상 파일이기 때문에 합쳐서 하나의 파일로 만들어야 합니다.

    다음 명령어를 참고하세요

    cat rec*.tar > ../완료/recovered.tar
    cat rec*.tar > ../완료/recovered.tar

    끝났습니다 수고하셨습니다.

     

    이제 해당 파일은 정상적으로 열리고 아까 예시에서의 사진 한 장(저는 아주 큰 파일이었지만..)을 제외한 나머지 파일을 압축 해제하실 수 있습니다.

    tar -xvf recovered.tar
    tar -xvf recovered.tar

    이 가이드가 도움이 되셨길 바랍니다.

     

     

    이 원문을 참조해서 작성되었습니다.  rhinomite님께 감사드립니다 : https://www.linuxquestions.org/questions/linux-general-1/help-need-to-recover-corrupt-bzip2-files-289800/

     

    Help! Need to recover corrupt bzip2 files..

    Linux - General This Linux forum is for general Linux questions and discussion. If it is Linux Related and doesn't seem to fit in any other forum then this is the place. Notices Welcome to LinuxQuestions.org, a friendly and active Linux Community. You are

    www.linuxquestions.org

     

    Posted by Kamilake
    • 123
      2020.08.20 10:06

      안녕하세요 검색하다 방문하게 되었습니다. 문의 좀 드려도 될까요?

      여러개 모아 압축된게 체크섬에러상태.
      압축풀면 몇개는 압축에서 안꺼내짐.
      윈라르에서 리페어어쩌고 시도 : 생성파일로 해결x

      결론은 압축파일 안에 손상된 파일은 복구가 안되는 걸까요? 답장 부탁드리겠습니다..

      • Kamilake
        2020.08.20 19:01 신고

        안녕하세요 :)
        확장자가 어떻게 되시나요? CRC가 깨진 블록에 속한 파일은 복구하더라도 열 수 없을 지 모릅니다.

    • 123
      2020.08.21 18:01

      답장 감사합니다. zip파일입니다. 시알시 깨진건 어떻게 알아내죠;; 본문도 저에겐 복잡해서 정독 못했는데 본문에 있나요?^^; 답장 부탁드립니다..