Skip to content
andyceo edited this page Apr 22, 2022 · 2 revisions

Опции

  • --stats: данная опция после завершения синхронизации выводит суммарную статистику.
  • --progress: показать прогресс во время передачи данных с одной машины на другую, отображает файлы и время, оставшееся до завершения передачи каждого файла (общий прогресс не показывает)
  • --info=progress2: показать общий прогресс передачи файлов (работает с версии 3.1.0). rsync должен быть запущен на той же машине, где и лежит источник файлов, для расчета приемлемого прогресса
  • --max-size='200k': будет передавать только те файлы, которые равны или меньше, чем 200k
  • --bwlimit=100: предел пропускной способности при передаче данных от одной машины к другой машине, эта опция помогает нам ограничить пропускную способность IO
  • --dry-run: не будет делать каких изменений, только выполнит прогон команды и покажет вывод команды
  • --remove-source-files: автоматически удалит все переданные файлы с сервера-источника
  • --delete: удаляет файлы, которые не существуют в каталоге-источнике, но существуют в каталоге-приемнике. Есть разновидности: --delete-after (самый безопасный для данных, удаляет их после того, как синхронизация полностью прошла), --delete-before и др.
  • --include 'R*', --exclude '*': синхронизирует только те файлы и директории, которые начинается с R, и исключает все другие файлы и директории
  • --inplace - если указано, то rsync не создает временный файл при копировании. Поведение по умолчанию - rsync создает временный файл перед тем, как обновить старый файл на приемнике. Это дает некоторую степень безопасности: когда передача будет прервана, существующий файл на приемнике останется нетронутым. --inplace переопределяет это поведение и говорит rsync обновить существующий файл напрямую. При этом вы имеете риск получить битый файл на машине-приемнике, в случае, если передача будет прервана.

Полный список параметров с описанием на русском языке можно посмотреть тут: rsync (1) - Opennet

Destination and Source Trailing Slash

Или как правильно задавать source & destination в rsync.

Destination всегда трактуется как папка, независимо от того, указали вы оконечный слэш или нет: /dest и /dest/ - указывает на одну и ту же папку и имеет один и тот же эффект.

Однако /source и /source/ трактуются по-разному. Если оконечный слэш указан: /source/, то содержимое внутри /source/ будет перемещено в /dest, а сама папка - нет. Но если оконечный слэш не указан: /source, то сама папка будет перемещена в /dest, т.е. получится /dest/source.

Таблица ниже иллюстрирует это:

source dest description command
/path/to/source/ /path/to/dest Содержимое внутри source положить (синхронизировать) внутрь папки dest rsync /path/to/source/ /path/to/dest
/path/to/source /path/to/dest Папку source и ее содержимое положить (синхронизировать) внутрь папки dest rsync /path/to/source /path/to/dest

Примеры

LOCAL => LOCAL

Обычный паттерн для локального бэкапа папки /source в папку /dest/source таков:

rsync -ahvz --stats --delete-after /source /dest

Или, для простейшего случая переноса папки source в /dest/source, когда /dest полностью пустой:

rsync -ah --stats /source /dest

А это случай посложнее, когда надо сохранить жесткие ссылки и идентификаторы файлов, приемник пустой (идеально для переноса папки с бекапами от rsnapshot в новое место):

rsync -ah --stats -H --numeric-ids /source /dest

И наконец, случай, когда папка с бекапами rsnapshot уже перенесена полностью, но за время переноса источник изменился, и надо синхронизировать папки полностью, один-в-один:

rsync -ah --stats -H --numeric-ids --delete-after /source /dest

LOCAL => LOCAL cron

Следующая команда пригодна для выполнения по расписанию. Она синхронизирует директории и пишет подробный лог:

rsync -ahvz --stats --delete-after /source /dest >> /var/log/rsync-cron.log 2>&1

LOCAL => REMOTE

Кладем содержимое локальной папки source в удаленную папку /dest (операция push). Предусловия: rsync и ssh установлены на обоих машинах, и ssh работает по стандартному порту 22.

Запускаем на локальной машине:

rsync -ahvz /source username@remote_host:/dest

Простейший скрипт:

RSYNC=/usr/bin/rsync
SSH=/usr/bin/ssh
KEY=/home/thisuser/cron/thishost-rsync-key
RUSER=remoteuser
RHOST=remotehost
RPATH=/remote/dir
LPATH=/this/dir/

$RSYNC -az -e "$SSH -i $KEY" $RUSER@$RHOST:$RPATH $LPATH

REMOTE => LOCAL

Вытягиваем содержимое удаленной папки source в локальную папку dest (операция pull).

Запускаем на локальной машине:

rsync -ahvz username@remote_host:/source /dest

Нестандартный порт ssh

Команда ниже позволяет сделать операцию pull, если ssh на удаленной машине работает на нестандартном порту 2022, показывая прогресс операции и время, оставшееся до окончания скачивания каждого файла:

rsync -ahvz --progress -e "ssh -p 2022" username@remote_host:/source /dest

Работа с большим объемом и количеством файлов

Следующий пример позволит относительно быстро скопировать большой объем данных между файловыми системами, сохраняя жесткие ссылки (hardlinks, опция -H):

sudo rsync -ahHz --delete --delete-during --numeric-ids rsnapshot /backups

Дело в том, что если использовать флаг --delete-after (позволяющий безопасно, после передачи всех файлов, удалить в приемнике отсутствующие в источнике файлы), то rsync будет строить список файлов прежде чем что-то передавать, что может очень сильно замедлить работу. Так же он начнет передачу сразу.

См. Speed up / avoid calculation of rsync file lists

Ссылки

Устройства хранения: диски, блочные устройства, файловые системы

В этом разделе находится информация об устройствах хранения, файловых системах и утилитах для работы с ними.

Clone this wiki locally