느린 연결을 통해 매우 큰 바이너리 파일 패치

느린 연결을 통해 매우 큰 바이너리 파일 패치

백업 목적으로 매우 큰 바이너리 파일을 마운트된 cifs-share에서 재동기화하여 비교적 업스트림 방식의 느린 연결(전송에 2주 소요)을 통해 전송했습니다(그래서 블록 단위로 액세스할 수 있고 액세스할 수 있습니다). 2주 후 rsync에 오류가 표시되었지만(안타깝게도 저장할 수 없음) 파일 크기가 일치했습니다.또한

tail -c 1000000000 myfile.img|md5sum # and
head -c 1000000000 myfile.img|md5sum

일치하므로 파일의 시작과 끝이 동일합니다.

내 다운스트림이 훨씬 빠르기 때문에 전체 이미지를 다시 다운로드하고 전체에 대해 md5 합계를 계산했는데 일치하지 않습니다. 따라서 분명히 1.5TB 어딘가에는 적어도 한 비트가 다릅니다.

다운로드한 두 파일에서 "패치"를 생성한 다음 이를 원격 파일에 적용하여 잘못된 블록만 다시 전송되도록 하는 방법이 있습니까?

다시 한 번 참고하십시오: 저는 원격으로 코드를 실행하거나 rsync를 원격으로 실행해야 하는 rsync 기능을 사용할 권한이 없습니다. 여전히 rsync를 사용할 수 있고 다운로드 속도의 크기 순서대로 작동하지만 로컬에 두 버전이 모두 있다는 사실을 활용하는 더 좋은 방법이 있는지 궁금합니다. 무언가를 작성하는 것은 그리 어렵지 않을 것입니다. 그러나 테스트된 것을 사용하고 작업을 저장하는 것을 선호합니다.

답변1

(Linux를 가정) 손상된 데이터 블록이 있다고 생각하지만 블록 크기는 변경되지 않은 경우 cmp -l. 바이트 단위로 비교하고 -l차이가 있는 경우 오프셋을 제공합니다. 파일 내에서 시작할 위치에 대한 모호한 아이디어가 있는 경우 -i. 오프셋에 오류가 있는 경우 dd skip=...원본 파일에서 해당 오프셋을 잘라낸 다음 dd seek=... conv=notrunc깨진 파일에 붙여넣는 데 사용할 수 있습니다 . (먼저 사본에서 테스트)

답변2

BitTorrent를 사용하여 원격 측에서 파일을 복구하겠습니다. 프로토콜은 파일을 작은 블록으로 나누고 해시가 시드 파일과 일치하지 않는 블록을 자동으로 다시 다운로드합니다.

비공개 환경에서 작동하게 하려면 다음을 수행하세요.

  1. 로컬 및 원격 비트 토렌트 클라이언트에서 DHT를 비활성화합니다.
  2. 방화벽에서 로컬 비트 토렌트 포트를 열거나 SSH 포트 전달을 설정하세요.
  3. 소스 측에 시드 파일을 만듭니다. 추적기를 사용하지 마십시오. 클라이언트도 파일 시드를 시작하는지 확인하십시오.
  4. 원격 측의 파일을 백업하십시오.
  5. 시드 파일을 원격 측에 복사하고 클라이언트에서 엽니다.
  6. 다운로드 위치를 손상된 파일로 지정하고 다음 옵션을 선택하세요.다운로드를 시작하지 마세요!! 또한 사용 가능한 경우 DHT, 피어 교환 등에 연결하는 옵션을 비활성화합니다.
  7. 클라이언트에게 다운로드한 파일을 다시 확인하도록 요청하세요. 거의 완료된 다운로드 비율이 보고되어야 합니다.
  8. 다운로드에 로컬 클라이언트를 피어로 추가
  9. 다운로드 시작

관련 정보