Возобновить передачу одного файла с помощью rsync

22

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

Я пытался использовать опцию --partial или --inplace, но вместе с --progress я обнаружил, что rsync с --partial или --inplace фактически начинается с начала, а не с того, что было оставлено в прошлый раз. Ранняя остановка rsync и проверка размера полученного файла вручную также подтверждают то, что я нашел.

Но с --append rsync запускается с того, что осталось в прошлый раз.

Я запутался, когда увидел на странице справочника --partial, --inplace или --append, похоже, что это связано с возобновлением копирования с того, что осталось в прошлый раз. Может кто-нибудь объяснить разницу? Почему --partial или --inplace не работают для возобновления копирования? Правда ли, что для возобновления копирования rsync должен работать с параметром --append?

Также, если частичный файл был оставлен mv или cp, а не rsync, будет ли rsync --append правильно?

Спасибо и всего наилучшего!

Тим
источник
Мое понимание того, как работает rsync, ограничено, но я отвечу на последний вопрос. Если cp не завершен, rsync должен возобновить копирование. Я полагаю, что rsync хэширует файлы таким образом, чтобы начальная часть файла была одинаковой, и копировала оставшуюся часть файла.
Скотт МакКленнинг

Ответы:

25

Глядя на некоторые страницы для rsync:

--append
Это приводит к тому, что rsync обновляет файл, добавляя данные в конец файла, что предполагает, что данные, которые уже существуют на принимающей стороне, идентичны началу файла на отправляющей стороне.

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

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

Похоже, если файл очень большой, вы хотели бы использовать --partial --append. ( --appendподразумевается --inplace) Если этот большой файл изменится, то удалите --appendи rsync проверит начало файла, чтобы убедиться, что он тоже совпадает с исходным файлом. --inplaceдля меня звучит опасно, за исключением того, что если вы выполняете rsyncing большой файл, вы не хотите, чтобы rsync создал новый временный файл начальной части, продолжите передачу, а затем удалите старый файл, чтобы поместить новый файл на место. Передача прошла бы быстрее, если бы вы могли использовать тот же файл, не говоря уже о том, что дисковое пространство, необходимое для передачи, было бы меньше.

Кроме того, с точки зрения передачи файлов я обнаружил, что копия работает быстрее, чем rsync. Однако, если мне нужно было обновить файл, я rsync синхронизировал файл быстрее, чем повторная передача всего файла снова. (как я уже говорил выше) Rsync должен быть в состоянии возобновить работу с cp.

Надеюсь, это поможет.

Скотт МакКленнинг
источник
1
Возможно, вы захотите взглянуть на этот отчет об ошибке: lists.samba.org/archive/rsync/2012-June/027615.html
Стефан Шмидт
Хорошее замечание об использовании более быстрого cp по умолчанию и rsync для «восстановления» сломанного процесса cp! Аккуратный :)
Самуэль Лампа