파이프된 tar 스트림에 오류 수정 정보 추가

파이프된 tar 스트림에 오류 수정 정보 추가

Amazon S3 Glacier Deep Archive를 사용하여 Ubuntu 시스템에 백업을 저장하고 있습니다. 내 작업 흐름은 기본적으로 다음과 같이 요약됩니다.

tar cf - $FILES | gzip -3 --stdout | aws s3 cp - $TARGET

나는 이것이 꽤 잘 작동한다고 생각하지만 매우 큰 아카이브(1TB+)의 경우 내 PC가 어딘가에서 엉망이되거나 약간 뒤집히면 전체 아카이브를 사용할 수 없게 될까봐 걱정됩니다. 이상적으로는 이 흐름에 일부 오류 수정 기능을 추가하고 싶습니다.

내가 원하는 대로 작동하는 것처럼 보이는 PAR2를 살펴보니 한 가지 주의 사항이 있습니다. 파이프를 입력으로 사용할 수 없다는 것입니다. 전체 아카이브를 디스크에 구축해야 합니다.그 다음에PAR2를 통해 실행한 다음 모든 것을 업로드하세요. 1TB가 넘는 아카이브의 경우 사용 가능한 디스크 공간 측면에서 항상 실현 가능한 것은 아니며 프로세스 속도가 상당히 느려집니다.

오류 정정 정보를 먼저 파일에 저장하지 않고 데이터 스트림에 추가하는 유사한 도구를 찾을 수 없었습니다. 어떻게 해야 하나요? 솔루션이 정보를 별도의 파일에 추가하는지, 아니면 스트림을 수정하여 중복성을 추가하는지 여부는 실제로 중요하지 않습니다.

답변1

도구:redupe

이에 대한 도구를 찾았습니다: redupe. 그것에 대해 읽어보세요:Redupe: 전달 오류 수정.

이 게시물에서는 redupe데이터 스트림에 대한 순방향 오류 수정을 제공하는 [...] 도구를 소개합니다. [...] 는 또는 redupe같은 압축 도구를 모델로 하지만 이를 제거하는 대신 중복성을 추가합니다. 데이터에 대해 직접 작동하여 원본 데이터와 함께 중복 정보를 인라인으로 추가하여 데이터를 중복 상태로 변환합니다.gzipbzip2redupe

보완 명령은 입니다 reundupe. 실제로는 하나의 도구일 뿐이며 이름에 따라 기능이 결정됩니다.

당신은 얻을 수 있습니다redupe GitHub에서.

redupe나는 Debian 12에서 컴파일하고 테스트했습니다. 자세한 내용은 아래를 참조하세요.


편집

참고: 여기에 설명된 일부 문제는 프로그래밍 및 컴파일 경험이 부족하거나 모든 것을 사전에 구성하지 않았기 때문에(또는 전혀) 발생했을 수 있습니다.

