в целях резервного копирования я передал очень большой двоичный файл по сравнительно медленному соединению в восходящем направлении (передача заняла 2 недели), выполнив его синхронизацию на смонтированном общем ресурсе cifs (чтобы я мог и смог получить к нему доступ по блоку). Через 2 недели rsync показал ошибку (к сожалению, не смог ее сохранить), но размер файла соответствовал.Также

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

совпадают, поэтому начало и конец файла идентичны.

Так как мой нисходящий поток намного быстрее, я снова загрузил полный образ и набрал md5 суммы за все это, и они НЕ совпадают. Так что, видимо, где-то в этих 1,5 ТБ есть хотя бы один бит, который отличается.

Есть ли способ, чтобы сгенерировать "патч" из двух загруженных мной файлов, а затем применить его к удаленному файлу, чтобы снова передавались только неправильные блоки?

Пожалуйста, обратите внимание: у меня нет полномочий удаленно выполнять код или использовать возможности rsync, которые требуют удаленного запуска rsync. Я думаю, что я все еще мог бы использовать rsync, и он работает в порядке величины моей скорости загрузки, но мне интересно, есть ли лучший способ использовать тот факт, что у меня есть обе версии локально. Вероятно, было бы не так сложно что-то написать, но я бы предпочел использовать что-то проверенное и сохранить работу.

2 ответа2

1

(предполагая Linux), если вы считаете, что поврежден только один блок данных или около того, но размер блока не изменился, вы можете использовать cmp -l . Он сравнивает побайтово и с -l дает смещение любых различий. Если у вас есть смутное представление о том, с чего начать в файлах, вы можете начать с -i . Если у вас есть смещения по ошибке, вы можете использовать dd skip=... чтобы извлечь это из исходного файла, и dd seek=... conv=notrunc чтобы вставить его в поврежденный файл. (Сначала протестируйте копию)

0

Я бы использовал BitTorrent для восстановления файла на удаленной стороне. Протокол делит файл на маленькие блоки и автоматически повторно загружает блоки, хеши которых не соответствуют начальному файлу.

Чтобы заставить его работать в приватной обстановке:

  1. Отключите DHT на локальных и удаленных бит-торрент-клиентах.
  2. Откройте локальные бит-торрент-порты на брандмауэре или настройте переадресацию портов SSH.
  3. Создайте начальный файл на стороне источника. Не используйте трекер. Убедитесь, что клиент также начал заполнять файл.
  4. Сделайте резервную копию файла на удаленной стороне.
  5. Скопируйте начальный файл на удаленную сторону и откройте его с помощью клиента.
  6. Укажите местоположение загрузки для поврежденного файла и выберите опцию, чтобы не начать загрузку ! Также отключите параметры для подключения к DHT, обмена пирами и т.д., Если avaialbe.
  7. Попросите клиента перепроверить загруженный файл. Следует сообщить процент загрузки, который почти завершен.
  8. Добавьте локальный клиент в качестве пира к загрузке
  9. Начать загрузку

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .