LINUX.ORG.RU

Синхронизация большого файла с помощью rsync

 


0

5

На удаленном сервере есть файл архива на несколько терабайт, с одним файлом внутри. На локальном сервере есть его копия которая «срезалась» с поврежденного диска, на котором этот архив приехал с удаленного сервера, т.е. файл имеет пустые/дефектные участки внутри файла(архив не проходит тестирование). Возможно ли с помощью rsync «докачать» файл в режиме приведения его к исходному состоянию, т.е. чтобы влились в поврежденный файл недостающие куски с файла на удаленном сервере? Пробовал разные ключи -acvP, почему-то файл начинает перекачиваться заново целиком, а мне это не нужно ибо неделю ждать.

rsync -acvP rsync://10.254.100.1/trans/1.zip /home/1.zip

Размер, имя и удаленного файла и локального совпадают.

Либо есть какие-то иные механизмы докачки такого рода файлов?


На удалённом сервере сгенерировать .torrent для этого файла и встать на раздачу.

На локалхосте добавить его в torrent-клиент и указать существующий файл в качестве пути.

Torrent-клиент проверит целостность фрагментов и перекачает повреждённые.

wandrien ★★★
()
Последнее исправление: wandrien (всего исправлений: 1)

Пробовал разные ключи -acvP, почему-то файл начинает перекачиваться заново целиком, а мне это не нужно ибо неделю ждать.

А как это проявляется? По-умолчанию rsync создаёт новый файл и пишет в него данные из старого локального и из нового с сервера. Причём по медленном интернете хорошо видно, когда подтягиваются данные из сети. Когда известно, что файлы идентичны, просто локальный содержит пробелы, то можно воспользоваться параметром --inplace, чтобы rsync записывал сразу же в существующий локальный файл. Это эффективнее, но и опаснее, когда сначала экспериментируешь.

gag ★★★★★
()

Если не известно, какие именно части файла битые, то всё равно читать весь файл, что бы понять это.

Можно попробовать магию — создать там, где файл цел, суммы par2, передать только их и попробовать восстановить битый файл. Но это надо знать, какой процент файла повреждён. Ну и par2 будет долго пыхтеть. (Вроде есть варианты par2, поддерживающие многопроцессорность, не пробовал.)

Ну а так да, как уже предложили, через торрент. Или писать свой инструмент, что бы считал контрольные суммы для частей файла, а потом на основе этого передать целые блоки на место битых.

greenman ★★★★★
()
Последнее исправление: greenman (всего исправлений: 2)
Ответ на: комментарий от greenman

По сети. Ну ты просто делаешь rsync с одной машины и он автоматически запустит на удаленной свой сервер (rsync --server).

https://ru.wikipedia.org/wiki/Rsync#Алгоритм
Тут бегло алгоритм описан. В английской версии детальней.

urxvt ★★★★★
()

Именно это и делает rsync. Разделяет файл на чанки, делает чексуммы с них локально и удалённо и пересылает битый чанк.

Я таким образом на медленном интернете битые dvd iso-образы с дистрибутивами ~ 20 лет назад. В конце rsync покажет, сколько он скачал и передал, будут копейки.

Dimez ★★★★★
()