내 OS는 Debian 12입니다. 이것이 제가 한 일입니다:

  1. 다운로드했습니다redupe-master.zip GitHub에서, 압축을 풀고 새로 생성된 redupe-master/.

  2. 시행착오를 통해 다음 패키지가 필요하다는 것을 발견했습니다: automake, make, gcc, libpopt-dev, libtool*.

    sudo apt-get update
    sudo apt-get install automake make gcc libpopt-dev libtool
    

    * 적어도 이 패키지는 제가 시도한 것이었고 모두 중요해 보였습니다.

  3. autoreconf -ivf
    
  4. ./configure && make && sudo make install
    
  5. 을(를) 시작할 수 있었지만 redupe도구가 을(를) 찾을 수 없었습니다 libredupe.so.0. 관련 라이브러리가 /usr/local/lib/. 나는 strace redupe이 도구가 여러 위치(예 /usr/lib/: ) 를 확인하지만 /usr/local/lib/. 나는 redupefrom 과 관련된 모든 것을 /usr/local/lib/`/usr/lib/로 옮겼습니다:

    sudo mv /usr/local/lib/libredupe.* /usr/lib/
    
  6. /usr/local/bin/redupe또한 새로 설치된 파일 과 /usr/local/bin/reundupe동일한 일반 파일 도 발견했습니다 . 하나의 일반 파일이면 충분하며 다른 이름은 심볼릭 링크일 수 있습니다.

    (cd /usr/local/bin/ && sudo rm reundupe && sudo ln -s redupe reundupe)
    

내 테스트

  1. 1GiB를 /dev/urandom일반 파일로 파이프했습니다 original.
  2. 파이프를 original통해 redupe결과를 original.rd.
  3. 일부 바이트를 변경하기 위해 파이프를 original.rd통해 tr ab xy결과를 modified.rd.
  4. 나는 확인했고 original.rd다르다 modified.rd(하나는 등을 사용할 수 있다 cmp) md5sum. 1GiB의 무작위 데이터가 없거나 전혀 a없을 가능성은 매우 낮으므로 이 단계는 실제로 필요하지 않습니다.b
  5. 파이프를 modified.rd통해 reundupe결과를 result.
  6. 과 가 동일한 cmp지 ( 로) 확인했습니다 .originalresult

위 절차에서는 여러 일반 파일을 사용합니다. 일반 파일 수가 줄어들면 절차는 다음과 같습니다.

</dev/urandom head -c 1G >original \
&& <original redupe | tr ab xy | reundupe | cmp - original

성공 cmp(오류 없음, 종료 상태 0)은 redupe작동함을 의미합니다. 그것은 나를 위해 작동합니다.

또한 손상이 전혀 없을 때 모든 것이 괜찮은지 확인하기 위해 tr( ) 없이 테스트했습니다 . … | redupe | reundupe | …그것은.


결론, 메모

  • redupe효과는 있지만 만병통치약은 아닙니다. 계속 읽으세요.

  • 를 호출하고 / 옵션 redupe --help을 확인하세요 .-o--overhead

  • reundupe데이터가 수정하기에는 너무 손상된 경우 도구가 인쇄됩니다 error reading input. 약간 오해의 소지가 있으니 주의하세요.

  • 나는 적용 redupe -o 1(약한 중복성), 변경(상대적으로 강력하게) 및 적용 reundupe후에 reundupe. 나는 실제로 버그를 의심하지 않습니다. 우연히 reundupe. OTOH 가끔 비트 뒤집기가 잘 수정되었습니다.

  • 간헐적인 비트 플립(및 바이트 플립)은 문제 없이 수정되었지만 스트림에서 누락되거나 과도한 바이트는 수정되었습니다.치명적인. 이 도구는 이런 종류의 오류를 수정하도록 설계되지 않은 것 같습니다.

  • "내 PC가 어딘가에 문제가 생길까봐 걱정됩니다"라고 쓰셨습니다. redupe이전 에 PC가 엉망이 된 경우 redupe엉망인 스트림을 사용하여 성실하게 처리합니다. 쓰레기가 들어오고 쓰레기가 나옵니다. reundupe원래의 엉망인 스트림을 다시 만듭니다. PC(또는 무엇이든)의 경우정말그 후에 redupe는 비트 플립만 처리하기 때문에 도구가 도움이 되지 않을 가능성이 높습니다.

  • redupe파이프 내부에서 작동하며 이것이 당신이 원했던 것입니다. 하지만 이는 상대적으로 작은 창을 사용하여 데이터를 처리해야 한다는 의미이기도 합니다. 서로 가까운 여러 개의 손상된 바이트는 큰 파일 전체에 흩어져 있는 동일한 수의 손상된 바이트보다 더 나쁩니다.

  • 앞에가 아니라 과 redupe사이에 넣으려고 합니다 . 그러면 백업에서 검색하는 동안 은(는) 이전이 됩니다 . 이를 반대 방향(예: before , before )으로 수행하는 것은 다음과 같은 이유로 결함이 있습니다.gzipawsgzipreundupegunzipredupegzipgunzipreundupe

    • (실질적인 이유) 약간 뒤집으면 gunzip실패하게 됩니다(CRC를 확인합니다reundupe) 데이터가 수정 되지도 않습니다 . 하지만 계속할 수 있다고 해도 gunzip다른 이유가 있습니다. 이는…

    • (이론적 이유) 압축은 패턴, 유사성을 감지하여 작동하므로 중복성을 줄입니다. 중복성을 추가하고 즉시 제거하고 싶지는 않습니다. 실제 데이터의 중복성을 줄이고 의도적인 중복성을 추가하려는 경우보관해라.

  • 지금은 부패가 없을 때 redupe+ 적절하고 확고하게 작동하는 것 같습니다 . reundupe사소한 손상(변경된 바이트)을 복구할 수 있습니다. 분명히 "중복성을 초과"하는 손상은 감지될 수도 있고 감지되지 않을 수도 있습니다 reundupe(귀하의 경우 감지되지 않은 손상은 아마도 gunzip실패할 것입니다). 즉, 이 도구는 좋은 데이터를 손상시키지 않으며 손상된 데이터에서 좋은 데이터를 복구할 수 있는 기회를 제공합니다. 제 생각에는 도구의 순 가치는 확실히 긍정적입니다.

  • 스스로 테스트를 수행하고 그것이 redupe당신에게 좋은지 결정하십시오. 그리고 --overhead당신이 원하는 것; 성과가 수용 가능한지 여부.

관련 정보