(при условии Linux), если вы считаете, что поврежден только один блок данных или около того, но размер блока не изменился, вы можете использовать cmp -l
. Он сравнивает побайтово и -l
дает смещение любых различий. Если у вас есть смутное представление о том, с чего начать в файлах, вы можете начать с самого начала -i
. Если у вас есть смещения по ошибке, вы можете использовать их dd skip=...
для удаления исходного файла и dd seek=... conv=notrunc
вставки его в поврежденный файл. (Сначала протестируйте копию)
Патч очень большой двоичный файл через медленное соединение
в целях резервного копирования я передал очень большой двоичный файл по сравнительно медленному соединению в восходящем направлении (передача заняла 2 недели), выполнив его синхронизацию на смонтированном общем ресурсе cifs (чтобы я мог и смог получить к нему доступ по блокам). Через 2 недели rsync показал ошибку (к сожалению, не смог ее сохранить), но размер файла соответствовал.
tail -c 1000000000 myfile.img|md5sum # and head -c 1000000000 myfile.img|md5sum
совпадают, поэтому начало и конец файла идентичны.
Так как мой нисходящий поток намного быстрее, я снова загрузил полный образ и набрал md5 суммы за все это, и они НЕ совпадают. Так что, видимо, где-то в этих 1,5 ТБ есть хотя бы один бит, который отличается.
Есть ли способ, чтобы сгенерировать «патч» из двух загруженных мной файлов, а затем применить его к удаленному файлу, чтобы снова передавались только неправильные блоки?
Пожалуйста, обратите внимание: я НЕ имею права удаленно выполнять код или использовать возможности rsync, которые требуют удаленного запуска rsync. Я думаю, что я все еще мог бы использовать rsync, и он работает в порядке величины моей скорости загрузки, но мне интересно, есть ли лучший способ использовать тот факт, что у меня есть обе версии локально. Вероятно, было бы не так сложно что-то написать, но я бы предпочел использовать что-то проверенное и сохранить работу.
2 ответа на вопрос
Я бы использовал BitTorrent для восстановления файла на удаленной стороне. Протокол делит файл на маленькие блоки и автоматически повторно загружает блоки, хеши которых не соответствуют начальному файлу.
Чтобы заставить его работать в приватной обстановке:
- Отключите DHT на локальных и удаленных бит-торрент-клиентах.
- Откройте локальные бит-торрент-порты на брандмауэре или настройте переадресацию портов SSH.
- Создайте начальный файл на стороне источника. Не используйте трекер. Убедитесь, что клиент также начал заполнять файл.
- Сделайте резервную копию файла на удаленной стороне.
- Скопируйте начальный файл на удаленную сторону и откройте его с помощью клиента.
- Укажите местоположение загрузки для поврежденного файла и выберите опцию, чтобы не начать загрузку ! Также отключите параметры для подключения к DHT, обмена пирами и т. Д., Если avaialbe.
- Попросите клиента перепроверить загруженный файл. Следует сообщить процент загрузки, который почти завершен.
- Добавьте локальный клиент в качестве пира к загрузке
- Начать загрузку
Похожие вопросы
-
2
Какие файлы должны быть скопированы, чтобы сделать загрузочный резервный диск для OS X?
-
5
Какой смысл режима ASCII в FTP?
-
14
Какой самый быстрый способ передачи файлов между двумя компьютерами?
-
-
13
Сколько времени займет передача 1 ТБ через USB 2.0?
-
9
Есть ли в Windows 7 программа копирования очереди?
-
5
Что может ограничить скорость передачи данных в NAS?
-
14
лучший способ перемещения файлов на DOS-машину?
-
5
Как автоматически переместить файл на другой компьютер в сети?
-
2
Почему я не могу скопировать все файлы в корень SD-карты?
-
10
Копирование всего содержимого одного компьютера на другой