2010-06-25 12:29:20 +0000 2010-06-25 12:29:20 +0000
126
126

В чем разница между опциями удаления rsync?

Я вижу на странице rsync man page , что есть несколько вариантов delete, но на самом деле не понимаю различий между ними. Каковы различия между этими вариантами?

--del an alias for --delete-during
 --delete delete extraneous files from dest dirs
 --delete-before receiver deletes before transfer (default)
 --delete-during receiver deletes during xfer, not before
 --delete-delay find deletions during, delete after
 --delete-after receiver deletes after transfer, not before
 --delete-excluded also delete excluded files from dest dirs

Ответы (4)

125
125
125
2010-06-25 14:19:55 +0000
  • --del/--delete_during: Удаляет файлы из целевой директории по мере их копирования (сохраняет память по сравнению с --delete-before: --delete-before делает отдельное сканирование для поиска удаляемых файлов)

  • --delete: Удаляет файлы в целевом каталоге, если они не существуют в исходном каталоге.

  • --delete-before: Удаление файлов в целевой директории перед копированием файла с таким же именем из исходной директории

  • --delete-during: Удалять файлы в целевой директории ПОЛУЧАТЕЛЬНОЕ копирование файла с именем из исходной директории

  • --delete-delay: Пометьте удаление во время передачи, но подождите, пока передача не завершится

  • --delete-after: Получатель удаляет после передачи, а не перед…Если какая-то другая часть rsync переместила лишние файлы в другое место, то вместо --delete-delay вы захотите это, потому что --delete-delay решает, что удалять в середине передачи, в то время как --delete-after проверяет каталог на наличие файлов, которые должны быть удалены ПОСЛЕ того, как все будет завершено.

  • --delete-excluded: Удаляет файлы из целевой директории, которые явно исключены из передачи из исходной директории.

Точкой rsync является не копирование, а архивирование. Это важное различие. Обработка удаленных/измененных файлов критична и во многих случаях имеет нюансы.

Флаг --delete, в частности, это тот, который я много раз видел испорченным. Многие люди используют rsync для перемещения файлов в хранилище с низким приоритетом, и в этом случае вы хотите, чтобы файлы, которые вы перемещаете, оставались EXIST в целевом каталоге. Это не то, что делает удаление: --delete делает так, что когда вы удаляете файл из исходного каталога, он ВСЕГДА удаляется из целевой директории, так что ваша целевая папка не будет переполнена барахлом… Однажды видел, как парень стирает свою резервную копию, вставляя новый диск, а не выключая свой ночной скрипт rsync. Скрипт увидел, что исходный каталог теперь пуст, и удалил все файлы в целевом каталоге, чтобы они совпадали.

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

2
2
2
2013-01-17 18:50:20 +0000

Еще один момент, на который стоит обратить внимание, заключается в том, что если ваш исходный каталог заканчивается на /*, то rsync будет учитывать только those файлы, а не сам каталог (и, следовательно, отсутствие файлов, которые вы хотите удалить по назначению).

Если вы указываете опцию удаления выше, но rsync выглядит так, как будто она не удаляется, то проверьте, что вы случайно не глотаете и не предоставляете список файлов, когда имеете в виду саму директорию.

2
2
2
2010-06-25 12:57:07 +0000

Происходят две вещи:

  1. Кто удаляет
  2. Когда это происходит

Либо отправитель, либо получатель могут быть проинструктированы насчет удаления (я не уверен, почему это имеет значение). Поэтому, когда rsync с одного компьютера подключается к серверу rsync на другой стороне, это определяет, кто фактически выдает команду удаления.

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

0
0
0
2019-12-31 14:32:28 +0000

По умолчанию rsync не удаляет файлы на стороне назначения. Чтобы сделать rsync удалить файлы вообще, необходимо использовать по крайней мере одну из опций удаления.

Если вас не волнует, когда файлы удаляются, просто используйте --delete и оставьте выбор rsync. Вы можете комбинировать --delete с другими опциями удаления (это не конфликтует), но вам не нужно, так как все другие опции удаления уже подразумевают --delete.

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

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

--delete-after работает следующим образом: Сначала синхронизируйте все файлы, затем выполните ту же операцию, что и --delete-before перед фазой синхронизации. Это самый худший выбор в наиболее распространенных случаях, так как он требует большую часть памяти, большую часть дискового пространства в месте назначения, и он медленнее, так как является двухступенчатым процессом; в основном, он сочетает в себе все недостатки двух других методов. Этот вариант в основном существует для случая, когда вы используете “merge files” (что такое файлы слияния и как они работают, выходит за рамки этого ответа). Поскольку эти файлы могут содержать правила для файлов, которые должны быть исключены при удалении, новые объединенные файлы должны быть скопированы перед фазой удаления, если их содержание должно быть учтено на фазе удаления. Если это не является требованием, то --delete-after не имеет никакого преимущества.

--delete-delay - это довольно новая опция (она недоступна в rsync 2.6.9, которая, например, все еще является опцией по умолчанию в macOS 10.15). Она работает как --delete-during, за исключением того, что она не удаляет файлы сразу, а после завершения синхронизации, поэтому она является гибридом --delete-during и --delete-after. Преимущество в том, что она работает быстрее, чем --delete-after, а недостаток в том, что во время синхронизации требуется больше памяти.

--delete-excluded говорит rsync не только удалять файлы, отсутствующие в исходном коде, но и удалять файлы по назначению, которые были исключены из синхронизации (--exclude или --exclude-from), независимо от того, будут ли эти файлы на самом деле существовать в исходном коде или нет.