Прерывая rsync с помощью ctrl-c, я должен использовать `--partial` или` --append`?

14

Я хотел бы прервать rsyncс ctrl-c(скажем , после того, как половина файла перечисляется) и возобновить без необходимости повторно отправить данные , которые уже были переданы.

Найденная мной информация об обмене стеками / Google кажется противоречивой. Я нашел, что некоторые говорят, что используют, --partialа некоторые говорят, что используют --append. Для меня это звучит так, как будто они оба будут работать.

Если я хочу прервать rsync с помощью ctrl-c, я должен использовать --partialили --append?

Если оба будут работать, когда лучше использовать один против другого?

Тревор Бойд Смит
источник

Ответы:

8

Для перезапуска --partialдостаточно. Используйте, --inplaceесли вы действительно не хотите rsyncсоздавать временный файл, который объединяет существующие скопированные данные и новые, например, если rsyncбудут проблемы с разрешениями при создании временного файла в целевой папке.

Используйте только в том --appendслучае, если вы можете гарантировать, что частично скопированные данные все еще идентичны источнику. (Обычно это ложная оптимизация.)

roaima
источник
1
поэтому, когда я использую описанные выше параметры (фактически используя --append-verify) и rsync по- прежнему утверждает, что он начинается с начала, и я не вижу никаких изменений в размере файла, а оставшееся время файла соответствует первоначальному Когда я начал копировать, rsync лжет, или я должен волноваться?
Майкл
@ Майкл, если у вас есть местный источник и пункт назначения, все правила меняются.
Ройма
Я делал это через локальную сеть, но после нескольких экспериментов выясняется, что проблема заключается в том, что, поскольку на --append-verifyсамом деле приходится читать части файла с обеих сторон, они не быстрее из-за узкого места будучи более старым диском на стороне чтения, а не самой локальной сетью.
Майкл
@ Майкл, ну да, если вы попросили проверить уже переданные данные, он должен прочитать данные!
Ройма
1
@alper Я никогда раньше не замечал такой возможности. Похоже, было бы лучше использовать --partial-dir, но я еще не пробовал.
Ройма
3
  • --append Предполагается, что файл может уже существовать в месте назначения, просто rsync не проверяет содержимое там (но см. ниже).
  • --partial говорит rsync не удалять частично переданные файлы.

Вам также нужно --inplaceс --partial(это подразумевается --append).

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

spuk
источник
Если я хочу прервать rsync с помощью Ctrl-C, я бы использовал --append? Потому что --partialсамо по себе не возобновит.
Тревор Бойд Смит
Я бы использовал просто --inplace. rsync «всегда возобновляет» (пытается передать минимально необходимые данные). Что --appendговорит rsync - не проверять контрольную сумму данных, уже находящихся в месте назначения, поэтому, если неполный файл в месте назначения был поврежден, он останется поврежденным --append. --appendЭто может быть интересно, если, скажем, частичный файл очень большой, и вы не можете ждать (и уверены, что его не волнует, если он поврежден), или какая-то другая конкретная ситуация.
spuk
1
на Fedora 20 man rsyncвариант --appendговорит... Implies --inplace
Тревор Бойд Смит
1
--inplaceбуду работать. --appendбудет работать, потому что (как я уже говорил в ответе) это подразумевает --inplace, что подразумевает --partial(что сохранит частично переданные файлы при прерывании с помощью Ctrl-c, что и было первоначальным вопросом) Так что --appendзначит «делай как --inplace, но не проверяй сумму того, что уже находится в пункте назначения . Это важное различие. Если тебя это не волнует, используй тоже»
spuk
1
так в чем же смысл --partial БЕЗ --inplace
Эван Кэрролл