Rsync: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
 
(не показано 11 промежуточных версий этого же участника)
Строка 1: Строка 1:
[[Категория:duplicity]]
 
 
[[Категория:backup]]
 
[[Категория:backup]]
[[Категория:ssh]]
+
[[Категория:SSH]]
[[Категория:rsync]]
 
 
[[Категория:rsync]]
 
[[Категория:rsync]]
 
[[Категория:Linux]]
 
[[Категория:Linux]]
Строка 129: Строка 127:
   
 
<code>rsync -av 2021 user@10.10.20.15:/home/user/</code>
 
<code>rsync -av 2021 user@10.10.20.15:/home/user/</code>
  +
<BR>
 
Важно указывать полный путь на удаленном сервере, иначе rsync попытается скопировать каталог «2021» в корень удаленного сервера.<BR>
 
Важно указывать полный путь на удаленном сервере, иначе rsync попытается скопировать каталог «2021» в корень удаленного сервера.<BR>
 
Еще важно указывать полный путь до удаленного сервера, так как, к примеру, копируя файл «file.txt» на сервер указав путь /home/user/somedir, каталог somedir не будет создан, вместо этого файл file.txt скопируется на сервер под именем somedir. Чтобы избежать этого используйте путь полный путь /home/user/somedir/.
 
Еще важно указывать полный путь до удаленного сервера, так как, к примеру, копируя файл «file.txt» на сервер указав путь /home/user/somedir, каталог somedir не будет создан, вместо этого файл file.txt скопируется на сервер под именем somedir. Чтобы избежать этого используйте путь полный путь /home/user/somedir/.
Строка 141: Строка 140:
 
В данном примере мы копируем файл filefromsrv в каталог, в котором находимся.
 
В данном примере мы копируем файл filefromsrv в каталог, в котором находимся.
 
<BR>
 
<BR>
===Как указать другой порт ssh и ключ?===
+
==Как указать другой порт ssh и ключ?==
   
 
С помощью опции -e (она же —rsh). Вот как скопировать файл с компьютера на сервер у которого не стандартный ssh порт:
 
С помощью опции -e (она же —rsh). Вот как скопировать файл с компьютера на сервер у которого не стандартный ssh порт:
Строка 164: Строка 163:
 
Пример команды:
 
Пример команды:
   
<code>rsync -av ./filefromsrv srv:/home/user/somedir/<c/ode>
+
<code>rsync -av ./filefromsrv srv:/home/user/somedir/</code>
   
Я хочу видеть прогресс копирования/синхронизации
+
==прогресс копирования/синхронизации==
   
 
Стоит иметь в виду, что по умолчанию rsync копирует файлы без какого-либо вывода.
 
Стоит иметь в виду, что по умолчанию rsync копирует файлы без какого-либо вывода.
  +
<BR>
 
ключ -v для того, чтобы видеть какие файлы были скопированы и получить некий отчет о проделанных действиях.
   
  +
<BR>
В примерах выше я использую ключ -v для того, чтобы видеть какие файлы были скопированы и получить некий отчет о проделанных действиях. Вот пример:
 
  +
Вот пример:
 
  +
<PRE>
 
rsync -av ./somedir user@10.10.20.15:/home/leo/
 
rsync -av ./somedir user@10.10.20.15:/home/leo/
 
sending incremental file list
 
sending incremental file list
Строка 180: Строка 182:
 
sent 1,996,838 bytes received 58 bytes 3,993,792.00 bytes/sec
 
sent 1,996,838 bytes received 58 bytes 3,993,792.00 bytes/sec
 
total size is 2,041,319 speedup is 1.02
 
total size is 2,041,319 speedup is 1.02
  +
</PRE>
Если мы хотим видеть наиболее интересный вывод, то нам в этом поможет ключ —progress. Вот пример:
 
  +
ключ —progress.
 
  +
Вот пример:
  +
<PRE>
 
rsync -aP ./somedir user@10.10.20.15:/home/user/
 
rsync -aP ./somedir user@10.10.20.15:/home/user/
 
sending incremental file list
 
sending incremental file list
Строка 189: Строка 193:
 
somedir/Screenshot from 2021-01-24 02-17-17.png
 
somedir/Screenshot from 2021-01-24 02-17-17.png
 
