Раньше я rsync
копировал большое количество файлов, но моя ОС (Ubuntu) перезапустилась неожиданно.
После перезагрузки я rsync
снова запустился , но из вывода на терминале я обнаружил, что rsync
все еще копировал те, что уже копировали ранее. Но я слышал, что rsync
способен найти различия между источником и местом назначения, и, следовательно, просто скопировать различия. Так что мне интересно в моем случае, rsync
может ли возобновить то, что осталось в прошлый раз?
sudo rsync -azvv /home/path/folder1/ /home/path/folder2
. (3) Источник и цель - NTFS, источник покупки - внешний жесткий диск, а цель - внутренний жесткий диск. (3) Сейчас он работает и еще не закончен.--modify-window
опция помогает в этом).Ответы:
Прежде всего, что касается части «возобновить» вашего вопроса,
--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
fromhomebrew
, у вас (по крайней мере, до 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 (спасибо!)
источник
--partial
что достаточно.--partial-dir
- похоже, это идеальная пуля для этого. Я, возможно, что-то упустил полностью;)--partial
: rsync копирует файл во временное имя, соединение прерывается, удаленный rsync в конечном итоге перемещает этот файл к обычному имени и завершает работу, а затем при повторном запуске с--partial
и без--append
, новый временный файл инициализируется копией частично переданного удаленного файла, затем копия продолжается с того места, где прервалось соединение. (Ubuntu 14.04 / rsync 3.1)--checksum
? В соответствии с этимman
он больше связан с решением, какие файлы пометить для передачи, чем с дельта-передачей (что, по-видимому, являетсяrsync
поведением по умолчанию).TL; DR:
Просто укажите частичный каталог, так как справочные страницы rsync рекомендуют:
Более длинное объяснение:
На самом деле для этого есть встроенная функция
--partial-dir
, которая имеет несколько преимуществ по сравнению с--partial
и--append-verify
/--append
альтернативой.Выдержка из справочных страниц по rsync:
По умолчанию rsync использует случайное временное имя файла, которое удаляется при сбое передачи. Как уже упоминалось, с помощью
--partial
rsync вы можете сохранить неполный файл, как если бы он был успешно передан , чтобы впоследствии можно было добавить его, используя параметры--append-verify
/--append
. Однако есть несколько причин, по которым это неоптимально.Ваши файлы резервных копий могут быть неполными, и без проверки удаленного файла, который все еще должен оставаться неизменным, узнать это невозможно.
Если вы пытаетесь использовать
--backup
и--backup-dir
, вы только что добавили новую версию этого файла, которая никогда ранее не существовала в вашей истории версий.Однако, если мы используем
--partial-dir
, rsync сохранит временный частичный файл и возобновит загрузку с использованием этого частичного файла при следующем его запуске, и мы не будем страдать от вышеуказанных проблем.источник
Вы можете добавить
-P
опцию к вашей команде.Со
man
страницы:Так что вместо:
Делать:
Конечно, если вы не хотите обновления прогресса, вы можете просто использовать
--partial
, то есть:источник
rsync
. Однако важно подчеркнуть, что--partial
это само по себе не возобновляет неудачную передачу. Подробности смотрите в моем ответе :)-P
достаточно в моем случае. Версии: клиент имеет 3.1.0, а сервер имеет 3.1.1. Я прервал передачу одного большого файла с помощью Ctrl-C. Я думаю, что я что-то упустилvv
? т.е.v
использовали 2 раза?-azvvP
?Я думаю, что вы принудительно звоните,
rsync
и, следовательно, все данные загружаются при повторном вызове. используйте--progress
опцию, чтобы копировать только те файлы, которые не были скопированы, и--delete
опцию, чтобы удалить любые файлы, если они уже скопированы, и теперь их нет в исходной папке ...Если вы используете ssh для входа в другую систему и копирования файлов,
дайте мне знать, если есть какая-то ошибка в моем понимании этой концепции ...
источник
--delete
удалит файлы в месте назначения, которые не существуют в источнике. Менее серьезным является то, что--progress
это не меняет способ копирования; он просто дает вам отчет о проделанной работе по каждому файлу при копировании. (Я исправил серьезную ошибку; заменил ее на--remove-source-files
.)Я использую этот простой скрипт. Не стесняйтесь настраивать определенные флаги и / или параметризировать его.
источник
Прибыв поздно, но у меня был тот же вопрос, и я нашел другой ответ.
--partial
Флаг ( «держать частично переданные файлы» вrsync -h
) полезен для больших файлов, как--append
( «добавить данные на более короткие файлы»), но речь идет о большом количестве файлов.Чтобы избежать файлов, которые уже были скопированы, используйте
-u
(или--update
: «пропустите файлы, которые новее на приемнике»).источник