Прежде всего, что касается части «возобновить» вашего вопроса, --partial
просто указывает принимающей стороне сохранять частично переданные файлы, если отправляющая сторона исчезает, как если бы они были полностью перенесены.
При передаче файлов они временно сохраняются как скрытые файлы в их целевых папках (например .TheFileYouAreSending.lRWzDC
) или в специально выбранной папке, если вы установили --partial-dir
переключатель. Если передача не удалась и --partial
не установлена, этот скрытый файл останется в целевой папке под этим загадочным именем, но если --partial
он задан, файл будет переименован в фактическое имя целевого файла (в данном случае, TheFileYouAreSending
), даже если файл не завершено Дело в том , что вы можете позже закончить передачу, запустив Rsync снова либо --append
или --append-verify
.
Таким образом, само по себе--partial
не возобновляет неудачный или отмененный перевод. Чтобы возобновить его, вы должны будете использовать один из вышеупомянутых флагов при следующем запуске. Итак, если вам нужно убедиться, что цель никогда не будет содержать файлы, которые кажутся нормальными, но на самом деле неполными, вам не следует использовать . И наоборот, если вы хотите убедиться, что никогда не оставляете за бортом сбойные файлы, которые скрыты в целевом каталоге, и вы знаете, что сможете завершить передачу позже, это поможет вам.--partial
--partial
Что касается --append
упомянутого выше переключателя, это фактический переключатель «возобновить», и вы можете использовать его независимо от того, используете ли вы его или нет --partial
. На самом деле, когда вы используете --append
, никакие временные файлы никогда не создаются. Файлы пишутся прямо на их цели. В этом отношении --append
дает тот же результат, что и --partial
при неудачной передаче, но без создания этих скрытых временных файлов.
Итак, если подвести итог, если вы перемещаете большие файлы и хотите, чтобы опция возобновления отмененной или неудачной операции rsync возобновилась с той точки, которая rsync
остановилась, вам необходимо использовать --append
или --append-verify
переключаться при следующей попытке.
Как указывает @Alex ниже, поскольку в версии 3.0.0 rsync
появилась новая опция --append-verify
, которая ведет себя так --append
же, как и до появления этого переключателя. Вы, вероятно, всегда хотите поведение --append-verify
, поэтому проверьте свою версию с rsync --version
. Если вы работаете на Mac и не используете rsync
from homebrew
, у вас (по крайней мере, до El Capitan, включая El Capitan) будет более старая версия, и вам нужно будет использовать ее --append
вместо --append-verify
. Почему они не сохранили поведение --append
и вместо этого назвали новичка, --append-no-verify
немного озадачивает. В любом случае, --append
на rsync
перед тем версии 3 такая же , как --append-verify
на более новых версиях.
--append-verify
не опасно: он всегда будет читать и сравнивать данные на обоих концах, а не просто предполагать, что они равны. Это делается с использованием контрольных сумм, поэтому в сети это легко, но для этого требуется чтение общего объема данных на обоих концах канала, прежде чем он сможет фактически возобновить передачу, добавив к цели.
Во-вторых, вы сказали, что «слышали, что rsync может находить различия между источником и местом назначения и, следовательно, просто копировать различия».
Это правильно, и это называется дельта-переносом, но это совсем другое. Чтобы включить это, вы добавляете -c
, или --checksum
переключатель. Как только этот ключ используется, rsync проверит файлы, которые существуют на обоих концах провода. Он делает это порциями, сравнивает контрольные суммы на обоих концах и, если они различаются, передает только разные части файла. Но, как указывает @Jonathan ниже, сравнение выполняется только тогда, когда файлы имеют одинаковый размер на обоих концах - разные размеры заставят rsync загрузить весь файл, перезаписав цель с тем же именем.
Первоначально это требует немного вычислений на обоих концах, но может быть чрезвычайно эффективным при снижении сетевой нагрузки, если, например, вы часто выполняете резервное копирование очень больших файлов, файлов фиксированного размера, которые часто содержат незначительные изменения. В качестве примера можно привести файлы образов виртуальных жестких дисков, используемые на виртуальных машинах, или целевые объекты iSCSI.
Примечательно, что если вы используете --checksum
для передачи пакет файлов, которые являются совершенно новыми для целевой системы, rsync все равно вычислит их контрольные суммы в исходной системе перед их передачей. Почему я не знаю :)
Итак, вкратце:
Если вы часто используете Rsync просто «переместить вещи из пункта А в пункт Б» и хотите возможность отменить эту операцию и позже возобновить его, не использовать --checksum
, но действительно использовать --append-verify
.
Если вы используете rsync для частого резервного копирования, использование, --append-verify
вероятно, мало что даст для вас, если только вы не привыкли посылать большие файлы, которые постоянно увеличиваются в размере, но редко изменяются после записи. В качестве дополнительного совета, если вы выполняете резервное копирование в хранилище, поддерживающее моментальные снимки, такие как btrfs
или zfs
, добавление --inplace
переключателя поможет вам уменьшить размеры снимков, поскольку измененные файлы не воссоздаются, а измененные блоки записываются непосредственно поверх старых. Этот переключатель также полезен, если вы хотите избежать rsync создания копий файлов на цели, когда произошли только незначительные изменения.
При использовании --append-verify
rsync будет вести себя так же, как и во всех файлах одинакового размера. Если они различаются по модификации или другим временным меткам, он перезаписывает целевой объект источником без дальнейшей проверки этих файлов. --checksum
будет сравнивать содержимое (контрольные суммы) каждой пары файлов одинакового имени и размера.
ОБНОВЛЕНО 2015-09-01 Изменено в соответствии с замечаниями, сделанными @Alex (спасибо!)
ОБНОВЛЕНО 2017-07-14 Изменено в соответствии с замечаниями @Jonathan (спасибо!)