1,847,028 100% 21.22MB/s 0:00:00 (xfr#2, to-chk=0/3)
 
1,847,028 100% 21.22MB/s 0:00:00 (xfr#2, to-chk=0/3)
  +
</PRE>
 
Некоторые могут советовать ключ -P, но имейте в виду, -P включает в себя ключ —partial и —progress одновременно (что в целом не так страшно).
 
Некоторые могут советовать ключ -P, но имейте в виду, -P включает в себя ключ —partial и —progress одновременно (что в целом не так страшно).
   
Как ограничить скорость передачи файлов?
+
==Как ограничить скорость передачи файлов==
   
 
Нужно указать опцию —bwlimit=SPEED, где SPEED это скорость в Кбайт в секунду:
 
Нужно указать опцию —bwlimit=SPEED, где SPEED это скорость в Кбайт в секунду:
  +
<BR>
 
rsync -avP --bwlimit=100 ./somedir user@10.10.20.15:/home/leo/
+
<code>rsync -avP --bwlimit=100 ./somedir user@10.10.20.15:/home/leo/</code>
  +
<BR>
 
Полезно бывает на слабом интернете с большими файлами.
 
Полезно бывает на слабом интернете с большими файлами.
   
Строка 203: Строка 209:
 
резервную копию домашней директории на linux мы не ходим копировать разный кеш или содержимое корзины.
 
резервную копию домашней директории на linux мы не ходим копировать разный кеш или содержимое корзины.
   
==исключить две директории==
+
===исключить две директории===
   
rsync -av --exclude={'user/.local/share/Trash','user/.cache'} /home/user user@10.10.20.15:/home/user/bkp/
+
<code>rsync -av --exclude={'user/.local/share/Trash','user/.cache'} /home/user user@10.10.20.15:/home/user/bkp/</code>
   
 
===исключить одну директорию===
 
===исключить одну директорию===
   
rsync -av --exclude=.git /var/www/site user@10.10.20.15:/home/user/bkp/
+
<code>rsync -av --exclude=.git /var/www/site user@10.10.20.15:/home/user/bkp/</code>
   
 
===исключить файлы с определенным расширением===
 
===исключить файлы с определенным расширением===
   
rsync -av --exclude="*.tmp" /var/www/site user@10.10.20.15:/home/user/bkp/
+
<code>rsync -av --exclude="*.tmp" /var/www/site user@10.10.20.15:/home/user/bkp/</code>
   
 
Саму опцию мы можем использовать несколько раз:
 
Саму опцию мы можем использовать несколько раз:
   
rsync -av --exclude="*.tmp" --exclude="tmp/*" --exclude="*~" /var/www/site user@10.10.20.15:/home/user/bkp/
+
<code>rsync -av --exclude="*.tmp" --exclude="tmp/*" --exclude="*~" /var/www/site user@10.10.20.15:/home/user/bkp/</code>
   
 
===копирования определенного типа файлов —include===
 
===копирования определенного типа файлов —include===
Строка 225: Строка 231:
 
все файлы с расширением .sql
 
все файлы с расширением .sql
   
rsync -av --exclude="*.sql" ./projectname user@10.10.20.15:/home/user/sqlbkp/
+
<code>rsync -av --exclude="*.sql" ./projectname user@10.10.20.15:/home/user/sqlbkp/</code>
   
===Исключения с помощью .rsync-filter===
+
===Исключения с помощью <code>.rsync-filter</code>===
   
 
Для более гибкой настройки копирования (в случае регулярного копирования это будет очень полезно) все исключения/включения можно оформить в файле .rsync-filter (это появилось в более поздних версиях rsync).
 
Для более гибкой настройки копирования (в случае регулярного копирования это будет очень полезно) все исключения/включения можно оформить в файле .rsync-filter (это появилось в более поздних версиях rsync).
Строка 263: Строка 269:
   
 
=Другие полезные опции=
 
=Другие полезные опции=
  +
==<code>—delete / —delete-after / —del (—delete_during)</code>==
 
—delete / —delete-after / —del (—delete_during)
+
<code>—delete / —delete-after / —del (—delete_during)</code>
  +
<BR>
 
 
Если мы делаем ежедневные резервные копии и не хотим засорять удаленный сервер лишними файлами (которых уже нет в источнике), то мы можем использовать опцию —delete:
 
Если мы делаем ежедневные резервные копии и не хотим засорять удаленный сервер лишними файлами (которых уже нет в источнике), то мы можем использовать опцию —delete:
   
rsync -avz -e "ssh -p 2013" --delete ./somedir bkp@10.10.20.7:/home/bkp/
+
<code>rsync -avz -e "ssh -p 2013" --delete ./somedir bkp@10.10.20.7:/home/bkp/</code>
  +
<BR>
 
В результате будет удален файл, которого больше нет в директории источника (в somedir):
 
В результате будет удален файл, которого больше нет в директории источника (в somedir):
  +
<PRE>
 
 
rsync -avz -e "ssh -p 2013" --delete ./somedir bkp@10.10.20.7:/home/bkp/
 
rsync -avz -e "ssh -p 2013" --delete ./somedir bkp@10.10.20.7:/home/bkp/
 
bkp@10.10.20.7's password:
 
bkp@10.10.20.7's password:
Строка 279: Строка 286:
 
sent 159 bytes received 77 bytes 67.43 bytes/sec
 
sent 159 bytes received 77 bytes 67.43 bytes/sec
 
total size is 2,041,319 speedup is 8,649.66
 
total size is 2,041,319 speedup is 8,649.66
  +
</PRE>
По умолчанию, rsync сначала выполняет удаление файлов перед копированием для уверенности, что хватит свободного места на приемной стороне (т.е. использует по умолчанию —delete-before). Если мы хотим удалять файлы после копирования, используйте параметр —delete-after.
 
  +
По умолчанию, rsync сначала выполняет удаление файлов перед копированием для уверенности,
 
 
что хватит свободного места на приемной стороне (т.е. использует по умолчанию —delete-before). Если мы хотим удалять файлы после копирования, используйте параметр —delete-after.
  +
<BR>
 
Если мы хотим хотим удалять файлы в процессе передачи, а не перед, то можно использовать опцию —del (—delete_during). Это поможет сэкономить немного ресурсов и времени.
 
Если мы хотим хотим удалять файлы в процессе передачи, а не перед, то можно использовать опцию —del (—delete_during). Это поможет сэкономить немного ресурсов и времени.
  +
<BR>
 
 
Кстати, это не все «delete» параметры, которые есть, вот их полный список с кратким описанием:
 
Кстати, это не все «delete» параметры, которые есть, вот их полный список с кратким описанием:
   
Строка 292: Строка 301:
 
* --delete-after – receiver deletes after transfer, not before
 
* --delete-after – receiver deletes after transfer, not before
 
* --delete-excluded – also delete excluded files from dest dirs
 
* --delete-excluded – also delete excluded files from dest dirs
  +
<BR>
 
 
А если вам по какой-то причине не нужно обновлять файлы на принимающем сервере, вместо опции —del.. можно использовать опцию —ignore-existing.
 
А если вам по какой-то причине не нужно обновлять файлы на принимающем сервере, вместо опции —del.. можно использовать опцию —ignore-existing.
  +
<BR>
 
—no-perms —no-owner —no-group
+
<code>—no-perms —no-owner —no-group</code>
  +
</BR>
 
 
Иногда нам может потребоваться не переносить атрибуты (права файлов, пользователя и группу пользователя). Для этого мы можем воспользоваться опциями —no-p —no-o —no-g (оно же —no-perms —no-owner —no-group):
 
Иногда нам может потребоваться не переносить атрибуты (права файлов, пользователя и группу пользователя). Для этого мы можем воспользоваться опциями —no-p —no-o —no-g (оно же —no-perms —no-owner —no-group):
  +
<BR>
 
rsync -avz -e "ssh -p 2013" --no-p --no-o --no-g ./somedir
+
<code>rsync -avz -e "ssh -p 2013" --no-p --no-o --no-g ./somedir</code>
  +
<BR>
 
Важно соблюдать порядок (особенности работы «—no-OPTION» в rsync).
 
Важно соблюдать порядок (особенности работы «—no-OPTION» в rsync).
   
—inplace
+
==<code>—inplace</code>==
  +
<code>—inplace</code>
   
По умолчанию rsync, при копировании существующего файла создает его новую версию, а потом заменяет старый файл на новый. Это сделано для того, чтобы исходный файл не пострадал в случае каких-то перебоев. Данная опция позволяет изменить это поведение таким образом, чтобы rsync сразу начал перезапись старого файла. Опция полезна при копировании больший файлов на одном компьютере:
+
По умолчанию rsync, при копировании существующего файла создает его новую версию, а потом заменяет старый файл на новый.<BR>
  +
Это сделано для того, чтобы исходный файл не пострадал в случае каких-то перебоев. <BR>
  +
Данная опция позволяет изменить это поведение таким образом, чтобы rsync сразу начал перезапись старого файла. Опция полезна при копировании больший файлов на одном компьютере:
  +
<BR>
 
<code>rsync -av --inplace ./Видео.mp4 ./vidinplace.mp4</code>
  +
<VR>
   
 
==<code>-W, —whole-file</code>==
rsync -av --inplace ./Видео.mp4 ./vidinplace.mp4
 
-W, —whole-file
 
   
 
Эта опция будет полезна, если мы копируем файлы с нагруженного или слабого сервера, так как она отключает дифференциальный алгоритм rsync’а и с ним весь файл передается как есть, целиком, не тратя время CPU на вычисления.
 
Эта опция будет полезна, если мы копируем файлы с нагруженного или слабого сервера, так как она отключает дифференциальный алгоритм rsync’а и с ним весь файл передается как есть, целиком, не тратя время CPU на вычисления.
 
Что в итоге?
 
 
Я постарался описать наиболее частые примеры использования rsync, и сказу сразу: это только минимум того, что может эта утилита.
 
 
Если вы где-то нашли ошибку, или есть еще какие-то интересные способы использования rsync — пишите, я добавлю их в статью ;).
 
   
 
=Источники=
 
=Источники=

Текущая версия на 18:21, 24 июля 2024

Rsync

Что б не читать ман каждый раз - краткий сборник рецептов

TL;DR

rsync \
    -avz \
    -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" \
    --progress \
    ${HOME} \
    username@<New Mac IP>:path_to_data


RSync это быстрый и чрезвычайно универсальный инструмент для синхронизации (копирования) файлов. Его самое основное преимущество это передача только изменившиеся части файла, а не файла целиком, что несомненно отражается на скорости копирования/синхронизации. А если при копировании произойдет какой-то сбой, то достаточно перезапустить команду и копирование будет продолжено с того же места.


RSync может копировать файлы локально на компьютере, с локальной машины на удаленную (к примеру на сервер) и наоборот. Этот инструмент очень удобно использовать для создания резервных копий своих файлов, так как имеет большое обилие опций и экономно пользуется ресурсами системы.

Сам сервис работает на SSH протоколе по умолчанию, но может работать и на собственном протоколе rsyncd, но обо всем по порядку.

Базовый синтаксис

rsync <опции> <что копируем с компьютера> <пользователь@хост:/куда_копируем>

Основные опции rsync

Ниже перечислены только основные опции, которые чаще всего помогали в работе.

Базовые опции

  • -n, --dry-run – что-то типа тестового режима, указывает не осуществлять никаких передач, а только сообщать о тех действиях, которые могли бы произойти.
  • -a, --archive – архивный режим, включает рекурсивное копирование и сохранение прав и владельца (эта опция включает в себя опции rlptgoD, они будут описаны следующими). Учтите, эта опция не сохраняет жесткие ссылки.
  • -r, --recursive – рекурсивный режим (копирование всех директорий и файлов в них).
  • -l, --links – копировать символьные ссылки как символьные ссылки.
  • -p, --perms – сохранять права для файлов. Без указания этой опции каждый новый файл получает те права доступа, что имеет исходный с учетом umask, действующей на приемной стороне, в то время как все другие (включая обновляемые) сохраняют свои уже существующие разрешения (это то же поведение, что имеют другие утилиты копирования файлов, такие как cp).
  • -t, --times – обновлять время модификации файла на приёмной стороне (при отсутствии этой опции или -a становиться неэффективной оптимизация передачи по времени изменения файлов).
  • -g, --group – сохранять группу пользователя. Если удаленная сторона не действует из-под супер-пользователя, то сохранятся только те значения групп, членом которых является пользователь приемной стороны, т.е. имеет значение имя группы, а не ее id.
  • -o, --owner – сохранять владельца на приемной стороне в точности с оригиналом. На большинстве систем только супер-пользователь имеет право устанавливать владельца файла. Нужно заметить, что если удаленный демон действует в chroot-окружении, то подразумевается наличие параметра --numeric-ids (он описан ниже), потому что на удаленной стороне в этом случае нет доступа к именам пользователей в /etc/passwd.
  • -D, --devices – сохранять файлы устройств (root only).

Работа с файлами

  • -u, --update – не перезаписывать более новые файлы: указывает пропускать любые файлы, уже существующие на приемной стороне с более поздней датой, чем у исходных файлов.
  • --delete – удалять файлы, которых нет в источнике (полезно для создания точной копии).
  • --ignore-errors – продолжать копирование и удаление после появления ошибок (При удалении (--delete) форсирует процесс и игнорирует любые ошибки, даже ошибки ввода-вывода.)
  • --exclude – исключить файлы (подробно описано ниже).
  • --include – не исключать файлы (подробно описано ниже).
  • -F – опция которая заставляет искать файл .rsync-filter, в котором настраиваются фильтры (exclude/include). Если опция указана дважды то будет исключен и сам файл .rsync-filter.
  • -x, --one-file-system – не переходить границ файловой системы при рекурсивном копировании. Это полезно при необходимости копирования только одной файловой системы.
  • -R, --relative – использовать относительные пути при создании символических ссылок. Это значит, что посылаются полные пути, указанные в командной строке, а не последние части имен файлов. На практике это полезно, когда Вам нужно послать несколько различных каталогов за раз.
  • -H, --hard-links – пересоздать жесткие ссылки на конечной стороне в соответствии с тем, что имеется на исходной. Без этого параметра жесткие ссылки обрабатываются как обычные файлы.
  • -L, --copy-links – Если обнаружена символьная ссылка, то на приемную сторону копируется файл, на который она указывает, а не такая же символьная ссылка.
  • --numeric-ids – не транслировать имена владельца и группы в цифровые UID и GID, оставить на удалённой стороне номера как есть.

Вместо имен групп и пользователей посылаются их числовые id и ставятся в соответствие друг другу на обоих концах. По умолчанию rsync использует имена групп и пользователей для определения владельца файлов. Специальные uid 0 и gid 0 никогда не отображаются через имена пользователей/групп, даже если не указана --numeric-ids. Если исходная система работает в ограниченном chroot-окружении или если пользователь или группа не существуют на приемной стороне, то используются исходные числовые id.

  • -m, --prune-empty-dirs – не копировать пустые директории.

Настройка синхронизации/подключения/передачи файлов

  • -c, --checksum – использование сверки по контрольным суммам, а не по времени изменения и размеру файлов.
  • --size-only – сверять только размер файлов (по умолчанию проверяется размер и время модификации).
  • -z, --compress – компрессия данных при передаче (реализуется gzip).
  • -e,--rsh="command" – опция позволяет выбрать альтернативный протокол подключения между удаленной и локальной машинами.
  • --max-size – максимальный размер файла для передачи.
  • --bwlimit — ограничение скорости для передачи файлов (Kbit/s).
  • --partial – По умолчанию rsync будет удалять все частично-переданные файлы в случае сбоя передачи. Если этот параметр указан, то rsync будет сохранять частично-переданные файлы, что может сократить время копирования при повторном запуске.
  • -P – данная опция включает в себя опцию --partial и --progress.

Отображение/результат

  • --progress – выводить прогресс передачи файлов.
  • --stat – показать статистику передачи.
  • -v, --verbose – вывести подробную информацию о процессе: один -v будет выдавать список переданных файлов и итог в конце, два -v выдает детали о пропущенных файлах и более подробный итог, больше -v полезно для отладки.
  • -q, --quiet – минимальная информация.

Опции полезные для создания инкрементальных резервных копий:

  • -b, --backup – создавать резервные копии ранее существовавших файлов до начала копирования на принимающей стороне. По умолчанию файлам добавляется суффикс ~, а если указана директория (--backup-dir), то суффикс не добавляется.
  • --backup-dir=.. – указывает каталог, куда сохранять резервные копии.
  • --suffix=.. – опция позволяет указать свой суффикс.

Базовые пример

Как скопировать/синхронизировать файлы локально

rsync -av /home/user/Downloads/files/ /home/user/Downloads/copyfiles Данная команда копирует файлы (т.е. содержимое) из каталога /home/user/Downloads/TEMP/files/ в каталог /home/user/Downloads/TEMP/copyfiles.
Важный момент:
если в конце пути до источника (каталога) нет слэша, то будет скопирован сам каталог (в примере выше это files). если слэш указан, то будет скопировано содержимое каталога (т.е. то, что внутри files, из примера выше) В случае необходимости скопировать несколько каталогов и файлов за раз в каталог, которого еще не существует, можно выполнить эту команду:

rsync -av ./2021 ./logo.svg.png ./copy2021 ./copydir

Находясь в нужном каталоге, мы скопировали каталог 2021, файл logo.svg.png и еще один каталог copy2021 в несуществующий ранее каталог copydir.
Вот как это выглядит наглядно:

rsync -av ./2021 ./logo.svg.png ./copy2021 ./copydir
sending incremental file list
created directory ./copydir
logo.svg.png
2021/
2021/filefromsrv
2021/filestorage.png
2021/login.png
2021/mainweb.png
2021/motiondetection.png
2021/motioneye-movies.png
2021/motioneye-recordetmovies.png
copy2021/
copy2021/just-file.txt
 
sent 723,033 bytes  received 349 bytes  1,446,764.00 bytes/sec
total size is 721,629  speedup is 1.00

Как скопировать/синхронизировать с компьютера на удаленный сервер

rsync -av 2021 user@10.10.20.15:/home/user/
Важно указывать полный путь на удаленном сервере, иначе rsync попытается скопировать каталог «2021» в корень удаленного сервера.
Еще важно указывать полный путь до удаленного сервера, так как, к примеру, копируя файл «file.txt» на сервер указав путь /home/user/somedir, каталог somedir не будет создан, вместо этого файл file.txt скопируется на сервер под именем somedir. Чтобы избежать этого используйте путь полный путь /home/user/somedir/.

сжать файлы при передачи - ключ -z


rsync -avz 2021 user@10.10.20.15:/home/user/

Как скопировать/синхронизировать с удаленного сервера на компьютер

rsync -av user@10.10.20.15:/home/user/filefromsrv ./ В данном примере мы копируем файл filefromsrv в каталог, в котором находимся.

Как указать другой порт ssh и ключ?

С помощью опции -e (она же —rsh). Вот как скопировать файл с компьютера на сервер у которого не стандартный ssh порт:
rsync -av -e "ssh -p 2013" ./filefrompc user@10.10.20.7:/home/user/
А вот как можно указать ключ авторизации и порт:
rsync -av -e "ssh -p 2013 -i ~/.ssh/id_rsa" ./filefromsrv user@10.10.20.7:/home/user/mydir/
Настроить ssh алиас что быне указывать лишних ключей:

Пример конфига:

$ cat ~/.ssh/config
Host srv
   HostName 10.10.20.7
   Port 2013
   User user

Пример команды:

rsync -av ./filefromsrv srv:/home/user/somedir/

прогресс копирования/синхронизации

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


Вот пример:

rsync -av ./somedir user@10.10.20.15:/home/leo/
sending incremental file list
somedir/
somedir/Screenshot from 2021-01-22 17-42-17.png
somedir/Screenshot from 2021-01-24 02-17-17.png
 
sent 1,996,838 bytes  received 58 bytes  3,993,792.00 bytes/sec
total size is 2,041,319  speedup is 1.02

ключ —progress. Вот пример:

rsync -aP ./somedir user@10.10.20.15:/home/user/
sending incremental file list
somedir/
somedir/Screenshot from 2021-01-22 17-42-17.png
        194,291 100%   51.35MB/s    0:00:00 (xfr#1, to-chk=1/3)
somedir/Screenshot from 2021-01-24 02-17-17.png
      1,847,028 100%   21.22MB/s    0:00:00 (xfr#2, to-chk=0/3)

Некоторые могут советовать ключ -P, но имейте в виду, -P включает в себя ключ —partial и —progress одновременно (что в целом не так страшно).

Как ограничить скорость передачи файлов

Нужно указать опцию —bwlimit=SPEED, где SPEED это скорость в Кбайт в секунду:
rsync -avP --bwlimit=100 ./somedir user@10.10.20.15:/home/leo/
Полезно бывает на слабом интернете с большими файлами.

Как исключить некоторые файлы или включить определенный тип файлов?

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

исключить две директории

rsync -av --exclude={'user/.local/share/Trash','user/.cache'} /home/user user@10.10.20.15:/home/user/bkp/

исключить одну директорию

rsync -av --exclude=.git /var/www/site user@10.10.20.15:/home/user/bkp/

исключить файлы с определенным расширением

rsync -av --exclude="*.tmp" /var/www/site user@10.10.20.15:/home/user/bkp/

Саму опцию мы можем использовать несколько раз:

rsync -av --exclude="*.tmp" --exclude="tmp/*" --exclude="*~" /var/www/site user@10.10.20.15:/home/user/bkp/

копирования определенного типа файлов —include

Используется точно так же, как и exclude.

все файлы с расширением .sql

rsync -av --exclude="*.sql" ./projectname user@10.10.20.15:/home/user/sqlbkp/

Исключения с помощью .rsync-filter

Для более гибкой настройки копирования (в случае регулярного копирования это будет очень полезно) все исключения/включения можно оформить в файле .rsync-filter (это появилось в более поздних версиях rsync).

Попробую объяснить подробно на примере, как и что мы можем исключать (спасибо этому блогу за хорошее описание). Допустим, у меня есть такой каталог (somedir), в котором я хочу исключить (красная стрелка) или оставить (зеленая стрелка) некоторые файлы/каталоги:


Ниже приведен один из примеров настройки исключений в файле .rsync-filter с комментариями:

cat .rsync-filter 
# исключаем только каталог .cache (не будут исключены каталоги work/lo*/.cache и dir2/.cache)                                                                        
- /.cache
# исключаем все каталоги Trash во всех папках
- /**/Trash/
# исключаем каталог Cache в каталогах .mysoft/soft*/
- /.mysoft/*/Cache
# исключаем файл pass.md
- pass.md
# исключаем все файлы с расширением .tmp
- *.tmp
# исключаем весь каталог example
- /example/
# Оставляем каталог Trash в каждом каталоге work/lo*/..
+ /work/**/Trash/

Для того, чтобы rsync заметил файл .rsync-filter, достаточно указать опцию -F:

rsync -avF ./somedir 10.10.20.15:/home/leo/ В итоге на сервер будут скопированы только эти файлы


Чтобы сам .rsync-filter не копировался, то -F нужно будет указать дважды

Другие полезные опции

—delete / —delete-after / —del (—delete_during)

—delete / —delete-after / —del (—delete_during)
Если мы делаем ежедневные резервные копии и не хотим засорять удаленный сервер лишними файлами (которых уже нет в источнике), то мы можем использовать опцию —delete:

rsync -avz -e "ssh -p 2013" --delete ./somedir bkp@10.10.20.7:/home/bkp/
В результате будет удален файл, которого больше нет в директории источника (в somedir):

rsync -avz -e "ssh -p 2013" --delete ./somedir bkp@10.10.20.7:/home/bkp/
bkp@10.10.20.7's password: 
sending incremental file list
deleting somedir/lolo
somedir/
 
sent 159 bytes  received 77 bytes  67.43 bytes/sec
total size is 2,041,319  speedup is 8,649.66

По умолчанию, rsync сначала выполняет удаление файлов перед копированием для уверенности, что хватит свободного места на приемной стороне (т.е. использует по умолчанию —delete-before). Если мы хотим удалять файлы после копирования, используйте параметр —delete-after.
Если мы хотим хотим удалять файлы в процессе передачи, а не перед, то можно использовать опцию —del (—delete_during). Это поможет сэкономить немного ресурсов и времени.
Кстати, это не все «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


А если вам по какой-то причине не нужно обновлять файлы на принимающем сервере, вместо опции —del.. можно использовать опцию —ignore-existing.
—no-perms —no-owner —no-group
Иногда нам может потребоваться не переносить атрибуты (права файлов, пользователя и группу пользователя). Для этого мы можем воспользоваться опциями —no-p —no-o —no-g (оно же —no-perms —no-owner —no-group):
rsync -avz -e "ssh -p 2013" --no-p --no-o --no-g ./somedir
Важно соблюдать порядок (особенности работы «—no-OPTION» в rsync).

—inplace

—inplace

По умолчанию rsync, при копировании существующего файла создает его новую версию, а потом заменяет старый файл на новый.
Это сделано для того, чтобы исходный файл не пострадал в случае каких-то перебоев.
Данная опция позволяет изменить это поведение таким образом, чтобы rsync сразу начал перезапись старого файла. Опция полезна при копировании больший файлов на одном компьютере:
rsync -av --inplace ./Видео.mp4 ./vidinplace.mp4 <VR>

-W, —whole-file

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

Источники